Conceptual Model of Software Architecture

The more I study software design, the more I believe that the key to making the entire field better is to develop a comprehensive model of the key concepts in software architecture (and design) and develop ways of teaching it. Everything else is the “school of hard knocks”.

I’ve referred to this model as the conceptual model of software architecture. A strongly related idea, and one that I’m shocked is not taught directly in most CS undergrad programs, is the idea that developers use models to solve hard problems. I call this model-minded development. The conceptual model of software architecture is one such model.

Talk at Princeton 2015

I gave a talk to the Princeton chapter of the ACM on Model Minded Development.

Many slides have no text, so you’ll want to go to the Full slide deck with speaker notes.


  • Domain-Driven Design says that we should be mindful of domain models and embed them in our code.
  • Design Patterns say that we should know a catalog of patterns so we can solve recurring problems that arise in OO code.
  • Software Architecture says that unless we are mindful of large-scale patterns and models then our systems will not achieve the qualities we seek.
  • Test-Driven Design imposes a structure on our code so that it can be more easily tested.
  • Programming styles (functional, object-oriented, procedural, etc.) impose structure on our code.

The common denominator here is that software developers are expected to keep in mind many abstract yet complex models that constrain the code they write. In some ways these constraints are a burden and in other ways they are light that illuminates a path forward.

I discussed an idea called Model Minded Development that generalizes across DDD, Design Patterns, architecture, TDD, and coding styles. The defining characteristic of senior software developers is their facility with Model Minded Development and it enables them to operate at an advanced level.

Talk at GOTO Copenhagen / Amsterdam 2012

I gave talks at the GOTO Copenhagen and GOTO Amsterdam conferences in 2012. A few folks at the conferences called it “the dandelion talk” because there is an example in the middle of my conceptual model of how to get rid of dandelions in your yard. Of course the real idea is that conceptual models of architecture can help you become a better software engineer – the difference between the 20-year-old version of yourself and the older, master-builder version of yourself. This is perhaps my favorite of all the talks I’ve given, so I hope that you enjoy it too.

GOTO Copenhagen talk on conceptual models of software architecture (Opens on InfoQ website; no easily embeddable video – but going to their site gives you both the video and the slides)


George Fairbanks is a software developer, designer, and architect living in New York city

124 W 60th St #37L
New York, NY 10023
+1-303-834-7760 (Recruiters: Please do not call)
Twitter: @GHFairbanks