Published March 21, 2021
by Doug Klugh

Building Agility

Facilitate continuous delivery by treating every code change as a release candidate.  Each code commit is proven releasable by ensuring it successfully builds, passes all code scans, and passes all its tests — assuming the tests are sufficiently comprehensive and running in an environment that sufficiently resembles production.  Integrate every code commit to ensure the software is always in a working state.  Fix broken builds as quickly as possible to prevent the error from progressing downstream.  Use Feature Toggles to enable product managers and/or business partners to control when a particular feature is released.

Traditional Anti-Patterns

Gone are the days of packaging multiple enhancements into a single release.  Do not delay nomination of a Release Candidate (RC) until features are code complete and unit tested.  Employ Continuous Integration and Continuous Deployment (CI/CD) patterns by automating your deployment pipeline to ensure complete and successful builds, tests, and integrations.  Integration and regression testing should occur with every code commit — not delayed until an “official” release candidate has been created.  Delaying testing until the end of the development cycle is a good way to diminish quality — when there is often insufficient time to fix bugs that are found in late testing.  It is faster and cheaper to discover and fix defects at the point where they are introduced.  Escalate the value of your software by shifting quality left within the Software Development Lifecycle (SDLC).