Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation By Jez Humble
Hopefully, more books I read this year will have an impact on my day to day life, but at the very least this one definitely will. Continuous Delivery by Jez Humble was suggested to me by our VP of engineering along with Release It By Michael Nygard which I read last year. Both cover the software development pipeline by focusing on resiliency and regularly delivering working code. While many a blog will eschew the ideas of continuous delivery, this book gives you the patterns to use to significantly shorten your cycle time – the time between ideation and code live on production.
If you talk to people who are responsible for releasing software, most will tell you releasing is painful. The reasons for this sentiment are many: they do it rarely so it is a big event, it’s manual, there is no automated testing, they have no idea what they are releasing because someone else wrote it and the kicker of them all, production is different than their testing environments. This book calls all of these complaints and more out as anti-patterns and models many of the solutions around one idea: if it is painful right now, then move it forward in your process and do it more often, which forces you to automate it. This means if there is only manual testing which is slow and at the end of your process then do test driven development, i.e. write tests first. He includes in this TDD pattern server deployments where one builds the monitoring and health checks first before they release the server as the “test” will pass once they are deployed. Chances are for many teams especially ones with little automation in place, it means doing a lot of hard things first, automated testing, configuration management, better version control strategies, and getting staging looking more like production. Humble suggests incremental improvements but it is critical to have testing in place as you can release all the time but your customers won’t be too happy if your applications break regularly.
This book will change the way you deliver software and likely will make your life a lot easier. I also suggest reading Nygard’s Release It either right before or right after as it gives you concrete architecture patterns to implement some of Humble’s ideas.