Lean Architecture for Agile Software Development
James O. Coplien, Gertrud Bjørnvig
Wiley 2010 (1st edition)
Agile movement for good or bad is getting more academic traction. This book is such in a good sense: plenty of in-depth analysis and though-provoking insights on the convergence of Agile and Lean. The praxis is not forgotten as well, there are examples and even code snippets, a nerdy paradise.
At first the book takes mostly academic stance. Authors go to great lengths to show the convergence of Lean and Agile ideas in a way that Lean enables Agile, and Agile without lean is wasteful and generally painful exercise. The architecture is seen as an enabling factor for low-waste development. The purpose of it is to separate and isolate slowly changing parts of a system (what-the-system-is — domain, which is unlikely to change fast) from quickly evolving ones (what-the-system-does — ever-changing business scenarios). The idea is definitively not new, but this is the first book where it got some convincing theoretic underpinnings.
Other pillar, which is reflecting end users’ mental model of the domain in the code in order to enable adequate degrees of freedom, is introduced in middle chapters. Authors are convinced, nothing more Agile than proper requirements capturing. Their the technique of choice Use Case Analysis is argued to be the most natural yet flexible option.
Endgame is quite dynamic. Authors present an advanced architectural style of MVC family called DCI (Data, Context and Interaction). The essence of the style is an approach to laying out the code so it to a maximum degree reflects the mental model of end users, which is captured in the form of use cases. As far as I know this is the first book on DCI, so if you — like me — prefer reading books to learn about big new things, this is the way to go. Code examples are in abundance.
Few notes on the style. The text sometimes gets dense and very hard to get through. Reading first chapters require discipline and persistence, though if you managed to get through university, it shouldn’t be a problem anyway. On a brighter side, once you cope with the first part, the narrative becomes surprisingly exciting and rich in ideas. Don’t try skipping though, first chapters are essential for understanding the message.
As a summary, this is quite a advanced book on software architecture. I dare to say that it may be immediately usable for majority of software architects, but even if not, there are still plenty of food for thought. Moreover, I’d recommend reading it to anyone in software industry as it provides a solid background for understanding how to develop applications and systems with less waste.