{"id":6283,"date":"2015-11-11T13:40:12","date_gmt":"2015-11-11T12:40:12","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/"},"modified":"2015-11-11T13:40:12","modified_gmt":"2015-11-11T12:40:12","slug":"software-architecture-vs-code-representation","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/","title":{"rendered":"Software architecture vs code representation"},"content":{"rendered":"<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03.gif\"><img loading=\"lazy\" decoding=\"async\" class=\" size-full wp-image-5341 aligncenter\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03.gif\" alt=\"jugs_logo_03\" width=\"256\" height=\"127\" \/><\/a>Tuesday the 10<sup>th<\/sup> of November I attended a public lecture at Swiss Java User Group in Z\u00fcrich. Topic of the pretension was to describe and address challenges any project manager can encounter, when reflexion switches from perspective of software architecture to real coding implementation.<\/p>\n<p>Presentation was essentially based on Java language, but in fact applicable to any other language.<\/p>\n<p>So first, presenter shared project experiences he has got with some customers, and pointed weaknesses of their architecture diagrams in comparison with their implementation.<\/p>\n<p>To give you an example, we can consider having a layered model eventually a Model\/View\/Controller approach, for several parallel services. Be careful, I am not saying this approach could no longer be applicable to a project, but as long as the scope remains relatively restricted, architectural design will not be so hard to represent.<\/p>\n<p>However, when we start having bigger problems to address, with dependencies between components in same or across these layers, architecture diagram could more look like a spider web. Moreover, by doing abstraction in this manner, it becomes also painful to navigate between one layer and\/or dependent sub-services to understand and recover the \u201cbig-picture\u201d of a business requirement. On the other hand, same challenge happens for finding the linked code representation.<\/p>\n<p>Presenter also argued by saying that traditional modeling patterns could also lead to miss-understandings between customers, software designers and developers. Indeed by keeping such abstraction vocabulary, same word could have several meanings depending on position of the person involved inside the project. He just invited us to avoid, as far as possible to use generic terms, like \u201cService\u201d, \u201cLayer\u201d or \u201cComponent\u201d when sharing knowledge or doing synchronization between involved teams.<\/p>\n<p>After this introduction, presenter then gave us some keys and best practices for improving software architecture representations, and make them closer to code representation as well.<\/p>\n<p>Main proposition is to represent a software architecture more by \u201ccontainers\u201d. A container could be understood as an aggregate set of (micro)services that answers a particular need rather than \u201cview\u201d or \u201ccontroller\u201d layers, which are involved by multiple services. He convinced us to represent our software more by \u201cutilities\u201d modules, rather than abstracted -unnamed- layers (unnamed meaning not representing any functional activity of the software solution).<\/p>\n<p>He also invited us to formalize this architecture in several abstracted representation, up to 4 depending on perspective we want to have regarding finality of a question. The first, very high level, close to a use-case diagram but with third party dependences. Here, software is only represented by a black-box at the center. Then he described how we could zoom into this \u201cbox\u201d, and into next subsequent \u201cboxes\u201d etc. up to a traditional class diagram.<\/p>\n<p>By experience, and knowing I am more coming from \u201ccoding\u201d world, I also experienced same challenges than he described during coordination with people coming with an \u201carchitectural\u201d point of view. We had altogether to found out solutions to better understood ourselves. And to say the least, outcome was something close to presenter conclusions.<\/p>\n<p>In case you would like to continue getting more details about this original software architecture approach, I invite you to follow Simon&#8217;s Brown presentations and news.<\/p>\n<p><a href=\"http:\/\/www.codingthearchitecture.com\/authors\/sbrown\/\">http:\/\/www.codingthearchitecture.com\/authors\/sbrown\/<\/a><\/p>\n<p>I also want to thanks him and Swiss Java User Group for organizing such very interesting lectures.<\/p>\n<p>Philippe Schweitzer<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tuesday the 10th of November I attended a public lecture at Swiss Java User Group in Z\u00fcrich. Topic of the pretension was to describe and address challenges any project manager can encounter, when reflexion switches from perspective of software architecture to real coding implementation. Presentation was essentially based on Java language, but in fact applicable [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":6285,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[368],"tags":[704,705,214],"type_dbi":[],"class_list":["post-6283","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-performance","tag-architecture","tag-coding","tag-java"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Software architecture vs code representation - dbi Blog<\/title>\n<meta name=\"description\" content=\"Java software architecture\" \/>\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.dbi-services.com\/blog\/software-architecture-vs-code-representation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Software architecture vs code representation\" \/>\n<meta property=\"og:description\" content=\"Java software architecture\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-11-11T12:40:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03-1.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"256\" \/>\n\t<meta property=\"og:image:height\" content=\"127\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Middleware Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Middleware Team\" \/>\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:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/\"},\"author\":{\"name\":\"Middleware Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\"},\"headline\":\"Software architecture vs code representation\",\"datePublished\":\"2015-11-11T12:40:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/\"},\"wordCount\":558,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03-1.gif\",\"keywords\":[\"architecture\",\"coding\",\"Java\"],\"articleSection\":[\"Development &amp; Performance\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/\",\"name\":\"Software architecture vs code representation - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03-1.gif\",\"datePublished\":\"2015-11-11T12:40:12+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\"},\"description\":\"Java software architecture\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03-1.gif\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03-1.gif\",\"width\":256,\"height\":127},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Software architecture vs code representation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\",\"name\":\"Middleware Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"caption\":\"Middleware Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Software architecture vs code representation - dbi Blog","description":"Java software architecture","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.dbi-services.com\/blog\/software-architecture-vs-code-representation\/","og_locale":"en_US","og_type":"article","og_title":"Software architecture vs code representation","og_description":"Java software architecture","og_url":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/","og_site_name":"dbi Blog","article_published_time":"2015-11-11T12:40:12+00:00","og_image":[{"width":256,"height":127,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03-1.gif","type":"image\/gif"}],"author":"Middleware Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Middleware Team","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/"},"author":{"name":"Middleware Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"headline":"Software architecture vs code representation","datePublished":"2015-11-11T12:40:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/"},"wordCount":558,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03-1.gif","keywords":["architecture","coding","Java"],"articleSection":["Development &amp; Performance"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/","url":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/","name":"Software architecture vs code representation - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03-1.gif","datePublished":"2015-11-11T12:40:12+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"description":"Java software architecture","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03-1.gif","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/jugs_logo_03-1.gif","width":256,"height":127},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/software-architecture-vs-code-representation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Software architecture vs code representation"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1","name":"Middleware Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","caption":"Middleware Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/6283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=6283"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/6283\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/6285"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=6283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=6283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=6283"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=6283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}