I just finished reading Release It by Michael Nygard. Overall my opinion is mixed. The message is great, but parts of the book haven’t aged well since its release in 2007. It describes some specific technical details that were Java 5-centric, which are not helpful anymore. The overall concepts are still things you should know if you are trying to build a large-scale web application. There are three strong case studies of issues with specific systems that illustrate the value of the other recommendations being made.
Part One describes architectural patterns that were a precursor to microservices. It describes pitfalls to avoid when using those patterns; the microservices architecture solves all of the problems described. It does describe parts of microservices but only in SOA terms. There is lots of overlap between microservices and SOA, but it leaves open space for implementations that have known issues.
Part Two is all about preparing a brand-new system for launch and dealing with capacity planning for this. Again, it’s a great concept, but the specifics didn’t age well. For instance, there is a significant portion about capacity planning, but it is speaking in terms of running your own data center. With the significant rise of cloud options, running your own data center is not as relevant, so the discussion is not as complete as you would like. This part opens with a case study of a release and how black Friday caused a massive outage for the new e-commerce platform. However, the portions that describe how to better understand the patterns that control the capacity of the application are really good and still relevant. This information is available in other places but this is a nice concise description.
Part Three is about general data center networking, availability, and some basics of building a large system. Again, lots of good information, and maybe because I knew less about these parts, it felt like it aged better. There is some interesting math on SLAs and some tips for trying to figure out what the cost of increasing the availability of your service would be.
Part Four describes operational patterns that were a precursor to the DevOps model. It’s all about real-time monitoring, understanding the rhythms of a system, and anticipating the growth of that system. The ability to know what “normal” is, and tell when the system has deviated from normal, is critical to staying ahead of problems before they become crises. Anticipating growth isn’t just capacity planning; it is also about setting up version one to be able to deploy version two without downtime.
Despite the weaknesses on the whole I’d recommend the book. The case studies describe the sort of experiences that are critical to understanding how to build great software. But nobody should have to actually live through them. For anyone who wants a more modern resource on some of the individual aspects covered, notably Continuous Delivery and Building Microservices.