The long-awaited software revolution is upon us. Small startups deliver "minimum viable products" in a few weeks and then evolve them. Huge phone companies win billions if they can beat the competition to market with software ecosystems and infrastructure. Top online services employ thousands of developers, each empowered to release changes multiple times per week. Large-scale intelligent systems respond to your questions, drive your car, and then learn what to do tomorrow.
This revolution is being powered by new trends in software development:
My SaaS company, Assembla, helps customers manage cloud-based teams and take advantage of these trends. However, our own software development techniques were not keeping up. In the fall of 2011 we had problems:
The answer to our problems would not come from normal companies figuring out "best of breed" versions of the old Agile practices. We saw how Agile techniques like Scrum had helped small teams gain confidence by answering questions like "what tasks will we work on together?" But we also saw that Scrum didn't work in a distributed, cloud-based environment. It did not take full advantage of modern automation, it was confined to release iterations of a week or longer, and handicapped by reliance on Post-it notes and face-to-face, meat-to-meat interactions. Scrum failed to accommodate global teams, big projects, and rapid releases.
Instead, we studied industry leaders who are knocking the stuffing out of their competitors (some of their stories are included in this book). They do Continuous Delivery, and they have solved these problems. But we didn't start our company with Continuous Delivery. We had to study it, learn it, and build it up incrementally with tools and skills.
We began implementing this approach in early 2012, using the philosophy of "release more frequently" and incremental improvement. The results are posted below. Now we release changes about 250 times per month. We have fewer bugs in production. Without big releases, we have much less stress.
We found a new type of "Continuous Agile" software development that is:
You will need these techniques if you provide any type of online service, or if you have a big project with a lot of contributors, or if you are running a lean startup.
This type of development is powering the most successful online services. When we looked more closely, we found that continuous delivery was also powering larger IT operations. They are using a revolutionary technique to release tens of thousands of adjustments in the time that a competitor does one release. Almost all business products and services are now built on software and IT systems. To compete, you will need to release more frequently.