.. _c4-label: C4 Lightweight Software Architecture Description Method ======================================================= Introduction -------------------------------- *Big design up front is dumb, but doing no design up front is even dumber.* Dave Thomas The `C4 Model `__ is a lightweight software architecture description method. It consists of a set of 4 diagrams that describe the **static** structure of a software system. Overall, it strives for clarity and communication of the story, and follows `Shneiderman's mantra `__: *Overview first, zoom and filter, then details-on-demand* It is not formal UML e.g. the UML actor stickman is deliberately not used as it causes confusion between a person or a system. .. figure:: ./images/c4.png The 4 C's .. csv-table:: :header: "The **4C's**" :widths: 15, 30 "**Context**", "A high-level diagram that sets the scene; including key system dependencies and people (actors/roles/personas/etc). `Context diagrams `__ are standard in software engineering (even if not used often)." "**Container**", "A container diagram shows the high-level technology choices, how responsibilities are distributed across them and how the containers communicate." "**Component**", "For each container, a component diagram lets you see the key logical components and their relationships. 4." "**Classes (or Code)**", "This is optional and is the lowest level of detail." CheatSheet -------------------------------- The `CheatSheet `__ gives a good summary of the C4 model and diagrams. Video Presentation -------------------------------- See `youtube video from NDC2017 conference `__ by Simon Brown on C4 for visualisation. Related Methods -------------------------------- There are a number of related models and templates: 4+1 model ^^^^^^^^^^^^^^^^^ C4 is inpsired by `the 4+1 model for software architecture `__ ARC42 ^^^^^^^^^^^^^^^^^ C4 can be combined with arc42 documentation template. The diagrams map as follows: +---------------------------------+--------------------------+ | Arc42 | C4 | +=================================+==========================+ | Context and Scope | System Context diagram | +---------------------------------+--------------------------+ | Building Block View (level 1) | Container diagram | +---------------------------------+--------------------------+ | Building Block View (level 2) | Component diagram | +---------------------------------+--------------------------+ | Building Block View (level 3) | Class diagram | +---------------------------------+--------------------------+ Data-flow diagrams ^^^^^^^^^^^^^^^^^^^^ `Data-flow diagrams (DFD) `__ (to desribe data **activity**) use a similar hierachical approach starting with the contextual DFD0. They use a multi-level numbering scheme - DFD0: 1 - DFD1: 1.1., 1.2, - DFD2: 1.1.1, 1.1.2, Books ------ These books, written by [@simonbrown](https://twitter.com/simonbrown), are available to buy from https://leanpub.com/visualising-software-architecture. .. |Book1| image:: images/swarchv1.png .. |Book2| image:: images/swarchv2.png |Book1| |Book2|