{"id":695,"date":"2022-11-03T11:44:25","date_gmt":"2022-11-03T11:44:25","guid":{"rendered":"https:\/\/infobip.com\/developers\/?p=695"},"modified":"2023-09-11T14:33:16","modified_gmt":"2023-09-11T14:33:16","slug":"evolutionary-architecture-book-review","status":"publish","type":"post","link":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review","title":{"rendered":"Evolutionary Architecture\u00a0&#8211; book review"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Intro<\/strong><\/h2>\n\n\n\n<p>I\u2019m a fan of short practical IT books, packing relevant information into a concise digestible form, without losing readability (<a href=\"https:\/\/martinfowler.com\/books\/uml.html\" target=\"_blank\" rel=\"noreferrer noopener\">Martin Fowler\u2019s UML Distilled<\/a> is one fine example).&nbsp;Having recently purchased a physical copy of <a href=\"https:\/\/www.thoughtworks.com\/books\/building-evolutionary-architectures\" target=\"_blank\" rel=\"noreferrer noopener\">Building Evolutionary Architectures<\/a> it was a pleasant surprise to be delivered a slim book, at less than 200 pages.&nbsp;A flight from London to our company HQ offered the ideal opportunity to discover what it had to offer.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/infobip.com\/developers\/wp-content\/uploads\/2022\/11\/image.png\" alt=\"Building Evolutionary Architectures book cover\" class=\"wp-image-707\" style=\"width:470px;height:616px\" width=\"470\" height=\"616\" srcset=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/11\/image.png 734w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/11\/image-229x300.png 229w\" sizes=\"auto, (max-width: 470px) 100vw, 470px\" \/><\/figure>\n<\/div>\n\n\n<p>Building Evolutionary Architectures was published in Oct. 2017 and is the work of three employees (some now ex-employees) of ThoughtWorks; Neal Ford, Rebecca Parsons &amp; Patrick Kua.&nbsp;Despite being a collaborative effort the book remains fairly consistent in tone, albeit with some repetition, with each author contributing their own distinct perspective around a common core set of novel ideas.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Need<\/h2>\n\n\n\n<p>Evolutionary Architecture outlines a different approach to software architecture better suited to the Agile era.&nbsp;Rather than impose a design, or simply try to let it emerge, a guided approach is advocated instead. Some useful contextual understanding &amp; history of other approaches are also provided in the book.&nbsp;<\/p>\n\n\n\n<p>This history contrasts traditional approaches with the recommended evolutionary approach, establishing the underlying need. In addition, it explains why an evolutionary architecture approach was not previously possible.&nbsp; In the last millennium, prior to the prevalence of open-source options &amp; commodity hardware, software architects &amp; developers were much more constrained by business cost (e.g., of proprietary licensed vendor solutions &amp; expensive specialized hardware driving applications to share precious resources such as proprietary relational databases).<\/p>\n\n\n\n<p>At one architectural extreme lies the once-traditional approach of BDUF (Big Design Up Front).&nbsp;This takes the architectural metaphor borrowed from the building construction industry most literally,&nbsp; expecting software architects to create a near-complete initial blueprint that provides an accurate solution prediction for subsequent implementation work to then slavishly follow.&nbsp;<\/p>\n\n\n\n<p>However, for most software endeavors the need to support ongoing change (e.g. respond to business threats &amp; opportunities), makes this approach highly unreliable. Many of the predictions will simply be wrong since software development is a creative endeavor of design &amp; discovery.&nbsp; A number of significant challenges &amp; changes simply cannot be reliably envisaged from the outset (and the cost of trying to uncover them is prohibitive or a foolish quest, since they aren\u2019t static).<\/p>\n\n\n\n<p>BDUF offers a false sense of certainty which often quickly evaporates as reality impinges. Plus, the shortcomings of design choices imposed too early often become apparent late on, when they are difficult, costly, or untimely to reverse or amend.&nbsp;<\/p>\n\n\n\n<p>At the other extreme lies a complete lack of perceptible architecture, such as from a <a href=\"https:\/\/searchsoftwarequality.techtarget.com\/definition\/cowboy-coding\" target=\"_blank\" rel=\"noreferrer noopener\">\u201ccowboy (and\/or cowgirl?) coding\u201d<\/a> approach, that culminates in the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Big_ball_of_mud\" target=\"_blank\" rel=\"noreferrer noopener\">BBoM (Big Ball of Mud)<\/a> anti-pattern.&nbsp;Rampant coupling between software units (e.g. classes) &amp; data (e.g. via shared database tables) accumulates over time.&nbsp;Inexorably, this leads to a system that becomes harder to reason about &amp; change. <\/p>\n\n\n\n<p>Even small changes can have far-reaching ripples of (often unforeseen) impact throughout the system. Developers become reticent to make all but essential alterations as a consequence as fear of change sets in.<\/p>\n\n\n\n<p>Ultimately, this culminates in a brittle system, where change becomes actively avoided &amp; the softness of software becomes lost. Change becomes too expensive &amp; slow to accommodate efficiently. Rigidity replaces the initial flexibility and the business pays the cost in terms of loss of competitive edge.&nbsp;<\/p>\n\n\n\n<p>Both these extremes are detrimental to any business fundamentally underpinned by software, plus disheartening to the software teams that must contend with them.&nbsp;<\/p>\n\n\n\n<p>In between these contrasting approaches, Agile Manifesto\u2019s Principles mention architectural emergence.&nbsp; Specifically, principle #11 seem to advocate reliance on emergent design:&nbsp;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>The best architectures, requirements, and designs emerge from self-organizing teams.&nbsp;<\/p>\n<\/blockquote>\n\n\n\n<p>However, as author Neal Ford points out, if you accept the notion of architecture as part of the important &amp; hard to change choices, then you don\u2019t really want to rely purely on emergence as a driver for these.&nbsp; Delayed choices are pragmatic, due to the cone of uncertainty &amp; unknown unknowns, to reduce the early accumulation of hard-to-reverse choices.&nbsp;However, some choices are practically unavoidable initially (e.g. choice of programming language, frameworks\/libraries). Some skeletal outline from which to start is nearly unavoidable.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-19.png\" alt=\"\" class=\"wp-image-698\" style=\"width:535px;height:391px\" width=\"535\" height=\"391\" srcset=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-19.png 602w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-19-300x219.png 300w\" sizes=\"auto, (max-width: 535px) 100vw, 535px\" \/><\/figure>\n<\/div>\n\n\n<p>In most current software implementation scenarios this book advocates Evolutionary Architecture.&nbsp; This involves a guided selection of key architectural characteristics (e.g. good design, scalability, reliability), pertinent to the specific system under consideration, distinguishing this approach from the emergent alternative.<\/p>\n\n\n\n<p>Automated verification of these characteristics ensures their constant consideration &amp; protection during ongoing development, in contrast to imposing specific implementation choices upon development teams &amp; architectural governance from afar (without easy verification).&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Core Idea &#8211; Fitness Functions<\/strong>&nbsp;<\/h2>\n\n\n\n<p>At the heart of the book is the idea of using a suite of quantifiable tests to drive the evolution of a software system in a desirable direction.&nbsp;Furthermore, these tests protect those aspects from deterioration once set in place. The book dubs these fitness functions, in line with the evolutionary theme, borrowing more terminology from Biology.<\/p>\n\n\n\n<p>However, this is more akin to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Selective_breeding\" target=\"_blank\" rel=\"noreferrer noopener\">Artificial Selection \/ Selective Breeding<\/a> (e.g. dog breeding or farming selection of livestock &amp; crops over successive generations) rather than <a href=\"https:\/\/en.wikipedia.org\/wiki\/Natural_selection\" target=\"_blank\" rel=\"noreferrer noopener\">Natural Selection<\/a> (non-human guided e.g. via environmental factors such as changing habitat) with variation (via mutation).&nbsp;<\/p>\n\n\n\n<p>Architectural fitness functions can be applied systemwide via a variety of approaches, such as automated tests (unit, integration, functional, etc.), software development metrics (e.g. cycle time), contract tests (e.g. <a href=\"https:\/\/martinfowler.com\/articles\/consumerDrivenContracts.html\" target=\"_blank\" rel=\"noreferrer noopener\">Consumer-Driven Contracts for API<\/a>) and experiments running in production (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Chaos_engineering\" target=\"_blank\" rel=\"noreferrer noopener\">chaos engineering<\/a>).&nbsp;<\/p>\n\n\n\n<p>Different types of fitness functions are presented, covering four categories, as outlined in the diagram below:&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-17.png\" alt=\"\" class=\"wp-image-696\" style=\"width:852px;height:478px\" width=\"852\" height=\"478\" srcset=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-17.png 602w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-17-300x168.png 300w\" sizes=\"auto, (max-width: 852px) 100vw, 852px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Enablers<\/strong><\/h2>\n\n\n\n<p>Evolutionary architecture is enabled by a set of supporting existing practices:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Deployment pipelines&nbsp;<\/li>\n\n\n\n<li>The Inverse Conway Manoeuvre&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Appropriate coupling&nbsp;<\/li>\n\n\n\n<li>Bounded contexts&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>The ability to react to change requires frequent feedback. <a href=\"https:\/\/www.martinfowler.com\/bliki\/ContinuousDelivery.html\" target=\"_blank\" rel=\"noreferrer noopener\">Continuous delivery<\/a> (or alternatively continuous deployment) provides the opportunity for regular feedback via fitness functions within its deployment pipeline.&nbsp;Deployment pipelines provide the opportunity to \u2018slot in\u2019 an automated check via architectural fitness functions.<\/p>\n\n\n\n<p>For instance, automated tests to ensure cyclomatic complexity remains beneath a threshold, with this number gradually lowered to a desirable level, to incrementally reduce complexity as one measure of software quality.&nbsp;<\/p>\n\n\n\n<p>Alternatively legal checks for changes to open-source library licenses, with automated detection of changes (e.g. via a checksum alteration) providing alerts for manual inspection.&nbsp;A more extreme example of a continual holistic architectural fitness function is <a href=\"https:\/\/netflix.github.io\/chaosmonkey\/\" target=\"_blank\" rel=\"noreferrer noopener\">Netflix\u2019s Chaos Monkey<\/a> to drive resilience and fault tolerance from experiments performed in production environments.&nbsp;<\/p>\n\n\n\n<p>Other wider practices help enable appropriate coupling of software components.&nbsp;One way to avoid organization structure dictating system architecture is to instead intentionally structure teams around a desirable software architecture.<\/p>\n\n\n\n<p>ThoughtWorks have called this approach the Inverse Conway Manoeuvre. Cross-functional product teams, rather than project teams, are generally advocated here, specifically created around the desired architectural components or key customer-driven business processes.&nbsp;This encourages aligned autonomous teams, with few interdependencies, whose own team goals align with desirable business outcomes.<\/p>\n\n\n\n<p>I recommend another very short O\u2019Reilly book here, <a href=\"https:\/\/www.oreilly.com\/library\/view\/designing-autonomous-teams\/9781491994320\/\" target=\"_blank\" rel=\"noreferrer noopener\">Designing Autonomous Teams and Services<\/a>, which delves deeper into this emerging area of Socio-Technical Architecture.&nbsp;<\/p>\n\n\n\n<p>Thinking about relevant architectural elements in terms of deployable units is also encouraged. To work effectively the Evolutionary Architecture approach requires the possibility for guided incremental change.&nbsp; Unnecessary or exuberant coupling (such as between classes or shared data sources) inhibits evolvability due to the impact &amp; risk of changes. Excessive dependencies need to be tackled, e.g. tempered by modularisation (via libraries, layers, components &amp; services), to provide an opportunity for the evolutionary approach advocated to be applied.&nbsp;<\/p>\n\n\n\n<p>Beyond appropriate component-level coupling, functional cohesion is also desirable (e.g. deployable units change for the same type of business reason). Following the concept of Bounded Contexts from DDD (Domain-Driven Design) also aids architectural evolvability, by forming relevant grouping of software as deployable units that can then evolve independently, at different rates, targeting different desirable architectural characteristics (which otherwise may potentially conflict e.g. high performance &amp; extreme scalability.&nbsp; Or, to find the right trade-off where these must cohabit via gradual fine-tuning).&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Scientific Metaphors<\/strong><\/h2>\n\n\n\n<p>Heavy use of scientific metaphor continues beyond just the book\u2019s title into its content.&nbsp;<\/p>\n\n\n\n<p>Correlation with biological evolution is much weaker there than with <a href=\"https:\/\/en.wikipedia.org\/wiki\/Genetic_algorithm\" target=\"_blank\" rel=\"noreferrer noopener\">Genetic Algorithms<\/a>, for example, where fitness functions select from mutating populations of candidate solutions based on their applicability for a specific goal.&nbsp; In contrast, fitness functions as defined in this book do not choose between different potential solutions. In the Evolutionary Architecture case, we don\u2019t have the luxury of sufficient available business time or funding to explore the mutating generations that more closely model biological evolution.&nbsp;<\/p>\n\n\n\n<p>Rather than simulating the mutation with natural selection found in biological evolution, this book\u2019s fitness functions instead act as architectural acceptance criteria applied to a current snapshot of the system under development.&nbsp;<\/p>\n\n\n\n<p>Scientific metaphor becomes even more strained with the use of the term Quanta to express an independently deployable component. An architectural quantum is an independently deployable component with high functional cohesion e.g. microservices have small quanta compared to monoliths<em>.<\/em>&nbsp; <\/p>\n\n\n\n<p>Architects are advised to find the appropriate trade-off between architectural quanta &amp; their cost, with the right balance depending on the particular business context.&nbsp;Although a seemingly useful concept for comparing different architectural approaches &amp; how readily Evolutionary Architecture techniques can be applied to them, this label initially seems too forced to me &#8211; very loose in association with its appropriation from Physics, so it will be interesting to see whether it catches on.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Challenges to adoption &amp; success<\/strong>&nbsp;<\/h2>\n\n\n\n<p>The book is largely theoretical, providing an overview with justification and suggestions rather than lots of readily applicable examples.&nbsp;Relatively few practical scenarios are presented. <\/p>\n\n\n\n<p>Real-world challenges, such as approaches to convince a risk-averse business (e.g. of using Chaos Monkey-like approaches in production) are skimmed over or left to coverage elsewhere. Although the last chapter provides some guidance on putting things into practice the coverage is rather shallow.<\/p>\n\n\n\n<p>I was left wondering about overcoming common initial obstacles to adoption, such as inappropriate team structures or practices &#8211; although admittedly solutions to address these are likely found elsewhere. I also wondered about challenges to the success of the Evolutionary Architecture approach, such as potential misinterpretation leading to inadvertent alteration\/removal or contention in more complex cases of shared ownership of fitness functions.<\/p>\n\n\n\n<p>However, it is perhaps unfair to expect comprehensive coverage in an innovative area, plus maintain a nice slim volume.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>I found Building Evolutionary Architectures an engaging and thought-provoking read, synthesizing a persuasive narrative from current themes (e.g. <a href=\"https:\/\/www.infoq.com\/articles\/software-is-synthetic\/\" target=\"_blank\" rel=\"noreferrer noopener\">software\u2019s empirical trend<\/a>).&nbsp;<\/p>\n\n\n\n<p>I look forward to \u2018Evolutionary Architecture Applied\u2019 or a similar future cookbook that provides deeper practical detail on putting the innovative ideas covered in this book into action and offers best practice advice drawn from more widespread industry use.<\/p>\n\n\n\n<p>Find out more for yourself via the book or at <a href=\"http:\/\/evolutionaryarchitecture.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/evolutionaryarchitecture.com\/<\/a> .&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro I\u2019m a fan of short practical IT books, [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":697,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[28,254],"tags":[260],"coauthors":[133],"class_list":["post-695","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-post","category-engineering-practices","tag-architecture"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Evolutionary Architecture\u00a0- book review - Infobip Developers Hub<\/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.infobip.com\/developers\/blog\/evolutionary-architecture-book-review\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Evolutionary Architecture\u00a0- book review - Infobip Developers Hub\" \/>\n<meta property=\"og:description\" content=\"Intro I\u2019m a fan of short practical IT books, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review\" \/>\n<meta property=\"og:site_name\" content=\"Infobip Developers Hub\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/infobip\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-03T11:44:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-11T14:33:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-18.png\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"656\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Infobip Devs\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@InfobipDev\" \/>\n<meta name=\"twitter:site\" content=\"@InfobipDev\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Infobip Devs\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review\"},\"author\":{\"name\":\"Infobip Devs\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/e04a9012051f81b6a2f6976e156f6ce0\"},\"headline\":\"Evolutionary Architecture\u00a0&#8211; book review\",\"datePublished\":\"2022-11-03T11:44:25+00:00\",\"dateModified\":\"2023-09-11T14:33:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review\"},\"wordCount\":1886,\"publisher\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-18.png\",\"keywords\":[\"architecture\"],\"articleSection\":[\"Blog Post\",\"Engineering Practices\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review\",\"url\":\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review\",\"name\":\"Evolutionary Architecture\u00a0- book review - Infobip Developers Hub\",\"isPartOf\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-18.png\",\"datePublished\":\"2022-11-03T11:44:25+00:00\",\"dateModified\":\"2023-09-11T14:33:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#primaryimage\",\"url\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-18.png\",\"contentUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-18.png\",\"width\":500,\"height\":656,\"caption\":\"Building Evolutionary Architecture book cover\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.infobip.com\/developers\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Evolutionary Architecture\u00a0&#8211; book review\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#website\",\"url\":\"https:\/\/www.infobip.com\/developers\/\",\"name\":\"Infobip Developers Hub\",\"description\":\"Build meaningful customer relationships across any channel\",\"publisher\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.infobip.com\/developers\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#organization\",\"name\":\"Infobip Developers Hub\",\"url\":\"https:\/\/www.infobip.com\/developers\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png\",\"contentUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png\",\"width\":696,\"height\":696,\"caption\":\"Infobip Developers Hub\"},\"image\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/infobip\/\",\"https:\/\/x.com\/InfobipDev\",\"https:\/\/www.youtube.com\/channel\/UCUPSTy53VecI5GIir3J3ZbQ\",\"https:\/\/github.com\/infobip-community\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/e04a9012051f81b6a2f6976e156f6ce0\",\"name\":\"Infobip Devs\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/image\/f61078713800c4e479dce745cd206b82\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f29655934347a5aa15879f9af9ac1f05b87167e0f7ed4074a04132eaa9f631c4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f29655934347a5aa15879f9af9ac1f05b87167e0f7ed4074a04132eaa9f631c4?s=96&d=mm&r=g\",\"caption\":\"Infobip Devs\"},\"url\":\"https:\/\/www.infobip.com\/developers\/blog\/author\/infobip-devs\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Evolutionary Architecture\u00a0- book review - Infobip Developers Hub","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.infobip.com\/developers\/blog\/evolutionary-architecture-book-review","og_locale":"en_US","og_type":"article","og_title":"Evolutionary Architecture\u00a0- book review - Infobip Developers Hub","og_description":"Intro I\u2019m a fan of short practical IT books, [&hellip;]","og_url":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review","og_site_name":"Infobip Developers Hub","article_publisher":"https:\/\/www.facebook.com\/infobip\/","article_published_time":"2022-11-03T11:44:25+00:00","article_modified_time":"2023-09-11T14:33:16+00:00","og_image":[{"width":500,"height":656,"url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-18.png","type":"image\/png"}],"author":"Infobip Devs","twitter_card":"summary_large_image","twitter_creator":"@InfobipDev","twitter_site":"@InfobipDev","twitter_misc":{"Written by":"Infobip Devs","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#article","isPartOf":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review"},"author":{"name":"Infobip Devs","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/e04a9012051f81b6a2f6976e156f6ce0"},"headline":"Evolutionary Architecture\u00a0&#8211; book review","datePublished":"2022-11-03T11:44:25+00:00","dateModified":"2023-09-11T14:33:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review"},"wordCount":1886,"publisher":{"@id":"https:\/\/www.infobip.com\/developers\/#organization"},"image":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#primaryimage"},"thumbnailUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-18.png","keywords":["architecture"],"articleSection":["Blog Post","Engineering Practices"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review","url":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review","name":"Evolutionary Architecture\u00a0- book review - Infobip Developers Hub","isPartOf":{"@id":"https:\/\/www.infobip.com\/developers\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#primaryimage"},"image":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#primaryimage"},"thumbnailUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-18.png","datePublished":"2022-11-03T11:44:25+00:00","dateModified":"2023-09-11T14:33:16+00:00","breadcrumb":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#primaryimage","url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-18.png","contentUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2022\/10\/image-18.png","width":500,"height":656,"caption":"Building Evolutionary Architecture book cover"},{"@type":"BreadcrumbList","@id":"https:\/\/www.infobip.com\/developers\/blog\/evolutionary-architecture-book-review#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.infobip.com\/developers\/"},{"@type":"ListItem","position":2,"name":"Evolutionary Architecture\u00a0&#8211; book review"}]},{"@type":"WebSite","@id":"https:\/\/www.infobip.com\/developers\/#website","url":"https:\/\/www.infobip.com\/developers\/","name":"Infobip Developers Hub","description":"Build meaningful customer relationships across any channel","publisher":{"@id":"https:\/\/www.infobip.com\/developers\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.infobip.com\/developers\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.infobip.com\/developers\/#organization","name":"Infobip Developers Hub","url":"https:\/\/www.infobip.com\/developers\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/","url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png","contentUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png","width":696,"height":696,"caption":"Infobip Developers Hub"},"image":{"@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/infobip\/","https:\/\/x.com\/InfobipDev","https:\/\/www.youtube.com\/channel\/UCUPSTy53VecI5GIir3J3ZbQ","https:\/\/github.com\/infobip-community"]},{"@type":"Person","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/e04a9012051f81b6a2f6976e156f6ce0","name":"Infobip Devs","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/image\/f61078713800c4e479dce745cd206b82","url":"https:\/\/secure.gravatar.com\/avatar\/f29655934347a5aa15879f9af9ac1f05b87167e0f7ed4074a04132eaa9f631c4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f29655934347a5aa15879f9af9ac1f05b87167e0f7ed4074a04132eaa9f631c4?s=96&d=mm&r=g","caption":"Infobip Devs"},"url":"https:\/\/www.infobip.com\/developers\/blog\/author\/infobip-devs"}]}},"_links":{"self":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/comments?post=695"}],"version-history":[{"count":9,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/695\/revisions"}],"predecessor-version":[{"id":2533,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/695\/revisions\/2533"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/media\/697"}],"wp:attachment":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/media?parent=695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/categories?post=695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/tags?post=695"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/coauthors?post=695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}