#
Legacy Deployment Pipeline
This page explains how we moved from a sequential, environment‑by‑environment pipeline to a release‑based model, why we changed, and what benefits and practices define the current approach.
#
Previous Sequential Deployment Approach
Our previous workflow followed a strictly sequential deployment path where code must progress through each environment in order:
--- title: Sequential Deployment (Legacy) --- flowchart LR dev ==> qa qa ==> pent pent ==> preprod1 preprod1 ==> prod1
#
How It Worked
- Developers created feature branches off dev
- Feature branches were merged into dev
- Code was then promoted through each environment sequentially: dev → qa → preprod1 → pen-t → prod1
While this approach provided a structured promotion path, it presented several challenges that led us to evolve our strategy.
#
Challenges with Sequential Deployment
#
Deployment Bottlenecks
- Fixed Release Cadence: All feature deployments must follow the same full path, even for small changes
- Dependency Chains: Features ready for production must wait for all features ahead of them in the pipeline
- Slow Feedback Cycles: Developers receive production feedback only after full cycle completion
- Environment Congestion: Multiple features must share testing environments simultaneously
#
Limited Flexibility
- All-or-Nothing Deployments: Features in a sprint branch must move together, complicating targeted rollouts
- Complex Hotfixes: Emergency fixes require special branching patterns that bypass normal workflow
- Difficulty Rolling Back: Reverting specific features is challenging when they're bundled with other changes
- Environment Drift: Long promotion cycles can lead to significant differences between environments
#
Evolution to Release-Based Deployment
To address the limitations of our sequential approach, we transitioned to a more flexible release-based deployment model. This evolution enables faster delivery without sacrificing quality or stability.
#
New Release-Based Approach
--- title: Release-Based Deployment (Current) --- flowchart LR prod1 <-.-> feat/shiny-new-feature feat/shiny-new-feature -.-> dev feat/shiny-new-feature -.-> qa feat/shiny-new-feature ==> release/2504 release/2504 ==> pent release/2504 ==> preprod1 release/2504 ==> prod1
#
Benefits of Release-Based Approach
Our new strategy introduces a more direct path from feature/release branches to environment branches, offering several key advantages:
#
Enhanced Deployment Flexibility
- Feature-Based Deployments: Individual features can be deployed independently, allowing for targeted releases
- Parallel Promotion Paths: Critical features can follow accelerated paths while routine changes follow standard promotion
- Granular Control: Each feature can be evaluated and promoted on its own merits and timeline
- Simplified Feature Flagging: Direct deployment facilitates feature flag implementation for controlled rollouts
#
Improved Development Efficiency
- Faster Feedback Cycles: Developers receive production feedback more quickly with shorter promotion paths
- Reduced Merge Conflicts: Eliminating sprint branches reduces integration complexity
- Clearer Ownership: Direct release-to-environment flow maintains clear accountability throughout the lifecycle
- Simplified Rollbacks: Individual feature deployments can be reverted without affecting other work
- Independent Testing: Features can be tested individually in higher environments without waiting for full sprint completion
#
Migration Considerations
#
What Changed
- Branch Strategy: Moved from sequential environment promotion to release-based branching
- Deployment Triggers: Changed from environment branch commits to release branch deployments
- Feature Integration: Features now integrate through release branches rather than sequential environment promotion
- Hotfix Process: Simplified hotfix process with direct release branch targeting
#
What Stayed the Same
- Environment Structure: All environments (dev, qa, pent, preprod1, prod1) remain the same
- AWS Infrastructure: No changes to underlying AWS environment setup
- Quality Gates: Same testing and approval requirements
- Security Policies: All security and compliance requirements maintained
#
Lessons Learned
#
What Worked Well in Sequential Approach
- Clear promotion path was easy to understand
- Environment isolation was well maintained
- Quality gates were consistently applied
#
What We Improved
- Reduced deployment bottlenecks
- Increased deployment flexibility
- Simplified hotfix processes
- Better feature isolation
- Faster feedback cycles
#
Future Considerations
As we continue to evolve our deployment strategy, we're considering:
- Tag-Based Deployments: Moving towards using tags with versions to deploy instead of blocking and unblocking branches
- Feature Flags: Enhanced feature flagging for more granular control
- Automated Testing: Increased automation in the deployment pipeline
- Environment Parity: Better alignment between environments
This evolution represents our commitment to continuous improvement in our development and deployment processes while maintaining the quality and reliability our customers expect.