Architecture vs Agile: competition or co-operation?

Until recently, conventional wisdom has held that Software Architecture design and Agile development methods are somehow “incompatible”, or at least they generally work at crosspurposes (Nord and Tomayko, 2006). Software architecture design has usually been seen by many in the agile community as a prime example of the major agile anti-pattern of “big design up front”. On the other hand, agile methods have been seen by many of those focusing on the discipline of software architecture as lacking sufficient forethought, rigor and far too dependent on “emergent” architectures (a suitable one which may never actually emerge). In my view, there is both a degree of truth and a substantial amount of falsehood in these somewhat extreme viewpoints. Hence the time seems ripe for a book exploring leading research and practice in an emerging field of “agile software architecture”, and charting a path for incorporating the best of both worlds in our engineering of complex software systems. In this foreword I briefly sketch the background of each approach and the anti-agile, antisoftware architecture viewpoints of both camps, as they seem to have become known. I deliberately do this in a provocative and all-or-nothing way, mainly to set the scene for the variety of very sensible, balanced approaches contained in this book. I hope to seed in the reader’s mind both the traditional motivation of each approach and how these viewpoints of two either-or, mutually exclusive approaches to complex software systems engineering came about. I do hope that it is apparent that I myself believe in the real benefits of both approaches and they are certainly in no way incompatible – agile software architecting or architecting for agile, if you prefer that viewpoint – is both a viable concept and arguably the way to approach the current practice of software engineering.