Software Architecture#
Architecture SHOULD be simple and have a clear purpose. Good software architecture methods are hard to find. Often it is too high level (TOGAF based with archimate diagrams). Often with no or very little value for software developers and managers. Or software architecture diagrams are a random collection of code-snippets and UML diagrams. Often only created since creating documentation was requested.
When you create an application, its architecture must do two things:
Provide an easy way to communicate to ALL stakeholders.
Enable various stakeholders to see different levels of granularity.
Make sure that even you understand the working and key dependencies a few years later!
The C4 model for visualising software architecture#
C4 stands for context, containers, components, and code . It is a great way to create a good software architecture. And it is an open method. A full training can be found on: https://s3.amazonaws.com/static.codingthearchitecture.com/presentations/bcsspa2019-the-lost-art-of-software-design.pdf
The C4 model was created as a way to help software development teams describe and communicate software architecture, both during up-front design sessions and when retrospectively documenting an existing codebase. It’s a way to create maps of your code, at various levels of detail, in the same way you would use something like Google Maps to zoom in and out of an area you are interested in.
By using the C4 model for software architecture, you can capture just enough architecture to communicate to stakeholders and enable team understanding without having to define details that will change as your architecture changes.
Source and more info on: https://c4model.com/
Structurizr is created to make C4 models in a structured way. Structurizr builds upon “diagrams as code”, allowing you to create multiple software architecture diagrams using the C4 model, in a variety of rendering tools, from a single model. Structurizr is ‘C4 models as code’.
But creating C4 models can be done using any simple drawing tool.
arc42 software architectures#
arc42 is based on practical experience of many systems in various domains, from information and web systems, real-time and embedded to business intelligence and data warehouses.
arc42 provides a template for documentation and communication of software and system architectures.
arc42 supports arbitrary technologies and tools.
arc42 is completely process-agnostic, and especially well-suited for lean and agile development approaches.
arc42 is open-source and can be used free of charge, in commercial and private situations.
All arc42 templates can be found on: arc42/arc42-template Or check the arc42 download page on: https://arc42.org/download
D2: Declarative Diagramming#
D2 is a modern diagram scripting language that turns text to diagrams.
The project including a playground can be found here: https://d2lang.com/
Repository on github
The Bounded Context Canvas#
Great FOSS tool that helps with your software design. Source code and instruction on: ddd-crew/bounded-context-canvas
The Bounded Context Canvas is a collaborative tool for designing and documenting the design of a single bounded context.
A bounded context is a sub-system in a software architecture aligned to a part of your domain.
The canvas guides you through the process of designing a bounded context by requiring you to consider and make choices about the key elements of its design, from naming to responsibilities, to its public interface and dependencies.
Mermaid#
Noting beats creating simple diagrams fast. Mermaid does the job. Mermaid diagrams render on markdown files on Github, GitLab and is integrated in various Microsoft devtools. You can create flowcharts, sequence diagrams, class diagrams, state diagrams, ERDs and even C4 diagrams with Mermaid.
A simple visualisation always helps in communication software designs.
Check it out: https://mermaid.js.org/
A nice FOSS tool to render Mermaid graphs inside your terminal can be found here: https://mermaid-ascii.art/
Systemizer#
Systemizer is a system design tool used to create and simulate large scale distributed systems.
Landing page: https://honzaap.github.io/Systemizer/
Repository on github: honzaap/Systemizer