Context, container, component: the four levels, and when to stop.
C4 is a hierarchy of four zoom levels for describing software architecture: system context, containers, components, and code. Its value is not the notation: which is deliberately plain: but the discipline of picking one level per diagram and staying there. Most unreadable architecture diagrams are two levels mixed together.
When to use these
Explaining a system to someone who has not seen it before: start at context, never at components.
Onboarding, where the reader needs the shape before the detail.
Any diagram that will be shown to both engineers and non-engineers, at different levels.
When not to
Describing runtime behaviour over time: a sequence diagram says that better.
Deployment topology, unless you specifically want the C4 deployment view.
Common mistakes
The level-four "code" diagram is almost never worth drawing: it dates the moment someone refactors, and your IDE generates a better one on demand. Simon Brown, who created C4, says the same. Stop at components.
The other common mistake is a container diagram that quietly contains components. If a box on the diagram is not independently deployable or runnable, it is not a container.
The one to draw first, and often the only one a stakeholder needs.
Show the source
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
title System Context Diagram
Person(user, "User", "A user of the system")
System(system, "System", "The system being designed")
System_Ext(external, "External System", "An external dependency")
Rel(user, system, "Uses")
Rel(system, external, "Calls")
@enduml
Every template here ships in Gnomon and renders on your machine, with no account and nothing sent to a server. The browser editor is free and needs no install.