Some developers do not know the notation, or only know some of it.
UML is seen as complicated with more than 14 different diagram types. Sequence diagrams seem to be the most commonly used.
Not widely used, somes estimates say only 1 in 10 developers use it. Many favouring more informal box and arrow style diagrams.
4+1 is a view model designed by Philippe Kruchten for "describing the architecture of software-intensive systems, based on the use of multiple, concurrent views".
"We don't need diagrams, we are Agile!"
- Anonymous
Names have been removed to protect the guilty
All architecture is design, but not all design is architecture.
Grady Booch
We can find good examples there right?
If it isn't on Google, it doesn't exist.
Jimmy Wales
So our web search brought back a lot of results but finding solid architecture examples is pretty difficult.
Hard to decide what to show.
Hard to decide what not to show.
Use of notations, symbols and colours is inconsistent.
Diagrams are not self explanatory, instead they are props in a conversation.
Most importantly, its really hard to stay at a single level of abstraction.
This forces software architects to walk a fine line when designing solutions:
To describe a software system effectively you should start at a low resolution explanation and progress to greater detail until reaching the highest resolution level, usually code.
Having a common set of defined levels allows for a smoother transition to greater levels of detail while also allowing for different systems to be compared to some degree.
A single diagram can become cluttered with lots of information, trying to cover all potential questions in one go.
A small collection of simple diagrams can more effectively describe different levels of abstraction thereby making it easier to understand each level individually.
By breaking complex systems down into clearer abstract levels we are able to discuss and reason about each level in isolation.
Conversations do not spiral across a wide range of technical details and can instead be more focused.
A very common misconception is that architectural diagrams must be a high-level or conceptual view of the system in question. This has lead to developers viewing them as somewhat pointless.
Software developers are the most important stakeholder for any diagram or design. Diagrams should include details that are useful and helpful to them as a priority.
Todays reality is that applications can change and expand rapidly, particularly when the work is done in an Agile fashion. The direction set for the application in the first sprint may not be where it is heading in sprint 3, based on the Product Owners decision to change scope.
Created by Simon Brown and covered in the Software architecture for developers book.
Not intended to be a "standard", rather a set of common levels that can be used to describe a software system.
A Context diagram should cover the following questions:
It should include Users, Actors, Roles, Personas and other IT systems.
The intended audience for Context diagrams includes Technical and Non-Technical people as it is sufficiently high-level to provide a quick overview of what the systems will do when it is complete. It also provides a starting point for future discussions.
A Container diagram should answer the following questions:
Containers are logical executables, applications or processes that make up the overall system. Another way to think of them is as independently deployable items, which could be replaced with an alternative technology without majorly affecting the System.
A Component diagram should cover the following:
Components are relatively coarse-grained building blocks of the overall system and each User Story should be associated with functions from one or more components.
If all defined User Stories can be implemented using the Components you have already defined then it is likely that you have captured all. If you find that you have gaps where a User Story requires a feature not currently provided by your collection of components then it is likely you are missing one or more.
For each Component you should be able to specify the following:
Class level diagrams are optional items used for unusually complicated scenarios.
I have found that sequence diagrams are usually more beneficial in describing complexity at this level.
Some diagrams I created following the C4 abstractons.
These have been paired back a bit with some sensitive content removed.
Which considering that we build tools for other industries is pretty surprising.