Software Architecture

Professionally, I’m a software architect and I’m very interested in all aspects of IT architecture. This resulted in me writing a software architecture book, with another experienced software architect Nick Rozanski., the first edition being published in 2005 and the second in 2011.  More recently I completed a part-time PhD in the area of how software architecture can help with energy efficiency.

Note: The content of this page accumulated over the years as I discovered useful software architecture resources.  Today (in late 2019) most of it is very out of date and incomplete as good books have been published, organisations have come and gone and the field has changed since I last updated it.  However people are still reading the page and downloading some of the content, so I have left it as it is, with the intention of a major update sometime soon.


There seems to be a real rising tide of interest in software and enterprise architecture and one of the results of this is that a number of IT-architecture focused professional organisations are starting to emerge.

  • IASA – the International Association of Software Architects. A fairly new, but very active, organisation that aims to represent the professional interests of IT architects. Quite a number of regional chapters, with more appearing regularly. I’m a member of the London chapter as well as being an IASA Fellow. Nick Rozanski and I have also produced some material for the IASA web site.
  • BCS SPA Group – the British Computer Society‘s Software Practice Advancement group. Not strictly a software architecture specific organisation, but a group of UK-based software people interested in all aspects of software development practice. Quite a number of people in the group have a strong interest in software architecture. Nick Rozanski and I are both fairly involved in the group.

UML Related

Quite honestly, UML isn’t a particularly good architectural description notation (or language) but it’s the best we’ve got in mainstream practice. At least quite a number of people understand it at a basic level. Some of the things I’ve found useful when using UML for architectural description are listed below.

  • UML Visio Template – There are lots of tools out there to allow you to create UML models (Rational Rose/Software Architect, MagicDraw, Enterprise Architect, ArgoUML and so on). However, I often end up creating UML diagrams using Microsoft Visio because it’s available wherever I work and it integrates neatly into other Office applications. The problem with Visio is that the UML template supplied with it really sucks. An excellent, UML 2.0 compliant, replacement is the Visio template from Pavel Rhuby that provides a very usable, flexible Visio stencil, making creating UML diagrams in Visio very straightforward. (By the way, if you do use this template make sure you send Pavel a little money as suggested on the download page. He’s put an insane amount of time into developing it.)
  • OCL Reference Card – One of the ways you can sharpen up a UML model and make it more precise is to define Object Constraint Language (OCL) constraints on it, as invariants on the class model or as pre/post conditions on operations. This can really help to make a UML model much more precise and reduce the vagueness you often find with UML models today. My problem with OCL is remembering the syntax, so I’ve created a quick reference card to help me look it up when I need it. The card is here in PDF format. Note that the syntax is as of UML 1.5 as that was the syntax I used last time I did some serious work in OCL. I was going to update this to UML2 at some point, but I’ve found that Carmen Avila and Yoonsik Cheon at the U of Texas have already greated a very good one here (at the U of Quebec for some reason).
  • OCL Evaluation Environment – If you do write OCL for your UML models, it is useful to be able to “compile” it to check its syntax and check it is valid to be applied to your model. A useful, free, tool that I’ve used previously is OCLE that allows you to import a UML model, write OCL against it, compile the OCL and even generate Java code to enforce the OCL constraints. However this tool doesn’t appear to have been touched since 2005 and newer tools (that I haven’t used in practice) appear to have taken over from it, such as Dresden OCL for Eclipse and Jos Warmer’s tool Octopus (Jos is one of the inventors of OCL).
  • UML the Good Bits – I ran a presentation at SA2013 on effective use of UML which you can find on the Events page.


A number of good software and enterprise architecture books have been published over the years. Some of the books that I’ve found really useful for information systems architecture are listed below. There is also an online bibliography on my book’s web site.

