Evolving Understanding of Delivery
Two new terms have recently emerged around software delivery: Software Defined Delivery and Progressive Delivery. Why? How do they relate to Continuous Delivery?
Several forces today make delivery increasingly complex. Notably, proliferation of repositories, with hundreds of small projects replacing a handful of monoliths; desire for greater automation to realize the full potential of CD across multiple environments; the rise of feature flagging; and increased evidence (such as the Equifax debacle) of the need to bake security into the delivery process.
James Governor of RedMonk recently coined the term Progressive Delivery to capture some of these new needs:
I have been waiting for a term to emerge to describe a new basket of skills and technologies concerned with modern software development, testing and deployment. I am thinking of Canarying, Feature Flags, A/B testing at scale.
James is clear in acknowledging the critical prior art of Continuous Delivery: "CI/CD is the basis of everything good in modern software development." Progressive Delivery refers to a set of newish problems and practices within Continuous Delivery.
In contrast, Software Defined Delivery (SDD) refers to an approach to solving these and other problems. How do we meet such new delivery demands? How can we iterate quickly to find the best solution for our team?
The core idea of SDD is simple: "Delivery infrastructure is now programmable, and we will program it." Why should we continue to hack delivery pipelines out of YAML and Bash—a tactical solution to a strategic problem? Instead, we should approach delivery like any other engineering problem, applying our core skills and tools.
SDD recognizes that delivery should be:
- Core: Delivery code is production code.
- Engineered: In robust, testable code, just like our applications.
- Collaborative: As people are part of the process and knowledge sharing is critical to success.
- Accelerated: Through increased automation and reuse of components.
Together, these point to an extensible platform that can automate more than delivery. Anything we do repeatedly deserves to be automated. Instead of merely getting to fill in the blanks by configuring a CI application, we want to use our engineering skills and creativity against a rich model. A recent tweet by Atomist's Jessica Kerr highlights the benefits of using modern programming languages:
Ants have evolved to collaborate very successfully at exactly one thing. Humans, with language, can collaborate at whatever we choose, different in each situation. Existing CI/CD solutions are great at helping you do one thing, follow one pattern. Teams, with a modern programming language, can collaborate in any way we choose, customized to our needs.
Progressive Delivery and Software Defined Delivery are complementary. Progressive Delivery describes needs that are becoming increasingly important in cloud native applications; SDD is necessary to meet these and other needs, and be able to continuously improve our continuous delivery.
Delivery is an engineering problem. By bringing our best engineering skills and practices to delivery, we can rise to new challenges as they appear, just as we overcome new business problems.