{"id":206,"date":"2017-03-19T21:45:10","date_gmt":"2017-03-19T21:45:10","guid":{"rendered":"http:\/\/zanavu.com\/blog\/?p=206"},"modified":"2017-03-19T21:45:10","modified_gmt":"2017-03-19T21:45:10","slug":"software-architecture-part1","status":"publish","type":"post","link":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/","title":{"rendered":"Evolve Software Architecture using a principled approach (Part 1)"},"content":{"rendered":"<p><em>Software rules\u00a0the world<\/em>, everyone is aware of this. And along with it people say, Software is easy to change, easy to\u00a0create, easy to adopt, etc. Still Software is often hard to understand. For both\u00a0individuals and teams, having a <em><strong>common understanding of the\u00a0architecture of software makes life easier to evolve the software to be faster, cheaper, and better<\/strong><\/em>. Over the past two decades I had the opportunity\u00a0to work on several large scale systems. I also had the opportunity to start new projects from ground up and advice\u00a0early startups with their software journey. During this process I had evolved a\u00a0systematic approach and principles\u00a0for crafting software. In this series I will write more about this.<\/p>\n<figure id=\"attachment_207\" aria-describedby=\"caption-attachment-207\" style=\"width: 1760px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/zanavu.com\/blog\/2017\/03\/19\/software-architecture-part1\/software-architecture-part1\/\" rel=\"attachment wp-att-207\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-207\" src=\"http:\/\/zanavu.com\/blog\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png\" alt=\"\" width=\"1760\" height=\"780\" srcset=\"https:\/\/zanavu.com\/notes\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png 1760w, https:\/\/zanavu.com\/notes\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1-300x133.png 300w, https:\/\/zanavu.com\/notes\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1-768x340.png 768w, https:\/\/zanavu.com\/notes\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1-1024x454.png 1024w, https:\/\/zanavu.com\/notes\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1-1200x532.png 1200w\" sizes=\"auto, (max-width: 1760px) 100vw, 1760px\" \/><\/a><figcaption id=\"caption-attachment-207\" class=\"wp-caption-text\">Part1 Software Architecture<\/figcaption><\/figure>\n<p>It is easier to visualize the software structure using the analogy of building a house.\u00a0At the start we often talk about a house having a set number of bedrooms, bathrooms, kitchen and additional rooms. Next the building architects talk about interconnections between the rooms. Finally they consider the materials to use and specific dimensions to apply for the rooms. In a similar fashion<strong><em>\u00a0think of software architecture to be composed with\u00a0three separate structures: Conceptual Architecture, Logical Architecture, and Physical\u00a0Architecture.<\/em><br \/>\n<\/strong><\/p>\n<h4><strong>Conceptual Architecture<\/strong><\/h4>\n<p>Conceptual\u00a0Architecture provides a simple to read and understand view of the software systems. It is the easiest place where the business\u00a0and technology people can meet easily and share a common ground.\u00a0I often start with an inquiry of who the users are and what functionality is of interest for each user group. Usually this is drawn as a simple set of boxes illustrating the major building blocks. In the simple Ecommerce website example we start with two building blocks respectively for the frontend and the backend.<\/p>\n<h4><strong>Logical\u00a0ARCHITECTURE<\/strong><\/h4>\n<p>On further investigation, we can identify the detailed building blocks logically required for engineering the software. The result is the Logical Architecture that captures information about layering and sub-systems or components. The layered diagram illustrates the hierarchical dependency relationship between components.<\/p>\n<p>Typically I would like to start with the\u00a0user persona at the top, include biz logic and middle tier, local data, and then end with shared data + external partner services at the bottom. Lines showing dependencies are important to illustrate the connections. However I often omit the lines to keep the picture less cluttered. It is useful to identify and use consistent and good names for the components to help us in developing ownership and depth in the next phase.<\/p>\n<h4><strong>Physical\u00a0ARCHITECTURE<\/strong><\/h4>\n<p>The third and most important stage is to\u00a0describe all the different parts required to build the system.\u00a0At this time we detail out the various aspects required for\u00a0building, running, managing, and evolving the software. There is no single physical architecture picture. Often it is best to consider each aspect separately and annotate accordingly.\u00a0The aspects to consider include:<\/p>\n<ul>\n<li>Source Code Layout<\/li>\n<li>Binaries and Software Packages built out<\/li>\n<li>Cloud and Network Topology \/ Dependencies<\/li>\n<li>Exact components to use (ex: pick Amazon RDS as the database of choice)<\/li>\n<li>Monitoring of the services<\/li>\n<li>Ownership boundaries<\/li>\n<li>Security Access Controls (ex: use IAM API keys, specific roles to use, etc.)<\/li>\n<li>API contracts and conventions<\/li>\n<li>Data Models to use, etc.<\/li>\n<\/ul>\n<h5>Getting\u00a0Started<\/h5>\n<p>Above provides a quick glimpse of how to approach software architecture. No software system is perfect and always every piece is evolving with time.\u00a0Some systems have better approach with documentation and most do not have documentation. Often documentation has been\u00a0considered as a chore, which I disagree. Rarely do\u00a0people want to buy a house without house inspection. In a similar sense when one picks up a new project it is useful to do a\u00a0software inspection report to get caught up on what the reality is.<\/p>\n<p>Equipped with a set of simple and solid pictures, one can make traction towards better ownership, evolution, and shaping of the teams and technology for the future. In the future articles I will write more\u00a0about these.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Software rules\u00a0the world, everyone is aware of this. And along with it people say, Software is easy to change, easy to\u00a0create, easy to adopt, etc. Still Software is often hard to understand. For both\u00a0individuals and teams, having a common understanding of the\u00a0architecture of software makes life easier to evolve the software to be faster, cheaper, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,12],"tags":[14,36,11],"class_list":["post-206","post","type-post","status-publish","format-standard","hentry","category-startups","category-technology","tag-products","tag-software","tag-techstuff"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Evolve Software Architecture using a principled approach (Part 1) - Bright Possibilities<\/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:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Evolve Software Architecture using a principled approach (Part 1) - Bright Possibilities\" \/>\n<meta property=\"og:description\" content=\"Software rules\u00a0the world, everyone is aware of this. And along with it people say, Software is easy to change, easy to\u00a0create, easy to adopt, etc. Still Software is often hard to understand. For both\u00a0individuals and teams, having a common understanding of the\u00a0architecture of software makes life easier to evolve the software to be faster, cheaper, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/\" \/>\n<meta property=\"og:site_name\" content=\"Bright Possibilities\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-19T21:45:10+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/zanavu.com\/blog\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png\" \/>\n<meta name=\"author\" content=\"Murali\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Murali\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/\"},\"author\":{\"name\":\"Murali\",\"@id\":\"https:\/\/zanavu.com\/notes\/#\/schema\/person\/4bea3834a6b3e94e965b8b15d3a0a022\"},\"headline\":\"Evolve Software Architecture using a principled approach (Part 1)\",\"datePublished\":\"2017-03-19T21:45:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/\"},\"wordCount\":678,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/zanavu.com\/notes\/#organization\"},\"image\":{\"@id\":\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/zanavu.com\/blog\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png\",\"keywords\":[\"Products\",\"Software\",\"TechStuff\"],\"articleSection\":[\"Startups\",\"Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/\",\"url\":\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/\",\"name\":\"Evolve Software Architecture using a principled approach (Part 1) - Bright Possibilities\",\"isPartOf\":{\"@id\":\"https:\/\/zanavu.com\/notes\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/zanavu.com\/blog\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png\",\"datePublished\":\"2017-03-19T21:45:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#primaryimage\",\"url\":\"http:\/\/zanavu.com\/blog\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png\",\"contentUrl\":\"http:\/\/zanavu.com\/blog\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/zanavu.com\/notes\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Evolve Software Architecture using a principled approach (Part 1)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zanavu.com\/notes\/#website\",\"url\":\"https:\/\/zanavu.com\/notes\/\",\"name\":\"Bright Possibilities\",\"description\":\"Welcome to the World of Possibilities\",\"publisher\":{\"@id\":\"https:\/\/zanavu.com\/notes\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zanavu.com\/notes\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/zanavu.com\/notes\/#organization\",\"name\":\"Bright Possibilities\",\"url\":\"https:\/\/zanavu.com\/notes\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zanavu.com\/notes\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/zanavu.com\/notes\/wp-content\/uploads\/2016\/02\/aupic1.bmp\",\"contentUrl\":\"https:\/\/zanavu.com\/notes\/wp-content\/uploads\/2016\/02\/aupic1.bmp\",\"width\":261,\"height\":243,\"caption\":\"Bright Possibilities\"},\"image\":{\"@id\":\"https:\/\/zanavu.com\/notes\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/zanavu.com\/notes\/#\/schema\/person\/4bea3834a6b3e94e965b8b15d3a0a022\",\"name\":\"Murali\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zanavu.com\/notes\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e1bd605071dc5d22ac2ad578e820c974?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e1bd605071dc5d22ac2ad578e820c974?s=96&d=mm&r=g\",\"caption\":\"Murali\"},\"sameAs\":[\"https:\/\/www.hemocoel.com\"],\"url\":\"https:\/\/zanavu.com\/notes\/author\/murali\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Evolve Software Architecture using a principled approach (Part 1) - Bright Possibilities","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:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/","og_locale":"en_US","og_type":"article","og_title":"Evolve Software Architecture using a principled approach (Part 1) - Bright Possibilities","og_description":"Software rules\u00a0the world, everyone is aware of this. And along with it people say, Software is easy to change, easy to\u00a0create, easy to adopt, etc. Still Software is often hard to understand. For both\u00a0individuals and teams, having a common understanding of the\u00a0architecture of software makes life easier to evolve the software to be faster, cheaper, [&hellip;]","og_url":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/","og_site_name":"Bright Possibilities","article_published_time":"2017-03-19T21:45:10+00:00","og_image":[{"url":"http:\/\/zanavu.com\/blog\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png","type":"","width":"","height":""}],"author":"Murali","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Murali","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#article","isPartOf":{"@id":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/"},"author":{"name":"Murali","@id":"https:\/\/zanavu.com\/notes\/#\/schema\/person\/4bea3834a6b3e94e965b8b15d3a0a022"},"headline":"Evolve Software Architecture using a principled approach (Part 1)","datePublished":"2017-03-19T21:45:10+00:00","mainEntityOfPage":{"@id":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/"},"wordCount":678,"commentCount":0,"publisher":{"@id":"https:\/\/zanavu.com\/notes\/#organization"},"image":{"@id":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#primaryimage"},"thumbnailUrl":"http:\/\/zanavu.com\/blog\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png","keywords":["Products","Software","TechStuff"],"articleSection":["Startups","Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/","url":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/","name":"Evolve Software Architecture using a principled approach (Part 1) - Bright Possibilities","isPartOf":{"@id":"https:\/\/zanavu.com\/notes\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#primaryimage"},"image":{"@id":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#primaryimage"},"thumbnailUrl":"http:\/\/zanavu.com\/blog\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png","datePublished":"2017-03-19T21:45:10+00:00","breadcrumb":{"@id":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#primaryimage","url":"http:\/\/zanavu.com\/blog\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png","contentUrl":"http:\/\/zanavu.com\/blog\/wp-content\/uploads\/2017\/03\/Software-Architecture-Part1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/zanavu.com\/notes\/2017\/03\/19\/software-architecture-part1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zanavu.com\/notes\/"},{"@type":"ListItem","position":2,"name":"Evolve Software Architecture using a principled approach (Part 1)"}]},{"@type":"WebSite","@id":"https:\/\/zanavu.com\/notes\/#website","url":"https:\/\/zanavu.com\/notes\/","name":"Bright Possibilities","description":"Welcome to the World of Possibilities","publisher":{"@id":"https:\/\/zanavu.com\/notes\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zanavu.com\/notes\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zanavu.com\/notes\/#organization","name":"Bright Possibilities","url":"https:\/\/zanavu.com\/notes\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zanavu.com\/notes\/#\/schema\/logo\/image\/","url":"https:\/\/zanavu.com\/notes\/wp-content\/uploads\/2016\/02\/aupic1.bmp","contentUrl":"https:\/\/zanavu.com\/notes\/wp-content\/uploads\/2016\/02\/aupic1.bmp","width":261,"height":243,"caption":"Bright Possibilities"},"image":{"@id":"https:\/\/zanavu.com\/notes\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zanavu.com\/notes\/#\/schema\/person\/4bea3834a6b3e94e965b8b15d3a0a022","name":"Murali","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zanavu.com\/notes\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e1bd605071dc5d22ac2ad578e820c974?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e1bd605071dc5d22ac2ad578e820c974?s=96&d=mm&r=g","caption":"Murali"},"sameAs":["https:\/\/www.hemocoel.com"],"url":"https:\/\/zanavu.com\/notes\/author\/murali\/"}]}},"_links":{"self":[{"href":"https:\/\/zanavu.com\/notes\/wp-json\/wp\/v2\/posts\/206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zanavu.com\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zanavu.com\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zanavu.com\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zanavu.com\/notes\/wp-json\/wp\/v2\/comments?post=206"}],"version-history":[{"count":2,"href":"https:\/\/zanavu.com\/notes\/wp-json\/wp\/v2\/posts\/206\/revisions"}],"predecessor-version":[{"id":209,"href":"https:\/\/zanavu.com\/notes\/wp-json\/wp\/v2\/posts\/206\/revisions\/209"}],"wp:attachment":[{"href":"https:\/\/zanavu.com\/notes\/wp-json\/wp\/v2\/media?parent=206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zanavu.com\/notes\/wp-json\/wp\/v2\/categories?post=206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zanavu.com\/notes\/wp-json\/wp\/v2\/tags?post=206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}