Creating Software Architectures

  • Software Systems Architecture, Working with Stakeholders Using Viewpoints and Perspectives – OK, so I’m biased. This is my book but other people think it’s OK too. Check out the 5* Amazon reviews!
  • Software Architecture in Practice, 3rd edition (Len Bass, Paul Clements, and Rick Kazman, Addison-Wesley, 2012). This is the SEI’s view of what software architecture is all about and it’s a really good introduction to the background theory in the field.
  • Just Enough Software Architecture (George Fairbanks, 2010).  A excellent practitioner oriented book that explains how to apply software architecture principles to the process of implementing the architecture with a development team.  Pragmatic, thorough and well written.  A great book.
  • Software Architecture for Developers (Simon Brown, 2012).  Another great implementation oriented book that provides very practical, simple advice on how to start applying software architecture ideas and fundamentals to real projects.  Written by someone who tries to do this week-in, week-out as an independent consultant.  Highly recommended.
  • Evaluating Software Architectures (Paul Clements, Rick Kazman, and Mark Klein, Addison-Wesley, 2002). This book explains how to go about evaluating your architecture to work out if it’s any good or not. The SAAM and ATAM methods are described here, along with some practical information about how to run a large scale evaluation exercise.
  • Large Scale Software Architecture (Jeff Garland and Richard Anthony, Wiley, 2003). A book with similar aims to the one Nick and I wrote, but published a year or so earlier. Also written by two practitioners, it contains lots of good advice on creating a software architecture and describing it using UML.
  • Software Architecture: Foundations, Theory, and Practice (Professor Dick Taylor, Professor Neno Medvidovic and Dr Eric Dashofy, Wily, 2009).  As you might guess from their titles, this is a book by researchers aimed at academia, but these researchers aren’t stuck in their ivory tower.  I know them myself and everything they do is rooted in practice and related to implementing systems, due to their consulting work in industry.  If you want a very thorough, complete and rigorous explanation of all of the major concepts in the field then this is the one to pick.

Enterprise Architecture

There appear to be as many opinions on what enterprise architecture is as there are books in the area. However, based on my initial survey of the market, there are some really awful handwaving texts in this group. Having read quite a number though, I have managed to find a couple of books that are useful references for that moment when you realise that your job now entails responsibility for more than the design of a single system.

  • The Practical Guide to Enterprise Architecture (James McGovern, Scott Ambler, Michael Stevens, James Linn, Elias Jo and Vikas Sharan, Addison-Wesley, 2003). This book is one of relatively few books around that tries to provide a broad overview of the whole enterprise architecture field. It’s partially successful and contains some really quite good bits, although most of it is at a reasonably shallow level of detail (as it covers a lot of ground in only 280 pages). To be honest, it’s also quite disjointed because so many authors were involved. However highlights include the Enterprise Unified Process (EUP) description, some useful thoughts on what “agile architecture” means and how to go about using SOA in an enterprise. Plenty of “motherhood and apple pie” but there’s good stuff in the book too.
  • Guide to Enterprise IT Architecture (Col Perks and Tony Beveridge, Springer, 2002). I found this to be a fairly practical enterprise architecture book, defining what the authors mean by “enterprise architecture” and providing an explanation of how to use their particular interpretation of the Open Group’s TOGAF framework to create one.

Functional Design

  • Designing Object Systems: Object-Oriented Modelling with Syntropy (Steve Cook and John Daniels, Addison-Wesley, 1994). This book describes a pioneering object oriented analysis and design method that Cook and Daniels published in the 1990s. The method makes modelling useful and practical by clearly separating and relating models that address different levels of abstraction and showing how to make models precise using ideas from formal languages like Z. The book has been out of print for a while and the text has recently been made available online (follow the link above to find it). As I think Paul Dyson said when the text was made freely available, “timeless wisdom from Cook and Daniels”. It’s a classic – read it.
  • UML Components (John Daniels and John Cheesman, Addison-Wesley, 2000). This book provides a very practical approach to designing a component based system, that happens to use UML as its description notation. This approach can help you to create a really firm foundation for the functional structure of your system.
  • Design by Contract by Example (Richard Mitchell and Jim McKim, Addison-Wesley, 2002). A very accessible explanation of how to design good interfaces using the DbyC approach. Distills it all down to a simple set of rules you can photocopy and give to developers. Great book to hand out to people to help them define better interfaces (and after all, interfaces are a pretty key part of software architecture – right?)

