<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Incremental on Software Engineering Thoughts</title><link>https://software.skipoles.co.uk/tags/incremental/</link><description>Recent content in Incremental on Software Engineering Thoughts</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 29 Jan 2023 19:47:54 +0000</lastBuildDate><atom:link href="https://software.skipoles.co.uk/tags/incremental/index.xml" rel="self" type="application/rss+xml"/><item><title>Incremental Architecture</title><link>https://software.skipoles.co.uk/posts/incremental-architecture/</link><pubDate>Sun, 29 Jan 2023 19:47:54 +0000</pubDate><guid>https://software.skipoles.co.uk/posts/incremental-architecture/</guid><description>&lt;p&gt;I have been having some interesting discussions with colleagues around evolving architecture and adding new
requirements in an agile environment. The discussion raised some interesting points that I felt worthy
of a blog post exploration.&lt;/p&gt;
&lt;h2 id="background"&gt;Background&lt;a class="anchorjs-link" href="#background"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Imagine a simple system comprised of two main components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Component A&lt;/strong&gt; is the main component containing the key business logic. In order for it to
do its job it needs to interact with component X. Mostly it needs to retrieve activity status
from X, but it can also initiate a new activity from time to time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Component X&lt;/strong&gt; is a legacy system outside of our control. It has a number of peculiarities
that make it challenging to integrate with. These include:
&lt;ul&gt;
&lt;li&gt;Legacy format API payloads that aren&amp;rsquo;t mapped to a domain model&lt;/li&gt;
&lt;li&gt;Payloads that might not always be backwards compatible&lt;/li&gt;
&lt;li&gt;Release cadences that aren&amp;rsquo;t related to those of component A&lt;/li&gt;
&lt;li&gt;Periods of scheduled non-availability where some requests cannot be accepted and must be retried later&lt;/li&gt;
&lt;li&gt;Performance constraints requiring some throttling of requests&lt;/li&gt;
&lt;li&gt;High latency on some operations&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Given the challenges of interfacing with component X, the team building the integration made a
sensible decision and decided
to keep all the complexity outside of the main component. Instead they added a new microservice,
&lt;strong&gt;Component B&lt;/strong&gt;. This component implements an adapter and anti-corruption layer that
deals with, and abstracts away, all the eccentricities of X.&lt;/p&gt;</description></item></channel></rss>