Due to pressures and opportunities in the market, businesses feel the need to get new features available as fast as possible. They don’t know up-front which features or when. But as soon as they do know, they don’t want to wait for a project to complete a bunch of sprints just to get that one killer feature out there. So they feel the need to release faster, more often and into various environments running from test, acceptance and maybe all the way into production.
Enter ‘Continuous Delivery’
A collection of Processes, tools and techniques for rapid, reliable and continuous development and delivery of software.
In short: We want software to always be suitable for deployment and deployment should be doable with just a push of a button. This needs a few foundations to be successful.
Agile. Your organization needs to embrace the agile way of thinking and acting.
Quality. QA needs to have a strategy based on test early and test often. Doing continuous delivery of features that don’t work isn’t going to be a success.
Automation. Automate a much as you can. Builds, Unit / System / Acceptance Tests, deployments. And don’t forget the rollback scenarios.
Architecture and Configuration Management. Avoid huge monolithic systems, architect your system into smaller components that can be developed and deployed separately.
DevOps. Ensure releases are automated, have instrumentation in the software to measure how it’s used by the end-users.
Some interesting bits that happened to grab my attention were:
– Microsoft Release Management with TFS and workflows to manage the release path and validation/authorization over various environments;
– Using feature flags to ensure that unfinished features in the code don’t interfere with that killer feature you want to release right now;
– It’s not just the source-code that’s managed, it’s the builds too. After all, a build is what gets propagated to the various environments. We don’t have to create a new build for each environment