Simon Brown Simon Brown

Jet-setting software geek Speaker Trainer Author Blogger Consultant Coder Technical leadership Software architecture

Simon is an independent consultant and helps organisations to build better software by adopting a lightweight, pragmatic approach to software architecture. He is the creator of the C4 software architecture model and the author of Software Architecture for Developers - a developer-friendly guide to software architecture, technical leadership and the balance with agility. Simon regularly speaks at software development conferences around the world and, in 2013, he won the IEEE Software sponsored SATURN 2013 "Architecture in Practice" Presentation Award for his presentation about the conflict between agile and architecture. Simon lives in Jersey (the largest of the Channel Islands) and his client list spans over 20 countries, including organisations ranging from small technology startups through to global household names. He still codes too.

Software Architecture for Developers

A lightweight, pragmatic approach to software architecture

I believe that a lightweight approach to software architecture is pivotal to successfully delivering software, and that it can complement agile approaches rather than compete against them. After all, a good architecture enables agility and this doesn't happen by magic. In a nutshell, my lightweight approach to software architecture includes doing "just enough" up front design to understand the significant structural elements of the software, some lightweight sketches to communicate that vision to the team and ensuring that the highest priority risks are identified and mitigated. I use a technique that I call Risk-storming as a visual and collaborative way to identify those risks. The code doesn't tell the whole story, so I deliver a lightweight software guidebook as supplementary documentation. The video of my "Software Architecture & the balance with agility" talk from the "Software Architect 2013" conference provides a good overview of my approach to software architecture.

The C4 software architecture model

Simple sketches for diagramming your software architecture summarises my "C4 model" for describing, visualising and communicating software architecture. It's a simple hierarchical way to think about the static structures of a software system in terms of containers, components and classes.

A software system is made up of one or more containers (web applications, mobile apps, standalone applications, databases, file systems, etc), each of which contains one or more components, which in turn are implemented by one or more classes.

Visualising this hierarchy is then done by creating a collection of system context, container, component and (optionally) class diagrams. For me, a common set of abstractions is more important than a common notation, so I don't use UML for most of this. Maps are a great example of this principle in action. They all tend to show roads, rivers, lakes, forests, towns, churches, etc but they often use different notation in terms of colour-coding, line styles, iconography, etc. The key to understanding them is exactly that, a key/legend tucked away in a corner somewhere. We can do the same with our software architecture diagrams or use a notation that is much more self-describing.



The C4 software architecture model

Creating agile software systems in an agile way

The C4 model forms a central part of my lightweight approach to software architecture, enabling...

  • Sketches: Simple software architecture sketches, based upon the C4 model, can help you visualise and communicate those early ideas quickly.
  • Ubiquitous language: The C4 model provides a simple ubiquitous language that the whole team can use to communicate effectively and efficiently.
  • Aligning software architecture and code: Aligning the software architecture model with the code, by adopting an architecturally-evident coding style, allows you to ensure architectural integrity and enforce modularity. This, in turn, makes your software easier to explain, understand and adapt.
  • Software architecture as code: Representing the C4 model as code provides a way to keep those software architecture models continously up to date, especially when architeturally-evident coding constructs are extracted from the code in an automated way.
  • Risk-storming: Risk-storming provides a simple visual and collaborative way to identify the high-priority risks. The information from this exercise can then go into determining whether the architecture is fit for purpose and which, if any, concrete experiments need to be undertaken.


Agility and the essence of software architecture

From developer to architect

The image that many people have of software architects is of traditional "ivory tower" software architects dictating instructions to an unsuspecting development team. It doesn't need to be like this though, with modern software architects preferring an approach that favours coding, coaching and collaborative design. The software architecture role doesn't necessarily need to be undertaken by a single person plus coding is a great way to understand whether the resulting architecture is actually going to work. My view of the software architecture role is as follows and you can read more in my book.



The software architecture role

Jet-setting software geek

I've spoken at events and/or have clients in the following countries.

Australia  Australia
Belgium Belgium
China China
Czech Republic Czech Republic
Denmark Denmark
Finland Finland
France France
Germany Germany
Guernsey Guernsey
Hungary Hungary
Ireland Iceland
Ireland Ireland
Italy Italy
Jersey Jersey
Lithuania Lithuania
The Netherlands The Netherlands
New Zealand New Zealand
Norway Norway
Poland Poland
Portugal Portugal
Romania Romania
Spain Spain
Sweden Sweden
Switzerland Switzerland
Ukraine Ukraine
United Arab Emirates United Arab Emirates
United Kingdom United Kingdom
United States United States