Quality Properties

  • Architecting Enterprise Solutions: Patterns for High-Capability Internet-Based Systems (Paul Dyson and Andy Longshaw, Wiley, 2004). This book is one of the few architecture books out there that provides useful guidance on the deployment environment for the system. Contains a set of patterns that Paul and Andy identified based on their experiences creating large Internet systems.
  • Blueprints for High Availability (Evan Marcus and Hal Stern, Wiley, 2000). Another book that considers what happens to you system once you’ve put it in production: specifically, how you can keep the system running when things go wrong. The best book I’ve come across on high availability techniques.
  • In Search of Clusters, 2nd edition (Greg Pfister, Prentice Hall, 1998). OK, so perhaps you don’t need this book, but you’ll enjoy it anyway! The best review and tutorial I’m aware of on both scalable and high availability clusters, this book is also funny enough that you probably don’t want to read it in a quiet public environment.
  • Performance Solutions: A Practical Guide to Creating Responsive, Scalable Software (Connie Smith and Lloyd Williams, Addison-Wesley, 2002). If you have system performance challenges, then buy this book. It explains how you can create performance models based on your architecture, that allow the likely performance of the system to be assessed.
  • Security Engineering 2nd Edition (Ross Anderson, Wiley, 2008). This book is a comprehensive overview of the IT security field, providing a really good introduction to the area. It’s also written in a very engaging style, with lots of stories and colourful background along the way.

Web Sites

There are a huge number of technology specific web sites and the ones that will be relevant to you depends on the kind of systems you work on. Some of the sites I try to keep up to date with include InfoQ, The Server Side, Sybase SDN, BEA dev2dev, Oracle OTN and IBM DeveloperWorks. However, some of the general architecture sites that I find worth reading are listed below.

  • Bredemeyer Consulting – Dana Bredemyer and Ruth Malan’s consultancy company site. DB is a software and enterprise architecture consultant, who used to run HP’s internal software architecture programmes and now runs public training in the same sort of area. This site is maintained by Ruth Malan and Dana Bredemeyer and contains lots of useful enterprise and software architecture references, links and resources.
  • Software Engineering Institute – To many people, the SEI are software architecture. That’s not really true, lots of other good research goes on too, but the SEI do spend a lot of time communicating their results in an accessible way and that’s important. This site is their software architecture project (which is only one part of what they do). It contains lots of whitepapers on various aspects of the field, including the longest list of definitions I’ve ever seen!
  • Gerrit Muller’s Gaudi Project – Another software architecture research powerhouse is, rather surprisingly, the research arm of Philips, the Dutch consumer electronics and medical systems company. They employ quite a number of well-known software architecture researchers (like Gerrit Muller and Henk Obbink). The Gaudi project was started by Gerrit Muller when at Phillips Research and collects much of the Phillips architecture research together, as well as Gerrit’s personal PhD research in the area. The result is lots of very usable software architecture stuff, particularly for embedded systems (which is what Philips are into for the most part).
  • EWITA – Enterprise Wide IT Architecture (EWITA) is a community site for enterprise architecture, now run by Dana Bredemyer and Ruth Malan. It contains a number of useful links, book reviews and so on.
  • Microsoft MDSN Architecture Site – As you might expect, there’s a lot here on Microsoft technology, but they do actually seem to be taking architecture and architects quite seriously today and so there are some interesting articles in there on software and enterprise architecture in general.
  • IBM Developer Works – IBM are another company that talks about architecture quite a lot, although it can be difficult to find the architecture content on developerWorks. This link displays their content tagged as “architecture”. A mixed bag of stuff, quite honestly, but some interesting articles in there.