{"id":348,"date":"2017-01-23T23:32:36","date_gmt":"2017-01-23T21:32:36","guid":{"rendered":"https:\/\/qappdesign.com\/code\/?p=348"},"modified":"2017-01-24T17:24:01","modified_gmt":"2017-01-24T15:24:01","slug":"the-c4-software-architecture-model","status":"publish","type":"post","link":"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/","title":{"rendered":"The C4 software architecture model"},"content":{"rendered":"<p>Is there an easy way to succinctly and unambiguously communicate the architecture of a software system ? Something that could highlight the requirements, and still be brief ?<\/p>\n<p><em>The Agile Manifesto prescribes that teams should value working software over comprehensive documentation. This doesn\u2019t mean that we should not create documentation<\/em>; it just means we should create documentation that provides value and at the same time does not hinder the team\u2019s progress. We can achieve this using C4 architecture model. It is a static model, that provides an easy way to communicate the design of the system to all involved, and also brings a natural narrative for exploring the architecture of a software solution. Starting from the highest level (what is the system and how does it provides value to the business), it drills into the details, until the very low level of functionality. <\/p>\n<p>It could be something to next car presentation, showing the relevant details from outside to inside :<br \/>\n<img src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/www.wired.com\/images_blogs\/autopia\/2013\/04\/picasion.com_fac6826e2e1c8190826ef3258e466ca7.gif\" alt=\"car layers\" class=\"lazyload \" \/><noscript><img src=\"https:\/\/i0.wp.com\/www.wired.com\/images_blogs\/autopia\/2013\/04\/picasion.com_fac6826e2e1c8190826ef3258e466ca7.gif?w=960&#038;ssl=1\" alt=\"car layers\" data-recalc-dims=\"1\" \/><\/noscript><br \/>\nSource: <em>Wired article (<a href=\"https:\/\/www.wired.com\/2013\/04\/2013-fiat-500e\/\" target=\"_blank\">link<\/a>)<\/em><\/p>\n<p>This architecture model has been created by Simon Brown, and you can find more details, and live presentations on his website <a href=\"http:\/\/simonbrown.je\/\" target=\"_blank\">simonbrown.je<\/a>.<\/p>\n<h4>Why such architecture model ?<\/h4>\n<p>The C4 model is an hierarchical way to think about the structures of a software system. Why such a model would be needed, since the existence of <a href=\"http:\/\/www.uml.org\/\" target=\"_blank\">UML<\/a>, or 4 + 1 architecture views (<a href=\"https:\/\/en.wikipedia.org\/wiki\/4%2B1_architectural_view_model\" target=\"_blank\">Wikipedia link<\/a>) and the others ? I see next advantages:<\/p>\n<ul>\n<li><strong>Makes the diagrams easy to read<\/strong> &#8211; usually the diagrams that design a software system are part of the context in the documents, and it is harder to get the full meaning, without reading the full specification. C4 Model encourage to write succinct description text within the diagram, making them easy to comprehend and use, even outside of a documentation. This gives a chance to be easier used by other members of the team.<\/li>\n<li>\n   <strong>It has a role of zoom in \/ zoom out<\/strong>, providing the different amount of details, better suited to different persons \/ roles involved in the project. It starts from a <strong>context<\/strong> or general diagram, and go into the details of <strong>containers<\/strong> (one or more containers such as web applications, mobile apps, standalone applications, databases, file systems etc.). Each of containers has one or more <strong>components<\/strong>, which in turn are implemented by one or more <strong>classes<\/strong>.\n<\/li>\n<li><strong>Reduces the gap between design and actual implementation<\/strong> &#8211; Diagrams could be made in any tool. Even so, generating them using few lines of code, it makes possible to easier maintain them along the way the software product is developed. Here is the tool &#8211; <a href=\"https:\/\/structurizr.com\/\" target=\"_blank\">structurizr.com<\/a>\n   <\/li>\n<\/ul>\n<h4>Arhitectural kata<\/h4>\n<p>To try this model, I would propose to start from a simple specification, initially designed for an <em>architectural kata<\/em> sessions. In this article I would be focused more on the way we graphically represent the system(s), rather to discuss how effectively the system is designed. In some parts, other technology selections would make more sense. <\/p>\n<p class=\"onetab\">\n<blockquote><p> A national sandwich shop wants to enable &#8220;fax in your order&#8221; but over the Internet instead.<\/p><\/blockquote>\n<p><strong><em>Users<\/em><\/strong>: millions+<br \/>\n      <br \/><strong><em>Requirements<\/em><\/strong>: users will place their order, then be given a time to pick up their sandwich and directions to the shop (which must integrate with Google Maps); if the shop offers a delivery service, dispatch the driver with the sandwich to the user; mobile-device accessibility; offer national daily promotionals\/specials; offer local daily promotionals\/specials; accept payment online or in person\/on delivery.<\/p>\n<p><em>Source<\/em>: <a href=\"http:\/\/nealford.com\/katas\/kata?id=BLT\" target=\"_blank\">Architectural katas &#8211; Neal Ford<\/a><\/p>\n<p><h4>C4 Model &#8211; Diagrams<\/h4>\n<ul>\n<ol>1. Context diagram<\/ol>\n<ol>2. Container diagram<\/ol>\n<ol>3. Component diagram(s)<\/ol>\n<ol>4. Class diagram(s)<\/ol>\n<\/ul>\n<h4><em>Context<\/em> diagram<\/h4>\n<p><em>&#8220;Draw a simple block diagram showing your software system as a box in the centre,<br \/>\nsurrounded by its users and the other software systems that it interacts with. Detail isn\u2019t<br \/>\nimportant here as this is your zoomed-out view showing a big picture of the system<br \/>\nlandscape. The focus should be on people (actors, roles, personas, etc.) and software systems<br \/>\nrather than technologies, protocols and other low-level details. It\u2019s the sort of diagram that<br \/>\nyou could show to non-technical people.&#8221;<em><br \/>\n<em>From <a href=\"https:\/\/leanpub.com\/visualising-software-architecture\" target=\"_blank\">&#8220;Software Architecture for Developers &#8211; Volume 2 &#8211; Simon Brown&#8221;<\/a><\/em><\/p>\n<p>This diagram provides the big picture, and it answers to the following questions:<\/p>\n<ul>\n<ol><em><strong>1. What is the software system that we are building ?<\/strong><br \/>\nIt presents the 3 systems to build (external &#8211; to the public users; internal &#8211; for order processing; and one optional for delivery management).<\/em>\n   <\/ol>\n<ol><em><strong>2. Who is using it ?<\/strong><br \/>\nIt presents 8 type of users, with a short description of their role (e.g. mobile user etc.), as well as their actions (e.g. place an order etc.).<br \/>\n    <\/em>\n   <\/ol>\n<ol><em><strong>3. How does it fit in with the existing environment ?<\/strong><br \/>\nHere are included other systems to interact. It could be internal to the organization (e.g. ERP, CRM etc.), or external (e.g. Google Maps service)<br \/>\n    <\/em>\n   <\/ol>\n<\/ul>\n<p>These diagram reflects also the approach, via dependent systems &#8211; example: a <a href=\"https:\/\/martinfowler.com\/articles\/serverless.html\" target=\"_blank\">serverless architecture<\/a> would be represented in other way.<\/p>\n<p><em><strong>Note:<\/strong> The diagram is just a sample, and it does not reflect a real product. Different approaches could be considered. What it is more important here, is to see the diagrams with a lot of information included, not requiring extensive documents to explain them.<\/em><\/p>\n<p><a href=\"https:\/\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/Case-B-C4-Model-Context-diagram.jpeg\"><br \/>\n<figure id=\"attachment_435\" aria-describedby=\"caption-attachment-435\" style=\"width: 791px\" class=\"wp-caption alignnone\"><img src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/Case-B-C4-Model-Context-diagram-791x1024.jpeg\" alt=\"C4 Model - Context diagram\" class=\"lazyload \" \/><noscript><img src=\"https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/Case-B-C4-Model-Context-diagram.jpeg?resize=791%2C1024&#038;ssl=1\" alt=\"C4 Model - Context diagram\" data-recalc-dims=\"1\" \/><\/noscript><figcaption id=\"caption-attachment-435\" class=\"wp-caption-text\">C4 Model &#8211; Context diagram<\/figcaption><\/figure><br \/>\n<\/a><\/p>\n<h4>Second part, <em>Container<\/em> diagram<\/h4>\n<p>This is a simple, high-level technology focused diagram. It is a high-level shape of the software architecture and it shows how responsibilities are distributed across it. The diagram answers to the following questions:<\/p>\n<ul>\n<ol><strong><em>1. What is the overall shape of the software system ?<\/em><\/strong><\/ol>\n<ol><strong><em>2. What are the high-level technology decisions ?<\/em><\/strong><\/ol>\n<ol><strong><em>3. How are responsibilities distributed across the system ?<\/em><\/strong><\/ol>\n<ol><strong><em>4. How do containers communicate with one another ?<\/em><\/strong><\/ol>\n<ol><strong><em>5. As a developer, where do I need to write code in order to implement features ?<\/em><\/strong><\/ol>\n<\/ul>\n<p><em><strong>Note:<\/strong> The diagram is just a sample. Different technologies and approaches could be used. Maybe the technology stack used here is not what would you prefer. Still, having the full system (or subsystem, in case it is big) displayed on a page (A3 \/ A4) could bring clarity and make different decisions easier to take.<\/em><\/p>\n<p><a href=\"https:\/\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/Case-B-C4-Model-Container-diagram.jpeg\"><br \/>\n<figure id=\"attachment_465\" aria-describedby=\"caption-attachment-465\" style=\"width: 725px\" class=\"wp-caption alignnone\"><img src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/Case-B-C4-Model-Container-diagram-725x1024.jpeg\" alt=\"\" class=\"lazyload \" \/><noscript><img src=\"https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/Case-B-C4-Model-Container-diagram.jpeg?resize=725%2C1024&#038;ssl=1\" alt=\"\" data-recalc-dims=\"1\" \/><\/noscript><figcaption id=\"caption-attachment-465\" class=\"wp-caption-text\">C4 Model &#8211; Container diagram<\/figcaption><\/figure><\/a><\/p>\n<p>Even for very big systems, we could draw similar diagrams. Here is an example reflecting StackOverflow architecture (from <a href=\"http:\/\/nickcraver.com\/blog\/2016\/02\/17\/stack-overflow-the-architecture-2016-edition\/\" target=\"_blank\">Nick Craver &#8211; 2016 Architecture<\/a>), which could be converted to a <em>Container<\/em> diagram. StackOverflow is a a system with <a href=\"https:\/\/stackexchange.com\/performance\" target=\"_blank\">1.3 billion page views per month<\/a>. <\/p>\n<p><a href=\"https:\/\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Container-diagram-Stack-exchange.jpg\" target=\"_blank\"><br \/>\n<figure id=\"attachment_471\" aria-describedby=\"caption-attachment-471\" style=\"width: 956px\" class=\"wp-caption alignnone\"><img src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Container-diagram-Stack-exchange-1.jpg\" alt=\"\" class=\"lazyload \" \/><noscript><img src=\"https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Container-diagram-Stack-exchange-1.jpg?w=960&#038;ssl=1\" alt=\"\" data-recalc-dims=\"1\" \/><\/noscript><figcaption id=\"caption-attachment-471\" class=\"wp-caption-text\">C4 Model &#8211; Container diagram &#8211; Stack exchange<\/figcaption><\/figure><br \/>\n<\/a><\/p>\n<h4>Third part, <em>Component<\/em> diagram(s)<\/h4>\n<p>Next step would be to zoom in and decompose containers further, to show the inside components. This set of diagrams should answer to the following questions:<\/p>\n<p><em><strong><\/p>\n<ul>\n<ol>1. What components\/services is the system made up of?<\/ol>\n<ol>2. It is clear how the system works at a high-level?<\/ol>\n<ol>3. Do all components\/services have a home (i.e. reside in a container)?<\/ol>\n<\/ul>\n<p><\/em><\/strong><\/p>\n<p>At this level, it would not be important to make all these diagrams from the beginning. These would be written as soon as certain components are developed. Then, once the components will be updated, the diagrams will reflect the changes.<\/p>\n<p><em><strong>Note:<\/strong> Maybe the components you would choose would be different. They could be made in other ways comparing with what is presented. Still, having the option to always have at hand the documents, and make zoom in \/ out using a document system such <a href=\"https:\/\/www.atlassian.com\/software\/confluence\" target=\"_blank\">Confluence<\/a>, or using <a href=\"https:\/\/structurizr.com\/\" target=\"_blank\">Structurizr<\/a> tool gives a lot of power to the team(s) that actually build the product.<\/em><\/p>\n<p><a href=\"https:\/\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/Case-B-C4-Model-Component-diagram.jpeg\"><img src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/Case-B-C4-Model-Component-diagram.jpeg\" alt=\"\" class=\"lazyload \" \/><noscript><img src=\"https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/Case-B-C4-Model-Component-diagram.jpeg?w=960&#038;ssl=1\" alt=\"\" data-recalc-dims=\"1\" \/><\/noscript><\/a><\/p>\n<h4>Last part, <em>Class<\/em> diagrams<\/h4>\n<p>To keep it simple, diagrams at this level would be used just to illustrate specific details. These are standard UML diagrams and they could be generated with many many tools. Here is a small sample, starting from a sample provided by LucidChart tool (the same I have used to display also the other diagrams):<\/p>\n<p><a href=\"https:\/\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Class-diagram-2.jpg\"><br \/>\n<figure id=\"attachment_535\" aria-describedby=\"caption-attachment-535\" style=\"width: 300px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" src=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 300 207'%3E%3C\/svg%3E\" data-src=\"https:\/\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Class-diagram-2-300x207.jpg\" alt=\"\" width=\"300\" height=\"207\" class=\"size-medium wp-image-535 lazyload \" data-sizes=\"auto\" data-srcset=\"https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Class-diagram-2.jpg?resize=300%2C207&amp;ssl=1 300w, https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Class-diagram-2.jpg?resize=768%2C529&amp;ssl=1 768w, https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Class-diagram-2.jpg?w=1024&amp;ssl=1 1024w, https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Class-diagram-2.jpg?resize=581%2C400&amp;ssl=1 581w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><noscript><img loading=\"lazy\" src=\"https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Class-diagram-2.jpg?resize=300%2C207&#038;ssl=1\" alt=\"\" width=\"300\" height=\"207\" class=\"size-medium wp-image-535\" srcset=\"https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Class-diagram-2.jpg?resize=300%2C207&amp;ssl=1 300w, https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Class-diagram-2.jpg?resize=768%2C529&amp;ssl=1 768w, https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Class-diagram-2.jpg?w=1024&amp;ssl=1 1024w, https:\/\/i0.wp.com\/qappdesign.com\/code\/wp-content\/uploads\/2017\/01\/C4-Model-Class-diagram-2.jpg?resize=581%2C400&amp;ssl=1 581w\" sizes=\"(max-width: 300px) 100vw, 300px\" data-recalc-dims=\"1\" \/><\/noscript><figcaption id=\"caption-attachment-535\" class=\"wp-caption-text\">C4 Model &#8211; Class diagram<\/figcaption><\/figure><\/a> <\/p>\n<h4>Common understanding and knowledge<\/h4>\n<p>Being used by one or more teams that build or maintain a product or software project, this model could generate a common understanding. Using the same diagrams, the team members start using the same vocabulary, giving a better chance to relate each other&#8217;s knowledge and expertise. In the end, this is a core advantage of the successful teams.<\/p>\n<h4>More on <em>visually communicate the architecture<\/em><\/h4>\n<p>You can find a full presentation here, made by Simon Brown, who created this model:<br \/>\n<iframe loading=\"lazy\" src=\"https:\/\/player.vimeo.com\/video\/191283373\" width=\"640\" height=\"360\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen><\/iframe><\/p>\n<h4>Give it a try<\/h4>\n<p>Whenever you start a new project, try to make at least one context diagram and then a container diagram. Drawing them on paper, together with the other team members, could bring something new in the conversation, and make easier to explain the view of the system.  <\/p>\n<p>*The questions associated with each diagram are taken from <a href=\"https:\/\/leanpub.com\/visualising-software-architecture\" target=\"_blank\"><strong>Software Architecture for Developers &#8211; Volume 2<\/strong><\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Is there an easy way to succinctly and unambiguously communicate the architecture of a software system ? Something that could highlight the requirements, and still be brief ? The Agile Manifesto prescribes that teams should value working software over comprehensive documentation. This doesn\u2019t mean that we should not create documentation; it just means we should create documentation that provides value and at the same time does not hinder the team\u2019s progress. We can achieve this using C4 architecture model. It is a static model, that provides an easy way to communicate the design of the system to all involved, and also brings a natural narrative for exploring the architecture of a software solution. Starting from the highest level (what is the system and how does it provides value to the business), it drills into the details, until the very low level of functionality. It could be something to next car presentation, showing the relevant details from outside to inside : Source: Wired article (link) This architecture model has been created by Simon Brown, and you can find more details, and live presentations on his website simonbrown.je. Why such architecture model ? The C4 model is an hierarchical way to think [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"The C4 software architecture model","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true},"categories":[18,7],"tags":[21,20,19],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v18.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The C4 software architecture model - Cloud, Data and Integrations<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The C4 software architecture model - Cloud, Data and Integrations\" \/>\n<meta property=\"og:description\" content=\"Is there an easy way to succinctly and unambiguously communicate the architecture of a software system ? Something that could highlight the requirements, and still be brief ? The Agile Manifesto prescribes that teams should value working software over comprehensive documentation. This doesn\u2019t mean that we should not create documentation; it just means we should create documentation that provides value and at the same time does not hinder the team\u2019s progress. We can achieve this using C4 architecture model. It is a static model, that provides an easy way to communicate the design of the system to all involved, and also brings a natural narrative for exploring the architecture of a software solution. Starting from the highest level (what is the system and how does it provides value to the business), it drills into the details, until the very low level of functionality. It could be something to next car presentation, showing the relevant details from outside to inside : Source: Wired article (link) This architecture model has been created by Simon Brown, and you can find more details, and live presentations on his website simonbrown.je. Why such architecture model ? The C4 model is an hierarchical way to think [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloud, Data and Integrations\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-23T21:32:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-01-24T15:24:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wired.com\/images_blogs\/autopia\/2013\/04\/picasion.com_fac6826e2e1c8190826ef3258e466ca7.gif\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@qappdesign\" \/>\n<meta name=\"twitter:site\" content=\"@QAppDesign\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Petru Faurescu\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/qappdesign.com\/code\/#website\",\"url\":\"https:\/\/qappdesign.com\/code\/\",\"name\":\"QualityAppDesign\",\"description\":\"with Petru Faurescu\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/qappdesign.com\/code\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.wired.com\/images_blogs\/autopia\/2013\/04\/picasion.com_fac6826e2e1c8190826ef3258e466ca7.gif\",\"contentUrl\":\"https:\/\/www.wired.com\/images_blogs\/autopia\/2013\/04\/picasion.com_fac6826e2e1c8190826ef3258e466ca7.gif\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/#webpage\",\"url\":\"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/\",\"name\":\"The C4 software architecture model - Cloud, Data and Integrations\",\"isPartOf\":{\"@id\":\"https:\/\/qappdesign.com\/code\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/#primaryimage\"},\"datePublished\":\"2017-01-23T21:32:36+00:00\",\"dateModified\":\"2017-01-24T15:24:01+00:00\",\"author\":{\"@id\":\"https:\/\/qappdesign.com\/code\/#\/schema\/person\/54db90dc6fe846cfd4c5a9544d93b75a\"},\"breadcrumb\":{\"@id\":\"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/qappdesign.com\/code\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The C4 software architecture model\"}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/qappdesign.com\/code\/#\/schema\/person\/54db90dc6fe846cfd4c5a9544d93b75a\",\"name\":\"Petru Faurescu\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/qappdesign.com\/code\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/84fb359a4e3d583dbea5a34bd5566956?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/84fb359a4e3d583dbea5a34bd5566956?s=96&d=mm&r=g\",\"caption\":\"Petru Faurescu\"},\"description\":\"Product lead, software developer &amp; architect\",\"sameAs\":[\"https:\/\/qappdesign.com\/code\",\"https:\/\/www.linkedin.com\/in\/petrufaurescu\/\",\"https:\/\/twitter.com\/@qappdesign\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The C4 software architecture model - Cloud, Data and Integrations","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/","og_locale":"en_US","og_type":"article","og_title":"The C4 software architecture model - Cloud, Data and Integrations","og_description":"Is there an easy way to succinctly and unambiguously communicate the architecture of a software system ? Something that could highlight the requirements, and still be brief ? The Agile Manifesto prescribes that teams should value working software over comprehensive documentation. This doesn\u2019t mean that we should not create documentation; it just means we should create documentation that provides value and at the same time does not hinder the team\u2019s progress. We can achieve this using C4 architecture model. It is a static model, that provides an easy way to communicate the design of the system to all involved, and also brings a natural narrative for exploring the architecture of a software solution. Starting from the highest level (what is the system and how does it provides value to the business), it drills into the details, until the very low level of functionality. It could be something to next car presentation, showing the relevant details from outside to inside : Source: Wired article (link) This architecture model has been created by Simon Brown, and you can find more details, and live presentations on his website simonbrown.je. Why such architecture model ? The C4 model is an hierarchical way to think [&hellip;]","og_url":"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/","og_site_name":"Cloud, Data and Integrations","article_published_time":"2017-01-23T21:32:36+00:00","article_modified_time":"2017-01-24T15:24:01+00:00","og_image":[{"url":"https:\/\/www.wired.com\/images_blogs\/autopia\/2013\/04\/picasion.com_fac6826e2e1c8190826ef3258e466ca7.gif"}],"twitter_card":"summary","twitter_creator":"@qappdesign","twitter_site":"@QAppDesign","twitter_misc":{"Written by":"Petru Faurescu","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"https:\/\/qappdesign.com\/code\/#website","url":"https:\/\/qappdesign.com\/code\/","name":"QualityAppDesign","description":"with Petru Faurescu","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/qappdesign.com\/code\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"ImageObject","@id":"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/#primaryimage","inLanguage":"en-US","url":"https:\/\/www.wired.com\/images_blogs\/autopia\/2013\/04\/picasion.com_fac6826e2e1c8190826ef3258e466ca7.gif","contentUrl":"https:\/\/www.wired.com\/images_blogs\/autopia\/2013\/04\/picasion.com_fac6826e2e1c8190826ef3258e466ca7.gif"},{"@type":"WebPage","@id":"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/#webpage","url":"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/","name":"The C4 software architecture model - Cloud, Data and Integrations","isPartOf":{"@id":"https:\/\/qappdesign.com\/code\/#website"},"primaryImageOfPage":{"@id":"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/#primaryimage"},"datePublished":"2017-01-23T21:32:36+00:00","dateModified":"2017-01-24T15:24:01+00:00","author":{"@id":"https:\/\/qappdesign.com\/code\/#\/schema\/person\/54db90dc6fe846cfd4c5a9544d93b75a"},"breadcrumb":{"@id":"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/qappdesign.com\/code\/the-c4-software-architecture-model\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/qappdesign.com\/code\/"},{"@type":"ListItem","position":2,"name":"The C4 software architecture model"}]},{"@type":"Person","@id":"https:\/\/qappdesign.com\/code\/#\/schema\/person\/54db90dc6fe846cfd4c5a9544d93b75a","name":"Petru Faurescu","image":{"@type":"ImageObject","@id":"https:\/\/qappdesign.com\/code\/#personlogo","inLanguage":"en-US","url":"https:\/\/secure.gravatar.com\/avatar\/84fb359a4e3d583dbea5a34bd5566956?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/84fb359a4e3d583dbea5a34bd5566956?s=96&d=mm&r=g","caption":"Petru Faurescu"},"description":"Product lead, software developer &amp; architect","sameAs":["https:\/\/qappdesign.com\/code","https:\/\/www.linkedin.com\/in\/petrufaurescu\/","https:\/\/twitter.com\/@qappdesign"]}]}},"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p82xvM-5C","_links":{"self":[{"href":"https:\/\/qappdesign.com\/code\/wp-json\/wp\/v2\/posts\/348"}],"collection":[{"href":"https:\/\/qappdesign.com\/code\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/qappdesign.com\/code\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/qappdesign.com\/code\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/qappdesign.com\/code\/wp-json\/wp\/v2\/comments?post=348"}],"version-history":[{"count":129,"href":"https:\/\/qappdesign.com\/code\/wp-json\/wp\/v2\/posts\/348\/revisions"}],"predecessor-version":[{"id":552,"href":"https:\/\/qappdesign.com\/code\/wp-json\/wp\/v2\/posts\/348\/revisions\/552"}],"wp:attachment":[{"href":"https:\/\/qappdesign.com\/code\/wp-json\/wp\/v2\/media?parent=348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/qappdesign.com\/code\/wp-json\/wp\/v2\/categories?post=348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/qappdesign.com\/code\/wp-json\/wp\/v2\/tags?post=348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}