Just finished Software Architecture in Practice by Bass, Clements, and Kazman, and I have to admit to being pleasantly surprised. It’s a dense monster of a book, published by the Software Engineering Institute, and talks about a topic that’s really hard to talk about in a general but still useful way: hence my surprise at finding it both useful and, on balance, readable.
It starts slow with a cumbersome discussion about the architecture business cycle, but it picks up with a discussion of what exactly software is, how to document it (hint: there is no one true recipe), how to design to meet quality attributes, and how to evaluate one. Interspersed throughout are more or less interesting case studies from industry — useful, but most of them are from a narrow domain and are quite dated.
Of special interest are the chapters discussing how to design an architecture to meet a set of quality attributes such as performance, or stability, or extensibility. what makes this discussion so good is how concrete it is — very specific guidelines and tips are provided for architectural design elements that support each of the quality objectives. I won’t go into any more detail, but just these chapters alone are worth the read.
The chapters discussing architecture evaluation are also interesting. The ATAM model from the SEI is suggested as the preferred way to perform such evaluations. Like most SEI models it is cumbersome and overblown, yet built around a very sound core. My main criticism of the model is that it depends on more technical knowledge in the set of reviewers from “the business” than is generally found, at least in my experience. But the basic model of presenting the architecture to stakeholders, reviewing against non-functional quality attributes, and assessing risk factors is very reasonable and a very good exercise. Better, the exercise must begin with a set of business goals defined for the architecture — not for the products built upon it — which has immense value not only for the architect but for the business folks who have to consider it.
So I have to recommend the book to anyone interested in architecture or large-scale design. Just be prepared to skim over the occasional part(s) you find tedious and you’ll enjoy it quite a bit.