Release It! by Michael T. Nygard. Pragmatic Press, ISBN 0–9787392–1–3
The subtitle of this book might as well be Architecture and Design for the Paranoiac. The book lays out some critical aspects to creating and rolling out stable software systems. It’s directed to those working in the enterprise arena and need the utmost from stability, capacity, and overall design. Nygard’s definition of “enterprise” is somewhat broad in that he considers “enterprise” to be any system providing mission-critical support to a business. Regardless of how you define your particular software, I’m sure you’ll find something useful in this book.
Nygard presents the book from an anti-pattern/pattern approach: he uses case studies to illustrate how critical errors in design or implementation (anti-patterns) have caused disasterous outages. He then moves on to show how application of solid design patterns could have avoided the problems. He also spends some time going in to detail on how some of the outages have happened, including brief discussions on network packet captures and decompiling third party drivers.
There are a lot of solid fundamentals in the book: dealing with exceptions at system integration points, thread synchronization, avoid rolling your own primative feature libraries such as connection pools, and make sure to test third-party libraries which play critical roles. The general approach of discussing anti-patterns followed by patterns is also a nice way of putting forth the material.
There are a lot of more complex bits covered as well, such as thinking ahead on how you’ll deal with bots and crawlers, avoiding AJAX overkill, designing ahead for and using session. I also liked that Nygard talks about the importance of involving the customer in decisions on thresholds and other critical boundaries.
Despite the great content, there is a blistering flaw, IMO: A complete lack of solid implementation specifics. Nygard doesn’t provide much detail at all on actual implementation of the critical patterns he espouses, nor does he point you in the direction of other sources of information. For example, the Timeout pattern is held up as a vital aspect in many parts of the book; however, there’s no practical detail on actual code to implement a Timeout, and there’s only one reference to a practical implementation. The Circuit Breaker pattern, central to many of Nygard’s architecture assertions, doesn’t have any code or a single reference to other material where you can find implementation details.
While I find that a major gap in the book, otherwise I think it’s a solid addition to one’s bookshelf. The writing style’s very nice, his writing voice is light and concise, and the summary bullets in each section (“Remember This”) are of great value. Additionally, there are plenty of references to other useful works. (Just not for the patterns I complained about above.)