Simon Brown Profile picture
Creator https://t.co/tkMeKAl8TI & https://t.co/o9PKJGdIvI | Author "Software Architecture for Developers" | Software architecture and diagramming workshops worldwide.
Dec 13, 2023 11 tweets 2 min read
Structurizr and workspaces ... my vision for a "workspace" is that it should define:

1. The diagrams + documentation for a single software system

or

2. A landscape of connected systems (where you double-click on a system and navigate to the workspace detailing that system) While many teams are using the tooling this way, I've seen an equal number of teams trying to use a single workspace to define the diagrams and documentation for *all* software systems in the landscape.
Nov 10, 2022 11 tweets 2 min read
One of the questions about the C4 model that I receive on a regular basis is, "why have you reinvented UML?" The short answer is that I haven't. The C4 model is two things:

1. A set of hierarchical abstractions.
2. A set of hierarchical diagrams.

Although this was inspired by things like UML and 4+1, there's little point in "reinventing" the wheel.
Nov 8, 2022 14 tweets 2 min read
Imagine that you're building a boring CRUD app ... a server-side rendered web application talking to a relational database. Perhaps we choose Java/Spring Boot and MySQL. In doing this, we've just made a few architecture decisions ... decisions that are costly to change later ... Java, Spring, relational data storage, MySQL.

Perhaps we don't want to couple our Java code to MySQL though. How can we achieve this?
Sep 23, 2022 28 tweets 8 min read
Some thoughts on this... 🧵 1. The 1st level concept should be renamed from context to system.

Using the word "concept" is confusing here. The C4 model is essentially two things: a set of hierarchical abstractions, and a set of corresponding hierarchical diagrams.
Feb 19, 2022 9 tweets 2 min read
Having been brought into many organisations to help answer this question ... wow, it's hard! First up, understand the context. Is this an organisation that doesn't have a good understanding of software development practices? As an example, I've seen a bunch of teams that essentially have scientists or electrical engineers writing code, which isn't their primary skillset.
Aug 19, 2021 10 tweets 2 min read
The reasons behind this, in no particular order... 1. The workspace editor was only recommended for "small models" ... I've seen people using it for hundreds of elements/relationships, and the UI doesn't work well.
May 14, 2021 7 tweets 3 min read
Yes, once you have more than a few services, showing all of them on a single diagram is hard. Options include...

(1) Partitioning the diagram to show a single domain, bounded context, business capability, etc is a good approach. 👇 (2) Partitioning the diagram to focus on a single service plus its afferent/efferent couplings is also possible. For example, rather than this: Image
May 3, 2021 20 tweets 4 min read
"Can Formal Methods Succeed where UML Failed?"

No.

"People didn’t switch from UML to something else; they walked away from the mindset entirely. UML wasn’t fulfilling a meaningful use case for programmers, so when it didn’t work they didn’t look for an alternative."

Disagree. I do believe that agile and the associated cultural shifts had a much larger influence on UML's decline than anything else. With a quick glance, sure, UML seems too detailed, too complicated, the tooling sucks, etc.
Jun 11, 2020 5 tweets 2 min read
I'm prototyping a textual DSL for creating @structurizr models, which currently looks like this... That DSL fragment describes a number of people and software systems, plus the relationships between them. It doesn't specify any diagrams though. But, using some conventions (for example, "if no diagrams are defined"), we could create them automatically.
Apr 22, 2020 7 tweets 1 min read
Indeed! I also don't think that many teams really understand what their codebase looks like... I've run a number of workshops where I've asked teams to draw software architecture diagrams of their own software. In many cases, you get the typical layered architecture, with all of the arrows pointing downwards (a strictly layered architecture).
Apr 22, 2020 22 tweets 7 min read
One of the reasons is the "model-code gap", as described by @GHFairbanks in his book... Ever tried to automatically create a diagram from code? It doesn't work well, because the tooling is essentially just reflecting what it sees in the code.
Apr 18, 2020 9 tweets 4 min read
And here are some options for your consideration ... or inspiration. (thread) First up ... @adrianco created some tooling a while back, which provides an interactive visualisation -> github.com/adrianco/spigo
Feb 2, 2019 9 tweets 2 min read
I’ve had this a number of times recently ... “we’d like to invite you to do a private talk for our staff ... other speakers generally do this for free because it’s good for exposure”. I will happily speak at a public meetup for free if I’m already in the area. Asking me to undertake an unpaid 2-3 day roundtrip to do a free private hour long talk for your staff is pretty offensive though.
Jan 20, 2019 7 tweets 2 min read
Some good stuff here, although there is still room for more details on the example diagrams ... technology choices, relationship intent, etc. e.g. “why is the ABC Financial System communicating with the Analytics system?”
Jun 27, 2018 17 tweets 4 min read
I often get asked why I think writing code to create diagrams (i.e. "software architecture as code" ... the approach I've taken with @structurizr) is a good idea. I like this slide in @klu2's presentation. Here's some background on the approach... I've been teaching the C4 model (infoq.com/articles/C4-ar…) for years, and I get asked the same question at the end of every workshop, "what tooling do you recommend?". Up until a few years ago, my stock answer was, "it's all just boxes and lines, so just use Visio". 😳😄
May 15, 2018 9 tweets 4 min read
Here's an introduction to the C4 model in a few tweets. The C4 model is a way to visualise the software architecture of a software system, and a way to avoid creating diagrams like this. "C4" stands for Context, Containers, Components and Code ... a set of hierarchical diagrams that you can use to describe your software architecture at different zoom levels, each useful for different audiences. Think of it as Google Maps for your code.
Apr 28, 2018 6 tweets 2 min read
A humble suggestion to anybody contemplating a greenfield microservices architecture, especially if you're replacing a monolithic "big ball of mud" that has become hard to work with ... *draw some diagrams showing your proposed design*. Take something like my C4 model (c4model.com) and create the first two levels; System Context and Containers. Treat each microservice and any data stores as separate containers. Here's a simple example -> structurizr.com/share/4241#Con…