{"id":14821,"date":"2016-06-30T11:40:15","date_gmt":"2016-06-30T08:40:15","guid":{"rendered":"http:\/\/www.altoros.com\/blog\/?p=14821"},"modified":"2024-09-27T03:32:43","modified_gmt":"2024-09-27T00:32:43","slug":"reducing-complexity-of-software-with-domain-driven-design-and-microservices","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/","title":{"rendered":"Reducing Complexity of Software with Domain-Driven Design and Microservices"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#What_makes_software_complex\" >What makes software complex?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#Addressing_complexity_with_microservices\" >Addressing complexity with microservices<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#Want_details_See_the_slides\" >Want details? See the slides!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#Related_reading\" >Related reading:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#About_the_speakers\" >About the speakers<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"What_makes_software_complex\"><\/span>What makes software complex?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div id=\"attachment_14839\" style=\"width: 170px\" class=\"wp-caption alignleft\"><img decoding=\"async\" aria-describedby=\"caption-attachment-14839\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Sergey-Matyukevich-300x300.jpg\" alt=\"Sergey Matyukevich\" width=\"160\" class=\"size-medium wp-image-14839\" \/><p id=\"caption-attachment-14839\" class=\"wp-caption-text\"><small>Sergey Matyukevich<\/small><\/p><\/div>\n<p>\u201cFor me, the definition of complexity comes from the number of things you should keep in mind when working on a software project,\u201d said Sergey Matyukevich, Senior Cloud Engineer at Altoros, during a <a href=\"https:\/\/www.meetup.com\/Cloud-Foundry-Austin\/events\/230289362\/\" target=\"_blank\" rel=\"noopener\">recent meetup<\/a> in Austin, TX.<\/p>\n<p>Although microservices were the ultimate topic that Sergey covered in his presentation, he cautioned attendees \u201cnot to think microservices first.\u201d Instead, Sergey suggested to start with the Domain-Driven Design (also known as DDD).<\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Domain-driven_design\" target=\"_blank\" rel=\"noopener\">Domain-driven design<\/a> has now been with us for more than a decade. The term was coined by Eric Evans, who wrote the seminal book on the topic in 2003, entitled \u201cDomain-Driven Design: Tackling Complexity in the Heart of Software.\u201d<\/p>\n<p>The book, by the way, <a href=\"https:\/\/books.google.by\/books\/about\/Domain_Driven_Design.html?id=hHBf4YxMnWMC&#038;source=kp_cover&#038;redir_esc=y\" target=\"_blank\" rel=\"noopener\">is still available<\/a>.<\/p>\n<p>His key insights at the time were to make the software fit the project, i.e. the domain, and establish a shared vision and \u201cvocabulary of design\u201d within the team. (The latter becomes relevant to the use of what&#8217;s known as ubiquitous language, and is discussed near the end of this article.)<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Addressing_complexity_with_microservices\"><\/span>Addressing complexity with microservices<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Since that time, with the emergence of cloud computing and the widely distributed architectures that often go with it, complexity has increased by at least a magnitude. Thus, the proper way to go about DDD is more relevant than ever.<\/p>\n<p>Sergey outlined several ways a project can be considered complex today: multi-system, multi-platform, working with legacy interfaces, a need for data caching, and the use of several coding methods. Add to that the need to scale, often logarithmically to hundreds of thousands of users and beyond. He illustrated this basic overview in the following slide: <\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-1.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-1.png\" alt=\"Data-Driven Design Sergey Matyukevich 1\" width=\"640\" class=\"aligncenter size-full wp-image-14906\" \/><\/a><\/p>\n<p>He recommended decomposing an application into smaller pieces as the proper way to go about things, and illustrated the idea of decomposing  layers, then transforming the resultant modules into microservices:<\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-2.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-2.png\" alt=\"Data-Driven Design Sergey Matyukevich 2\" width=\"640\" class=\"aligncenter size-full wp-image-14911\" \/><\/a><\/p>\n<p>He also stressed the importance of loose coupling, that fundamental approach to service-oriented architectures (SOA) that begat the modern era of complexity during the timeframe of Eric Evans&#8217;s book:<\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-3.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-3.png\" alt=\"Data-Driven Design Sergey Matyukevich 3\" width=\"640\" class=\"aligncenter size-full wp-image-14912\" \/><\/a><\/p>\n<p>A nicely detailed discussion of modules can be found <a href=\"https:\/\/www.culttt.com\/2014\/12\/10\/modules-domain-driven-design\/\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p>Sergey illustrated how to identify modules based on physical layer separation:<\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-4.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-4.png\" alt=\"Data-Driven Design Sergey Matyukevich 4\" width=\"640\" class=\"aligncenter size-full wp-image-14913\" \/><\/a><\/p>\n<p>And then on layer abstraction:<\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-5.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-5.png\" alt=\"Data-Driven Design Sergey Matyukevich 5\" width=\"640\" class=\"aligncenter size-full wp-image-14914\" \/><\/a><\/p>\n<p>The modules should also be thought of as existing within bounded contexts\u2014a topic undertaken briefly in the module discussion link above, and illustrated by Sergey thusly:<\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-6.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-6.png\" alt=\"Data-Driven Design Sergey Matyukevich 6\" width=\"640\" class=\"aligncenter size-full wp-image-14915\" \/><\/a><\/p>\n<p>Then it was on to microservices, which can be formed from modules (i.e. the modules transform into microservices when there is a need to scale modules independently).<\/p>\n<p>Ubiquitous language is the other key aspect of successful DDD, and Sergey provided some examples as follows:<\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-7.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-7.png\" alt=\"Data-Driven Design Sergey Matyukevich 7\" width=\"640\" class=\"aligncenter size-full wp-image-14916\" \/><\/a><\/p>\n<p>Complexity is with us as a permanent part of the cloudscape. It can be thought of as strategy or perhaps even philosophy rather than code monkeying. Successful app development and deployment in multi-platform cloud infrastructures behooves a DevOps culture and commitment to continuous integration.<\/p>\n<p>As Sergey demonstrated, recognition and practice of a few key fundamentals helps organizations to master the ABCs of DDD. At the same time, while domain-driven design and microservices reduce the complexity of software, cloud apps may still become more complicated\u2014however, this time, in a more intelligent way.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Want_details_See_the_slides\"><\/span>Want details? See the slides!<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><center><iframe loading=\"lazy\" src=\"\/\/www.slideshare.net\/slideshow\/embed_code\/key\/7LHoqFAgb2pCDN\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen><\/iframe><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Related_reading\"><\/span>Related reading:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/\">Addressing Complex Software Systems with Microservices and CI\/CD<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/paas-vs-iaas-for-microservices-architectures-top-6-differences\/\">PaaS vs. IaaS for Microservices Architectures: Top 6 Differences<\/a><\/li>\n<\/ul>\n<hr\/>\n<h3><span class=\"ez-toc-section\" id=\"About_the_speakers\"><\/span>About the speakers<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div>\n<div style=\"float: right;\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Sergey-Matyukevich-Cloud-Engineer-Altoros.png\" alt=\"Sergey Matyukevich, Cloud Engineer, Altoros\" width=\"150\" height=\"150\" class=\"aligncenter size-full wp-image-14918\" \/><\/div>\n<div style=\"width: 450px;\"><small><strong>Sergey Matyukevich<\/strong> is a Cloud Engineer and Go Developer at Altoros. With 6+ years in software engineering, he is an expert in cloud automation and designing architectures for complex cloud-based systems. An active member of the Go community, Sergey is a frequent contributor to open-source projects, such as Ubuntu and Juju Charms.<\/small><\/div>\n<\/div>\n<hr\/>\n<p><center><small>Written by Roger Strukhoff, edited by <a href=\"https:\/\/www.altoros.com\/blog\/author\/alex\/\">Alex Khizhniak<\/a> and <a href=\"https:\/\/www.altoros.com\/blog\/author\/sophie-turol\/\">Sophie Turol<\/a>.<\/small><\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>What makes software complex?<\/p>\n<p id=\"caption-attachment-14839\" class=\"wp-caption-text\">Sergey Matyukevich<\/p>\n<p>\u201cFor me, the definition of complexity comes from the number of things you should keep in mind when working on a software project,\u201d said Sergey Matyukevich, Senior Cloud Engineer at Altoros, during a recent meetup in Austin, TX.<\/p>\n<p>Although microservices were the ultimate topic that [&#8230;]<\/p>\n","protected":false},"author":9,"featured_media":14921,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[873,146],"class_list":["post-14821","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-cloud-native","tag-microservices"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Reducing Complexity of Software with Domain-Driven Design and Microservices | Altoros<\/title>\n<meta name=\"description\" content=\"Complex software is here to stay, especially as cloud infrastructures continue to develop. Learn how splitting apps into smaller parts\u2014according to a domain-driven design\u2014may help to address the issue.\" \/>\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.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reducing Complexity of Software with Domain-Driven Design and Microservices | Altoros\" \/>\n<meta property=\"og:description\" content=\"Complex software is here to stay, especially as cloud infrastructures continue to develop. Learn how splitting apps into smaller parts\u2014according to a data-driven design\u2014and event-driven architectures may help to addr\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-30T08:40:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-27T00:32:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-featured.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"360\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Roger Strukhoff\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Roger Strukhoff\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/\",\"name\":\"Reducing Complexity of Software with Domain-Driven Design and Microservices | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-featured.gif\",\"datePublished\":\"2016-06-30T08:40:15+00:00\",\"dateModified\":\"2024-09-27T00:32:43+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/56ea20d6f280f7a442e89e5884b06fd8\"},\"description\":\"Complex software is here to stay, especially as cloud infrastructures continue to develop. Learn how splitting apps into smaller parts\u2014according to a data-driven design\u2014and event-driven architectures may help to addr\",\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-featured.gif\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-featured.gif\",\"width\":640,\"height\":360},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reducing Complexity of Software with Domain-Driven Design and Microservices\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/56ea20d6f280f7a442e89e5884b06fd8\",\"name\":\"Roger Strukhoff\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/roger_strukhoff_user_icon-150x150.jpg\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/roger_strukhoff_user_icon-150x150.jpg\",\"caption\":\"Roger Strukhoff\"},\"description\":\"Roger Strukhoff is Director of Research at Altoros. He also serves as Executive Director of the Tau Institute for Global ICT Research, Conference Chair of Cloud Expo and Things Expo, Co-Chair of the Big Data World Forum, and Open-Source Chair for the global DCD Converged conference series. He received his BA from Knox College, and conducted MBA studies at California State University\/East Bay. Previously in his career, he was VP of New Products at International Data Group and Director of Global Publications at TIBCO Software.\",\"url\":\"https:\/\/www.altoros.com\/blog\/author\/rstrukhoff\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Reducing Complexity of Software with Domain-Driven Design and Microservices | Altoros","description":"Complex software is here to stay, especially as cloud infrastructures continue to develop. Learn how splitting apps into smaller parts\u2014according to a domain-driven design\u2014may help to address the issue.","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.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/","og_locale":"en_US","og_type":"article","og_title":"Reducing Complexity of Software with Domain-Driven Design and Microservices | Altoros","og_description":"Complex software is here to stay, especially as cloud infrastructures continue to develop. Learn how splitting apps into smaller parts\u2014according to a data-driven design\u2014and event-driven architectures may help to addr","og_url":"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/","og_site_name":"Altoros","article_published_time":"2016-06-30T08:40:15+00:00","article_modified_time":"2024-09-27T00:32:43+00:00","og_image":[{"width":640,"height":360,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-featured.gif","type":"image\/gif"}],"author":"Roger Strukhoff","twitter_misc":{"Written by":"Roger Strukhoff","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/","url":"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/","name":"Reducing Complexity of Software with Domain-Driven Design and Microservices | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-featured.gif","datePublished":"2016-06-30T08:40:15+00:00","dateModified":"2024-09-27T00:32:43+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/56ea20d6f280f7a442e89e5884b06fd8"},"description":"Complex software is here to stay, especially as cloud infrastructures continue to develop. Learn how splitting apps into smaller parts\u2014according to a data-driven design\u2014and event-driven architectures may help to addr","breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-featured.gif","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/06\/Data-Driven-Design-Sergey-Matyukevich-featured.gif","width":640,"height":360},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/reducing-complexity-of-software-with-domain-driven-design-and-microservices\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Reducing Complexity of Software with Domain-Driven Design and Microservices"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/56ea20d6f280f7a442e89e5884b06fd8","name":"Roger Strukhoff","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/roger_strukhoff_user_icon-150x150.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/roger_strukhoff_user_icon-150x150.jpg","caption":"Roger Strukhoff"},"description":"Roger Strukhoff is Director of Research at Altoros. He also serves as Executive Director of the Tau Institute for Global ICT Research, Conference Chair of Cloud Expo and Things Expo, Co-Chair of the Big Data World Forum, and Open-Source Chair for the global DCD Converged conference series. He received his BA from Knox College, and conducted MBA studies at California State University\/East Bay. Previously in his career, he was VP of New Products at International Data Group and Director of Global Publications at TIBCO Software.","url":"https:\/\/www.altoros.com\/blog\/author\/rstrukhoff\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/14821","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=14821"}],"version-history":[{"count":70,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/14821\/revisions"}],"predecessor-version":[{"id":67923,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/14821\/revisions\/67923"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/14921"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=14821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=14821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=14821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}