C4 Model
Solutions
-
- To document a library, framework or SDK, you might be better off using something like UML
- Sometimes diagrams work better showing dependency relationships (e.g. uses, reads from, etc), and sometimes data flow (e.g. customer update events) works better.
- most relationships can be expressed either way, and the more explicit you can be, the better. For example, describing a relationship as "sends customer update events to" can be more descriptive than simply "customer update events".
Comparison
From Ilograph
Go to text →
Concrete vs Abstract models
- Concrete diagramming models are bottom-up, fact-based models that prioritize hard information over generalizations.
- Abstract resources are intangible and purely conceptual. Their very existence has an eye-of-the-beholder quality to it. From computing, abstract resources include things like services and domains.
- e.g. Order Service and User Service (rendered in green) are the abstract resources. These services exist only conceptually; they are nothing more than a convenient way of grouping APIs, Lambdas and database tables. Like concrete resources in the previous section, they can be used to demonstrate higher-level relations and interactions
Concrete modeling vs C4
Questions
"is X a container or a component?".
Issues
Overly-prescriptive abstractions
- using domain-specific abstractions makes more sense than using arbitrary ones. Diagram authors benefit from thinking about each system on its own terms (and in its own terms). Diagram viewers do, too.
- The top-down, abstraction-first approach of C4 risks focusing too much on a system’s abstractions at the expense of its concrete resources.
Product Selector
-
resources:
References
- https://www.ilograph.com/blog/posts/concrete-diagramming-models/
- https://www.reddit.com/r/softwarearchitecture/comments/16upcj2/dynamic_nested_diagram_for_software_architecture/
- https://medium.com/nick-tune-tech-strategy-blog/domain-driven-architecture-diagrams-139a75acb578
Backlinks