Speaker

I regularly deliver sessions about software architecture at conferences, user groups and organisations around the world; including opening keynotes, closing keynotes, conference talks, panel sessions and workshops. In 2013, I won the IEEE Software sponsored SATURN 2013 "Architecture in Practice" Presentation Award for my talk about the conflict between agile and architecture.

2015 schedule

Here are the public conferences, user groups and workshops that I'm scheduled to speak at during 2015.

YOW! 2014

The 'Architecture in Practice' award from SATURN 2013

CRAFT 2015


Software architecture as code
Recorded at CRAFT 2015 in Budapest, Hungary



Software architecture vs code
My closing keynote at DevDay 2014 in Krakow, Poland



Agility and the essence of software architecture
Recorded at CRAFT 2014 in Budapest, Hungary

Slides

All of the slides from past talks are available to view online/download. Here are the slides from some of my recent talks and workshops.

Interviewee

I've been interviewed for magazines, books and podcasts a number of times too, including:

Trainer

I run training courses about software architecture, technical leadership and the balance with agility. The full set of slides from the training course is available to view online/download.

On-site training

My courses include a 1-day software architecture sketching workshop and a full 2-day "Software Architecture for Developers" training course. Most courses are private, on-site courses for organisations around the world, but there are usually a small number of public courses each year. The software architecture sketching workshops are often run at conferences too.

Online training

An online version of my "Software Architecture for Developers" training course is also available via Parleys. This includes the same content as a regular 2-day version, except for the hands-on software design and sketching exercises.

SA4D slides

SA4D training

Parleys
Software Architecture for Developers

Author

My Software Architecture for Developers e-book, a developer-friendly guide to software architecture, is available to buy from Leanpub. You can read a sample online. A Chinese translation is available.

I've also authored and co-authored a number of books about enterprise Java, and contributed to others. Additionally, I write articles for places like InfoQ, Methods & Tools, Voxxed, etc too.

Software Architecture for Developers Pro JSP 2 Pro JSP 3rd Edition Professional JSP Tag Libraries Professional Java Servlets 2.3 Professional JSP 2nd Edition

Blogger

I regularly blog about software architecture on Coding the Architecture, which is a website that I created back in January 2006 to provide a resource for aspiring and new software architects, particularly those who favour an approach that is a little more "hands-on" than your traditional "ivory-tower architect". I also have a personal blog that is updated very infrequently and tends to be about things happening in Jersey.

Translations

Some of my popular blog posts have been translated.

Consultant

Most of my career has been spent working for consulting companies in London and, although I predominantly built software for our customers, I have also performed a number of consulting roles. These included software architecture reviews, software archaeology, architecture strategy work, technical due diligence, process engineering, being a trusted advisor, developer mentoring and coaching, rescuing failing software projects, performance testing, creating technical career frameworks and training plans, etc.

Coder

I've written a lot of code during my career, primarily in Java and C#. You can find a bunch of random code on my GitHub account, plus I built most of what you see at techtribes.je.

Software architecture as code

Ensuring an alignment between the software architecture and the code can help teams massively from a number of perspectives, yet the abstractions we draw on our diagrams rarely match those in the code. For this reason, I'm currently experimenting with a way to create software architecture models as code and an open source Java implementation can be found on GitHub. I've also created a simple web-based diagramming tool called Structurizr to visualise the models. This is a Java, HTML 5, CSS and JavaScript web application running on Pivotal Web Services. It's very much a work in progress and you can read a short overview of it in this blog post.

techtribes.je

This is an embedded software architecture diagram from Structurizr (you can move the boxes around if you like).

Digital scrapbook

I keep a digital scrapbook of my work-related stuff on Pinterest.


I also use Instagram to capture photos from Jersey and my travels around the world.

Greve de Lecq #jerseyci #jerseychannelislands

A photo posted by Simon Brown (@simonbrowndotje) on

The post-surf sunset! #jerseyci #jerseychannelislands #stouen #sunset

A photo posted by Simon Brown (@simonbrowndotje) on

Seymour Tower #jerseyci #JerseyMemory

A photo posted by Simon Brown (@simonbrowndotje) on

A cup of tea at The Hungry Man #jerseyci

A photo posted by Simon Brown (@simonbrowndotje) on

The cycle ride to the top of L'etacq is worth it... #jerseyci #jerseyinsta

A photo posted by Simon Brown (@simonbrowndotje) on