{"id":15071,"date":"2026-01-14T13:45:44","date_gmt":"2026-01-14T05:45:44","guid":{"rendered":"https:\/\/www.cybermedian.com\/in\/docs\/my-document\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/"},"modified":"2026-01-15T11:11:05","modified_gmt":"2026-01-15T03:11:05","slug":"technology-choices","status":"publish","type":"docs","link":"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/","title":{"rendered":"Technology Choices"},"content":{"rendered":"<p dir=\"auto\"><strong>Highlighting communication protocols and technology stacks<\/strong><\/p>\n<p dir=\"auto\">Once you\u2019ve identified the major containers that make up your software system, the next critical step in creating a meaningful <strong>Container Diagram<\/strong> is to clearly document the <strong>technology choices<\/strong> for each container and \u2014 even more importantly \u2014 the <strong>communication protocols<\/strong> and <strong>mechanisms<\/strong> that connect them.<\/p>\n<p dir=\"auto\">This is what transforms a simple block diagram into a useful architectural artifact: it shows <strong>how<\/strong> the pieces fit together technically, revealing integration patterns, potential friction points, performance characteristics, security considerations, and maintainability implications.<\/p>\n<h3 dir=\"auto\">Why Technology Choices Belong at Level 2<\/h3>\n<p dir=\"auto\">At the System Context level (Level 1), we deliberately kept everything <strong>technology-agnostic<\/strong> to focus on business purpose and boundaries.<\/p>\n<p dir=\"auto\">At the Container level (Level 2), we introduce <strong>just enough technical detail<\/strong> to answer:<\/p>\n<ul dir=\"auto\">\n<li>What technologies power each major part of the system?<\/li>\n<li>How do these parts actually talk to each other in production?<\/li>\n<li>What architectural style or constraints does the system follow (REST, event-driven, RPC, etc.)?<\/li>\n<\/ul>\n<p dir=\"auto\">This information is essential for developers, architects, DevOps teams, security reviewers, and anyone evaluating the system\u2019s health, scalability, or modernization potential.<\/p>\n<h3 dir=\"auto\">What to Show for Each Container<\/h3>\n<p dir=\"auto\">For every container in your diagram, include (as text labels inside or beside the box):<\/p>\n<ol dir=\"auto\">\n<li><strong>Primary Technology \/ Stack<\/strong>\n<ul dir=\"auto\">\n<li>The main runtime or framework used to implement the container.<\/li>\n<li>Be specific enough to be meaningful, but not exhaustive.<\/li>\n<li>Examples:\n<ul dir=\"auto\">\n<li>\u201cSpring Boot + Java 21\u201d<\/li>\n<li>\u201cReact 18 (TypeScript)\u201d<\/li>\n<li>\u201cNode.js 20 + Express\u201d<\/li>\n<li>\u201c.NET 8 (ASP.NET Core)\u201d<\/li>\n<li>\u201cGo 1.23\u201d<\/li>\n<li>\u201cPostgreSQL 16\u201d<\/li>\n<li>\u201cKafka 3.7\u201d<\/li>\n<li>\u201cAWS Lambda (Python 3.12)\u201d<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>Optional Secondary Technologies<\/strong> (if they add clarity)\n<ul dir=\"auto\">\n<li>Databases: \u201cPostgreSQL\u201d, \u201cMongoDB Atlas\u201d, \u201cRedis\u201d<\/li>\n<li>Frameworks\/libraries: \u201cQuarkus\u201d, \u201cFastAPI\u201d, \u201cNext.js\u201d<\/li>\n<li>Hosting\/runtime: \u201cKubernetes\u201d, \u201cAWS ECS\u201d, \u201cVercel\u201d, \u201cAzure Functions\u201d<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p dir=\"auto\">Keep it concise \u2014 aim for 1\u20133 lines of text per container. Overloading with every dependency defeats the purpose.<\/p>\n<h3 dir=\"auto\">Highlighting Communication Protocols and Integration Styles<\/h3>\n<p dir=\"auto\">The real value of the Container Diagram shines in the <strong>relationships<\/strong> between containers. Here you explicitly show <strong>how<\/strong> containers interact, using:<\/p>\n<ol dir=\"auto\">\n<li><strong>Directional Arrows<\/strong> with <strong>protocol labels<\/strong>\n<ul dir=\"auto\">\n<li>Label each arrow with the primary communication mechanism.<\/li>\n<li>Common examples:\n<ul dir=\"auto\">\n<li>\u201cHTTPS \/ REST\u201d or \u201cHTTP\/REST API\u201d<\/li>\n<li>\u201cgRPC\u201d<\/li>\n<li>\u201cGraphQL\u201d<\/li>\n<li>\u201cAMQP\u201d or \u201cRabbitMQ\u201d<\/li>\n<li>\u201cKafka (events)\u201d or \u201cKafka topics\u201d<\/li>\n<li>\u201cJDBC \/ SQL\u201d (direct database access \u2014 use sparingly and flag as anti-pattern when possible)<\/li>\n<li>\u201cWebSocket\u201d<\/li>\n<li>\u201cFile transfer (S3)\u201d<\/li>\n<li>\u201cgRPC over HTTP\/2\u201d<\/li>\n<li>\u201cAWS SQS\u201d or \u201cAzure Service Bus\u201d<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>Bidirectional arrows<\/strong> when communication flows both ways (e.g., request-response + callbacks, event pub\/sub, two-way sync).<\/li>\n<li><strong>Optional qualifiers<\/strong> for clarity\n<ul dir=\"auto\">\n<li>\u201cSynchronous\u201d vs. \u201cAsynchronous\u201d<\/li>\n<li>\u201cJSON over HTTPS\u201d<\/li>\n<li>\u201cProtobuf + gRPC\u201d<\/li>\n<li>\u201cEvent-carried state transfer\u201d<\/li>\n<li>\u201cCommand \u2192 Event\u201d<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3 dir=\"auto\">Best Practices for Clean, Informative Relationships<\/h3>\n<ul dir=\"auto\">\n<li><strong>Keep labels short but precise<\/strong> \u2014 \u201cREST\/HTTPS\u201d is better than \u201cCalls RESTful endpoints over HTTPS using JSON payloads\u201d.<\/li>\n<li><strong>Use consistent conventions<\/strong> across diagrams (e.g., always put protocol first, then payload format if relevant).<\/li>\n<li><strong>Flag important patterns<\/strong> \u2014 e.g., direct database coupling between services can be highlighted with a note or different line style.<\/li>\n<li><strong>Avoid generic labels<\/strong> like \u201cAPI\u201d or \u201cIntegration\u201d \u2014 specify the protocol\/style.<\/li>\n<li><strong>Show async differently<\/strong> \u2014 some teams use dashed arrows for asynchronous\/event-driven communication to visually distinguish from synchronous calls.<\/li>\n<\/ul>\n<h3 dir=\"auto\">Example Snippet (Text Representation)<\/h3>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>text<\/div>\n<div>\n<div>\n<div><\/div>\n<\/div>\n<\/div>\n<div>\n<pre tabindex=\"0\"><code>[Customer Mobile App (React Native)] --&gt; HTTPS \/ REST API --&gt; [API Gateway (Kong)]\r\n[API Gateway (Kong)] &lt;--&gt; HTTPS \/ GraphQL --&gt; [GraphQL Backend (Node.js + Apollo)]\r\n[GraphQL Backend] --&gt; Kafka (events) --&gt; [Order Processor (Spring Boot)]\r\n[Order Processor] --&gt; JDBC --&gt; [PostgreSQL \u2013 Orders]\r\n[Order Processor] --&gt; AWS SNS --&gt; [Notification Service (AWS Lambda)]<\/code><\/pre>\n<\/div>\n<div><\/div>\n<\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">This single view immediately communicates:<\/p>\n<ul dir=\"auto\">\n<li>Frontend \u2192 backend flow via REST\/GraphQL<\/li>\n<li>Event-driven processing with Kafka<\/li>\n<li>Direct DB access (potential concern)<\/li>\n<li>Push notifications via SNS<\/li>\n<\/ul>\n<h3 dir=\"auto\">Common Pitfalls to Avoid<\/h3>\n<ul dir=\"auto\">\n<li>Hiding critical protocols behind vague labels (\u201cconnects to\u201d, \u201cintegrates with\u201d)<\/li>\n<li>Omitting technology for databases or brokers (they are containers too \u2014 label them!)<\/li>\n<li>Showing low-level details like ports, IP addresses, or Kubernetes service names (save for Deployment view)<\/li>\n<li>Over-fragmenting: if two containers always communicate via the same protocol, one arrow may suffice<\/li>\n<\/ul>\n<p dir=\"auto\">By clearly highlighting technology stacks and communication protocols at Level 2, your Container Diagram becomes a <strong>living reference<\/strong> for understanding the system\u2019s technical reality \u2014 essential for onboarding, architecture reviews, incident response, threat modeling, and planning evolutionary changes.<\/p>\n<p dir=\"auto\">In the hands-on section coming up, you\u2019ll apply these principles directly: taking a System Context, decomposing into containers, assigning realistic technologies, and labeling interactions with precise protocols \u2014 all using C4-PlantUML Studio for rapid, versionable results.<\/p>\n","protected":false},"featured_media":0,"parent":15065,"menu_order":2,"comment_status":"closed","ping_status":"closed","template":"","doc_tag":[],"class_list":["post-15071","docs","type-docs","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Technology Choices - Cybermedian Indian<\/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:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/\" \/>\n<meta property=\"og:locale\" content=\"hi_IN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Technology Choices - Cybermedian Indian\" \/>\n<meta property=\"og:description\" content=\"Highlighting communication protocols and technology stacks Once you\u2019ve identified the major containers that make up your software system, the next\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/\" \/>\n<meta property=\"og:site_name\" content=\"Cybermedian Indian\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-15T03:11:05+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u0905\u0928\u0941\u092e\u093e\u0928\u093f\u0924 \u092a\u0922\u093c\u0928\u0947 \u0915\u093e \u0938\u092e\u092f\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 \u092e\u093f\u0928\u091f\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/\",\"url\":\"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/\",\"name\":\"Technology Choices - Cybermedian Indian\",\"isPartOf\":{\"@id\":\"https:\/\/www.cybermedian.com\/in\/#website\"},\"datePublished\":\"2026-01-14T05:45:44+00:00\",\"dateModified\":\"2026-01-15T03:11:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/#breadcrumb\"},\"inLanguage\":\"hi-IN\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.cybermedian.com\/in\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mastering the C4 Model: From Foundations to AI-Powered Software Architecture Visualization\",\"item\":\"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Module 3: Level 2 \u2013 Diving into Container Diagrams\",\"item\":\"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Technology Choices\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.cybermedian.com\/in\/#website\",\"url\":\"https:\/\/www.cybermedian.com\/in\/\",\"name\":\"Cybermedian Indian\",\"description\":\"Learning one new thing everyday\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.cybermedian.com\/in\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"hi-IN\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Technology Choices - Cybermedian Indian","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:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/","og_locale":"hi_IN","og_type":"article","og_title":"Technology Choices - Cybermedian Indian","og_description":"Highlighting communication protocols and technology stacks Once you\u2019ve identified the major containers that make up your software system, the next","og_url":"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/","og_site_name":"Cybermedian Indian","article_modified_time":"2026-01-15T03:11:05+00:00","twitter_card":"summary_large_image","twitter_misc":{"\u0905\u0928\u0941\u092e\u093e\u0928\u093f\u0924 \u092a\u0922\u093c\u0928\u0947 \u0915\u093e \u0938\u092e\u092f":"3 \u092e\u093f\u0928\u091f"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/","url":"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/","name":"Technology Choices - Cybermedian Indian","isPartOf":{"@id":"https:\/\/www.cybermedian.com\/in\/#website"},"datePublished":"2026-01-14T05:45:44+00:00","dateModified":"2026-01-15T03:11:05+00:00","breadcrumb":{"@id":"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/#breadcrumb"},"inLanguage":"hi-IN","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/technology-choices\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.cybermedian.com\/in\/"},{"@type":"ListItem","position":2,"name":"Mastering the C4 Model: From Foundations to AI-Powered Software Architecture Visualization","item":"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/"},{"@type":"ListItem","position":3,"name":"Module 3: Level 2 \u2013 Diving into Container Diagrams","item":"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/"},{"@type":"ListItem","position":4,"name":"Technology Choices"}]},{"@type":"WebSite","@id":"https:\/\/www.cybermedian.com\/in\/#website","url":"https:\/\/www.cybermedian.com\/in\/","name":"Cybermedian Indian","description":"Learning one new thing everyday","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.cybermedian.com\/in\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"hi-IN"}]}},"comment_count":0,"_links":{"self":[{"href":"https:\/\/www.cybermedian.com\/in\/wp-json\/wp\/v2\/docs\/15071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cybermedian.com\/in\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/www.cybermedian.com\/in\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cybermedian.com\/in\/wp-json\/wp\/v2\/comments?post=15071"}],"version-history":[{"count":2,"href":"https:\/\/www.cybermedian.com\/in\/wp-json\/wp\/v2\/docs\/15071\/revisions"}],"predecessor-version":[{"id":15115,"href":"https:\/\/www.cybermedian.com\/in\/wp-json\/wp\/v2\/docs\/15071\/revisions\/15115"}],"up":[{"embeddable":true,"href":"https:\/\/www.cybermedian.com\/in\/wp-json\/wp\/v2\/docs\/15065"}],"next":[{"title":"Hands-On","link":"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/hands-on\/","href":"https:\/\/www.cybermedian.com\/in\/wp-json\/wp\/v2\/docs\/15072"}],"prev":[{"title":"What is a \"Container\"?","link":"https:\/\/www.cybermedian.com\/in\/docs\/mastering-c4-model\/module-3-level-2-diving-into-container-diagrams\/what-is-a-container\/","href":"https:\/\/www.cybermedian.com\/in\/wp-json\/wp\/v2\/docs\/15070"}],"wp:attachment":[{"href":"https:\/\/www.cybermedian.com\/in\/wp-json\/wp\/v2\/media?parent=15071"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/www.cybermedian.com\/in\/wp-json\/wp\/v2\/doc_tag?post=15071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}