Have you ever put your heart and soul into a software project only to find things that still go wrong, even though you felt that you tested it thoroughly? The package had passed demanding QA tests and everyone was proud of how well things went, but once it hit the market, reports started coming in and you had that sinking feeling!
According to Michael Nyguard, no matter how well laid your plans are, bad things will happen. It is fatal to think that you have eliminated all bad events. Instead, you must look at your release as being the beginning of your work. You must make sure that your system can recover from whatever unanticipated traumas that might befall it.
It is the decisions that you make during development that will affect the quality of your release. Release It!: Design And Deploy Production-Ready Software was written to help you understand what causes good software to go bad, and to show you how to take control of the situation when it happens.
Release It! was written for architects, designers, and developers of enterprise class software systems. This includes applications, websites, web services, and EAI projects. According to the author, "enterprise class" means if the software stops, the company loses money.
Release It! breaks things down into four parts, each of which is introduced by a case study. Part one, "Stability," introduces the concepts you need to maintain system uptime; to keep your system alive. Stability is what is needed before anything else matters. If you don't have stability, you don't have a product, and soon you won't have a company.
Part two, "Capacity," will show you how to measure the capacity of your system. You will learn how to optimize capacity, and, using patterns and anti-patterns, you will learn the difference between good and bad designs and the effect that difference has on capacity.
In part three, "General Design Issues," you will look at the issues that architects should consider when creating software. These include new technologies, practices, and techniques that will allow you to greatly enhance the performance of your software as well as increase its reliability.
Part four, "Operations," will have you examine your system's ongoing life as part of the overall information ecosystem. You have to examine the system in its state of being to better diagnose its health. Without a clear understanding, it will be difficult — if not impossible — to plan changes and improvements without subjecting the system to failure.
All in all I found Release It! a very easy read. While the author comes from a Java and Unix perspective, the book's focus is generally neutral and grounded toward concepts and techniques that are portable across all platforms and technologies. Each of these case studies is based on real events, only the names (of people, companies, methods, and classes) have been change to protect the innocent. The detail of the information is very helpful, giving insight into the problems and their solutions.
If you are looking for a better way to deliver your product, a way to avoid the traps and pitfalls, then Release It! is a good place to begin.