Comparing Structurizr to other tools

Here's how Structurizr compares to general purpose diagramming, static analysis and modelling tools.

General purpose diagramming tools

There are a number of popular general purpose diagramming tools available that software teams typically use for creating software architecture diagrams. These include Microsoft Visio, OmniGraffle, draw.io, Creately, Gliffy, Lucidchart, etc. The key strength of a general purpose diagramming tool is that you can create almost any type of diagram you can imagine. You usually also have full control over what every element on your diagram canvas looks like because aspects such as element size, element alignment, line thickness, font size, text alignment, etc are all almost infinitely customisable. General purpose diagramming tools give you a lot of power.

A general purpose diagramming tool

The trade-off here is that unless you're using a pre-built template, you're effectively starting with a blank canvas. In order to create a software architecture diagram, you need to figure out what notation you'd like to use, create boxes on the diagram canvas, resize them, add text as appropriate, set the font size and text alignment, link boxes together with lines, specify which end of the line should be an arrowhead, add text to the lines, etc. There are some exceptions, but generally each diagram is exactly that, a static diagram rather than a view onto a single model. This means changes to the name of a box or an element style on one diagram will not automatically propagate to other diagrams.

In summary, general purpose diagramming tools give you a lot of power, but the responsibility to keep the resulting diagrams consistent and up to date is yours.

Static analysis tools

Another category of tools allow you to perform static analysis of your codebase. Popular examples include Structure101, Lattix, NDepend, Sonargraph, JDepend, JArchitect, etc. The primary focus of these tools is to let you explore and refactor the structure of you code, typically using rich visualisations that depict the structure of your code. Although these diagrams help you explore your code, they're not really "software architecture diagrams". Many of the static analysis tools are expensive and difficult to use, which doesn't make them as popular as they perhaps should be.

A static analysis tool

In summary, static analysis tools are very powerful for exploring a codebase, but they don't really generate diagrams that are useful for explaining how a software system works at multiple levels of abstraction, such as those you might want to use in a presentation or documentation.

Modelling tools

There are many modelling tools available, both free and commercial, that support a number of different modelling languages and notations such as UML, SysML, ArchiMate, etc. Popular examples include Enterprise Architect, MagicDraw, Rational Software Architect, Visual Paradigm, Archi, ArgoUML, etc. There are also modelling plugins for many IDEs. The purpose of a modelling tool is to let you build a rich model of your software system, which you can subsequently visualise using a number of different views.

Reverse-engineering a codebase

The power of a model is that it provides consistent naming of elements between diagrams as well as introducing a set of rules to describe elements and their relationships. The downside of many traditional modelling tools is that it takes some effort to create the model and keep it up to date, plus such tools can sometimes seem overly restrictive or heavyweight if you simply want a quick diagram. Although some modelling tools will let you reverse-engineer a model from code, the resulting model is usually very detailed. If you point a modelling tool at a Java codebase, that modelling tool will see the basic constructs that you use to build your software; namely interfaces, classes and packages. Unless you provide some rules, reverse-engineering tools will see classes rather than components.

In summary, modelling tools are also very powerful but it can take a lot of effort to keep the models up to date, and reverse-engineering a model from code often produces results that are too detailed.

Structurizr

The goal of Structurizr is to provide a collection of tools that allow software developers to easily create software architecture diagrams that reflect the code. Structurizr is an opinionated tool that only supports the C4 model and provides a limited notation with which to create diagrams. The result is simplicity - the C4 model provides a simple framework to work within and the diagram notation is predominantly taken care of for you.

Structurizr

When Structurizr is used in conjunction with the client library for Java or .NET, the majority of the software architecture model can be extracted from your code. Integration of this process with your continuous build environment means that your software architecture model remains up to date. Structurizr also provides support for lightweight structured supplementary documentation and additional visualisations that you can use to explore your software architecture.

In summary, Structurizr is a collection of tools to visualise, document and explore your software architecture.