What a diagram really needs is a purpose. A clear need for the information to be conveyed.
Who's to say that unlabeled arrows are a bad thing? Or that there's too much on a diagram? That depends on how it's used! What it's for.
Adding context and explainers is certainly a Good Thing, but again, without an overarching reason for the diagram to even exist - who cares?
Diagrams are a communication tool. No more, no less. The vast majority aren't up-to-date, complete or even completely accurate; for the same reason roadmaps aren't, let alone the map of the London Underground.
In industrial process engineering, diagrams of process flow and instrumentation are literally part of "The Plan". They are included with architectural, mechanical, and electrical drawings; signed of by professional engineers and jurisdictional authorities; and passed to contractors to build. If there's a need to deviate from "The Plan", it gets documented and then a revision is created.
It has always surprised me how software as an industry gets away with sketchy documentation
For me it’s primarily a tool that aides and shapes my thinking. I start sketching out diagrams to discover dependencies, edge cases, and so on. Most of what I draw I don’t share.
Even during brainstorming sessions I’ve found immense use of diagrams, they cut out so much noise.
Once you come at it like “I want to teach someone this concept and have them enjoy the journey,” you’ll make ungodly good presentations :)
IMO the mistakes mentioned in these diagrams stem from them actually being component diagrams disguised as architecture diagrams.
While the astute would be technically correct in calling component diagrams a type of architecture diagrams, focusing on components is what typically leads to diagraming mistakes. Component diagrams are really useful when determining what competencies, licenses/subscriptions, etc. are required when for example evaluating fit of project inside of an existing ecosystem.
However, when managing the system or making changes to it, you rarely care whether data is stored on S3 or local minio cluster, because at an interface level S3 merely a protocol. Yet, you do care about data dependencies and control boundaries.
A component diagram may easily just connect application backend to S3-compatible storage component and call it a day, however in a full architectural diagram you would really want to see where e.g. the auth thingie comes from.
My take on this is that it's really hard to have one diagram to rule them all. I think there's a time and a place for different kinds of diagrams, and I think it's ok to tell a story with a couple different ones. For example, a conceptual diagram that complements the actual "as implemented" diagram. One is a big of a "here's what we were thinking" and the other is "here's how we translated that to actual architecture".
In my role of frequently having to manage up to executive management, investors, onboard new people, etc. the combination of conceptual plus actual is powerful. I can describe the problem we're solving, provide a grokkable format for most levels of the org chart, and then have the details for those who want to dig in to discuss how we built (or plan to build) it and why.
Step 1: People want a simple high level architecture diagram. Step 2: People want more detail Step 3: People want to see how human components of the system work Step 4: The diagram is so complicated and non-obvious that people start asking for a simpler high level architecture diagram.
The only way to escape is to be clever about preserving multiple 'zoom' /C4 levels of diagram.
there's the "computational level" (poorly-named, focused on high-level objectives of the system), algorithmic level, and implementational level.
works for understanding any information processing system, not just brains/minds as he originally planned
It maybe could have been clearer in the article, but the intent wasn't to discourage "here's what we were thinking"-style whiteboard diagrams. Those absolutely have their place. The article is trying to discourage people from making "here is how Kubernetes works" or "here is how microservices work" diagrams, since you can easily find those online.
One way I think of it is that the architect needs to market the architecture, at least a little bit. If you ask a marketing team to deliver a message they immediately start crafting multiple delivery methods to meet people where they are at. Architects shouldn't think they can somehow escape that basic requirement of effective communication.
Being cynical, I've seen some that clearly attempt to overcomplicate things in order to convey something along the lines of "look at all this complexity we're managing, aren't we great?". Might be useful for getting your team some additional credit, but less helpful in a few years time when somebody is trying to use the diagram to figure out the underlying structure of things.
Naturally I think you'd go a long way just avoiding these pitfalls and doing the reverse (e.g. label your arrows). For a somewhat different perspective on making good diagrams by reducing their complexity, I wrote on this just last month:
[0] https://www.ilograph.com/blog/posts/breaking-up-the-master-d...
I'm pretty sure people that aim for the former actually like the latter too
This highlights my only beef with TFA, since it seems to go against the advice to not mix abstraction levels.
TFA is great advice for getting at least mediocre diagrams, informative and inoffensive. But the best diagrams are deliberately mixing levels to highlight stuff, because layer boundaries are usually where it gets tricky. Maybe none of this is relevant if you really want to split hairs about what architecture vs system vs component diagram “really” means, but I’m not aware of nonfuzzy definitions for that and most people seem to use the terms informally.
This is a less prescriptive model than structurizr but keeps the goals of C4
First of all, something like 99% of the AWS icons are illegible. You just don't know what they refer to.
Second, if it has a couple of AWS icons it likely has like a hundred of them, connected with arrows in an indecipherable mess.
I personally try to simplify diagrams as much as possible and prefer to talk about function (e.g. DB, App Server) more than technology (e.g. Aurora, Java), but the key element here is to try to avoid trying to put too much dense information in a single diagram which it ends making it very confusing.
I almost never do architecture diagrams for new joiners or beginners, I do them for the other experts of my team, and they perfectly understand that subscriptions go in the Subscription table in DDB because they've all worked on this system.
A lot of those points go against probably the most important point "Too many overlapping concerns".
The point of a diagram is to get a point across, and I don't believe there's any universal rule that will make this easier, because there's no universal audience.
For example, #3 too many concerns. The author states "the solution is to split up a busy diagram into multiple diagrams, each focused on one or two concerns at a time" . I understand that but is there a diagram that ties all the smaller diagrams together without re-creating the original diagram in the first place?
It's like that phrase "no plan survives first contact with the enemy" but applied to product owners and then subsequently applied to computers
Let's the take one from #5 in the article. If someone instead of painting this diagram wrote: "Drupal Load Balancer inside Drupal VPC load-balances traffic between Drupal Instances inside two Availability Zones: AZ1 and AZ2" it's way faster to read, more precise, and leaves me without a doubt that I misunderstood or missed some detail.
It's even worse on more complex and busy diagrams. Takes me a while to just visually parse everything, figure out relations between elements, arrows, and even after I scan everything I'm not sure if I understood everything.
On top of it, just creating and later maintaining them is such a hassle, comparing to just editing text.
When you have a graph your text starts to look closer to an adjacency list and is utterly miserable to actually track a sequence you’re actually interested in, unless every interesting sequence is enumerated in turn
Like #4 in TFA is visually a mess, but easy enough to find & focus a single pathway. textually you’d be jumping up and down paragraph descriptions trying to stay on topic (not unlike following code itself, with no debugger/ide support)
For story telling, they're sometimes useful to me.
So: do you need labels on errors? Answer: Yea, if they look good, otherwise no.
Otherwise if you need something static, I don't know a way around it other than a tool that is capable of understanding a large distributed system - both deployment and codebase - and will auto-regenerate as the code and deployment system changes. In many organizations, the people skilled at diagramming aren't the people that are in the sprints making changes that will slowly break your diagrams over time.
But as usually everything depends on the target audience and the actual occasion.
I often make architecture diagrams for non-technical users so that we have a shared image to talk about and use as a point of reference during a discussion.
Of course, then there are the odd "maps" that people love to have to show isolated concerns, but there is no real meaning on how the map is traversed. I find these neat artistically, but they don't actually communicate that much to me.
Diagrams can be authoritative, and the ones I’ve seen will break some or all of these rules because they represent natural heuristics that practitioners are expected to fill inn themselves.
- arrows with labels that are not "pronouncable". ie "A 'is a' B"
- double-headed arrows