The C4 model is an architectural diagramming method. It attempts to offer different levels of abstraction so you can see how a software system or component fits into the broader context.

There are 4 levels to the c4 model.

  1. Software System
  2. Container
  3. Component
  4. Code

Software System

This is approximately equivalent to “software product”. It has people who get actual value from it, regardless of how it works inside. Simon Brown’s canonical example is “internet banking application” (as distinct from, for instance, banking system mainframe). An example from the ecommerce world might be “search”.

Container (not docker!)

Containers are something close to “mobile app”, “microservice” or “datastore”. The c4 model also refers to this as a “runtime boundary”, which I find helps. The term “container” here pre-dates docker. The intent was to get something that wasn’t rooted in computer science (like process or application).

Component

This is something between “code” and “deployable”, approximately “code module”.

Code

This is basically UML. Don’t write this.