<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Backendhance</title><link>https://backendhance.com/en/blog/category/software-architektur/</link><description>Recent content Backendhance</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Fri, 23 May 2025 07:58:54 +0200</lastBuildDate><atom:link href="https://backendhance.com/en/blog/category/software-architektur/index.xml" rel="self" type="application/rss+xml"/><item><title>Finally Good Architecture Documentation</title><link>https://backendhance.com/en/blog/2025/architecture-documentation/</link><pubDate>Fri, 23 May 2025 07:58:54 +0200</pubDate><author/><guid>https://backendhance.com/en/blog/2025/architecture-documentation/</guid><description>&lt;p>When developing complex software systems, teams often go through a documentation cycle that follows an almost predictable pattern. The initial euphoria is characterized by ambitious goals: comprehensive documentation should emerge that illuminates all aspects of the system and makes every decision traceable. With fresh enthusiasm, tools are evaluated, templates created, and initial documentation written.&lt;/p>
&lt;p>But as the project progresses, neglect creeps in. Development pressure increases, features take priority, and documentation becomes a &amp;ldquo;nice-to-have&amp;rdquo; that will be addressed &amp;ldquo;later.&amp;rdquo; This phase marks the critical turning point where the foundation is laid for the long-term success or failure of the documentation strategy. This article shows how to prevent a very time-consuming failure.&lt;/p></description></item><item><title>Anti-Pattern: The Perfect Software Architecture</title><link>https://backendhance.com/en/blog/2024/the-perfect-softwarearchitecture/</link><pubDate>Wed, 21 Aug 2024 16:14:55 +0200</pubDate><author/><guid>https://backendhance.com/en/blog/2024/the-perfect-softwarearchitecture/</guid><description>&lt;p>As a young developer, I was naive and ambitious. I searched for the perfect software architecture, an approach that I could impose on any problem, regardless of industry, scaling requirements, security measures, or users. If you could solve this one problem abstractly, then surely this architecture could be applied everywhere. Right?&lt;/p>
&lt;div class="alert d-flex alert-info" role="alert">
&lt;i class="bx bx-info-circle lead me-3">&lt;/i>
&lt;div>
This article first appeared in August 2024 as a &lt;a href="https://www.golem.de/news/anti-pattern-die-perfekte-softwarearchitektur-2408-187665.html"target="_blank" rel="noopener noreferrer">premium article on Golem.de&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
.
&lt;/div>
&lt;/div>
&lt;p>This article explains why the pursuit of the perfect software architecture is an illusion. Current trends and fads often dictate universal solutions that, however, lack the necessary flexibility to survive in the market. This is especially relevant for technical leaders and decision-makers in SMBs. But how can you design an architecture that is flexible enough to adapt to changing requirements?&lt;/p></description></item><item><title>Surprising Architecture</title><link>https://backendhance.com/en/blog/2024/surprising-architecture/</link><pubDate>Thu, 20 Jun 2024 00:00:00 +0000</pubDate><author/><guid>https://backendhance.com/en/blog/2024/surprising-architecture/</guid><description>&lt;p>Hi,&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;RCoffee [an internal tool for content production] accesses the test servers via SSH and displays the Tomcat logs&amp;rdquo;&lt;/p>&lt;/blockquote>
&lt;p>&lt;em>Wow.&lt;/em> That was surprising.&lt;/p>
&lt;p>I have been working with this client for a year now.&lt;/p>
&lt;p>The application is the market leader in its field, and the current version was developed over 10 years ago.&lt;/p>
&lt;p>A lot has accumulated, of course. And when I am hired, the technical debt is usually very large.&lt;/p></description></item><item><title>Too Big, Too Small, Just Right</title><link>https://backendhance.com/en/blog/2024/too-big-too-small-just-right/</link><pubDate>Tue, 11 Jun 2024 00:00:00 +0000</pubDate><author/><guid>https://backendhance.com/en/blog/2024/too-big-too-small-just-right/</guid><description>&lt;p>Hi,&lt;/p>
&lt;p>An old developer joke:&lt;/p>
&lt;blockquote>
&lt;p>There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors. &amp;ndash; &lt;a href="https://twitter.com/secretGeek/status/7269997868"target="_blank" rel="noopener noreferrer">Leon Bambrick&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
&lt;/p>&lt;/blockquote>
&lt;p>Or another version:&lt;/p>
&lt;blockquote>
&lt;p>There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery &amp;ndash; &lt;a href="https://twitter.com/mathiasverraes/status/632260618599403520"target="_blank" rel="noopener noreferrer">Mathias Verraes&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
&lt;/p>&lt;/blockquote>
&lt;p>And there are many more:&lt;/p>
&lt;blockquote>
&lt;p>There are so many variations on the &amp;ldquo;there are only two hard problems in computer programming&amp;hellip;&amp;rdquo; joke that I&amp;rsquo;m starting to suspect that programming isn&amp;rsquo;t actually very easy. &amp;ndash; &lt;a href="https://twitter.com/natpryce/status/1396905452588474376"target="_blank" rel="noopener noreferrer">Nat Pryce&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
&lt;/p></description></item><item><title>How to Get Rid of Microservices?</title><link>https://backendhance.com/en/blog/2024/how-to-get-rid-of-microservices/</link><pubDate>Thu, 23 May 2024 11:05:12 +0200</pubDate><author/><guid>https://backendhance.com/en/blog/2024/how-to-get-rid-of-microservices/</guid><description>&lt;p>In recent years, numerous medium-sized companies have tried the much-touted microservices and found that they are less lightweight than their name suggests – &lt;a href="https://backendhance.com/en/blog/2024/overengineering-in-sme/">Microservices in SMEs are often overengineering&lt;/a>
. Now, they need to be deconstructed and transitioned to a more pragmatic architecture. We explain how this can be achieved.&lt;/p>
&lt;div class="alert d-flex alert-info" role="alert">
&lt;i class="bx bx-info-circle lead me-3">&lt;/i>
&lt;div>
This article first appeared in April 2024 as a &lt;a href="https://www.golem.de/news/overengineering-how-to-get-rid-of-microservices-2404-184487.html"target="_blank" rel="noopener noreferrer">premium article on Golem.de&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
.
&lt;/div>
&lt;/div>
&lt;p>Don&amp;rsquo;t worry: &lt;strong>The deconstruction and transformation of the architecture is not only labor-intensive but also an opportunity&lt;/strong>. In software development, there is no one-size-fits-all solution; the appropriate architecture for the software is chosen based on the software&amp;rsquo;s requirements. This involves gathering the requirements of all stakeholders, which is often not adequately done in many projects. An architectural transformation allows for this to be rectified and reviewed.&lt;/p></description></item><item><title>SMEs, Steer Clear of Microservices!</title><link>https://backendhance.com/en/blog/2024/overengineering-in-sme/</link><pubDate>Mon, 15 Apr 2024 08:43:56 +0200</pubDate><author/><guid>https://backendhance.com/en/blog/2024/overengineering-in-sme/</guid><description>&lt;p>For more than a decade, hardly a conference goes by without the topic of microservices. Industry magazines publish numerous articles on the subject, and external consulting firms sell workshops, actively advise on switching to a microservice architecture, and tout its benefits. For many small and medium-sized enterprises (SME), this sounds attractive—what helps the big players so much can&amp;rsquo;t hurt the smaller ones, right? This is a dangerous misconception.&lt;/p>
&lt;div class="alert d-flex alert-info" role="alert">
&lt;i class="bx bx-info-circle lead me-3">&lt;/i>
&lt;div>
This article was first published in German as a &lt;a href="https://www.golem.de/news/overengineering-mittelstand-finger-weg-von-microservices-2403-182712.html"target="_blank" rel="noopener noreferrer">premium article on Golem.de&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
in March 2024.
&lt;/div>
&lt;/div>
&lt;p>&lt;strong>Overengineering&lt;/strong> — the use of unnecessarily complex software — &lt;strong>costs SMEs&lt;/strong> not just &lt;strong>a lot of money and time&lt;/strong>, it also deprives them of their most significant competitive edge against large corporations.&lt;/p></description></item><item><title>The Cost of Accidental Complexity in Development</title><link>https://backendhance.com/en/blog/2024/accidental-complexity/</link><pubDate>Fri, 22 Mar 2024 14:00:00 +0100</pubDate><author/><guid>https://backendhance.com/en/blog/2024/accidental-complexity/</guid><description>&lt;p>In the beginning, IT teams often implement new features quickly, but over time, development tends to slow down. Accidental Complexity is a frequent culprit – this article explains its origins and how it can be mitigated.&lt;/p>
&lt;div class="alert d-flex alert-info" role="alert">
&lt;i class="bx bx-info-circle lead me-3">&lt;/i>
&lt;div>
This article was originally published in German as a &lt;a href="https://www.golem.de/news/technische-schulden-was-accidental-complexity-in-der-entwicklung-kostet-2306-174827.html"target="_blank" rel="noopener noreferrer">premium article on Golem.de&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
in June 2023.
&lt;/div>
&lt;/div>
&lt;p>It&amp;rsquo;s no secret that systems grow more complex over time, leading to longer development cycles. This is inevitable when dealing with inherently complex problems, known as &lt;strong>Essential Complexity&lt;/strong>. However, in many cases, the implementation of a feature becomes more complex than necessary. Two months for a feature that seemed straightforward? That&amp;rsquo;s a classic case of Accidental Complexity. It&amp;rsquo;s frustrating, costly, and avoidable, as we&amp;rsquo;ll show with some practical examples.&lt;/p></description></item><item><title>My War on Kubernetes</title><link>https://backendhance.com/en/blog/2024/my-war-on-kubernetes/</link><pubDate>Tue, 05 Mar 2024 00:00:00 +0000</pubDate><author/><guid>https://backendhance.com/en/blog/2024/my-war-on-kubernetes/</guid><description>&lt;p>Hi,&lt;/p>
&lt;p>I need to make a confession right off the bat: I&amp;rsquo;m at odds with Kubernetes.&lt;/p>
&lt;p>It&amp;rsquo;s not Kubernetes&amp;rsquo;s fault, though. It&amp;rsquo;s my projects. Or rather, the teams I&amp;rsquo;m part of.&lt;/p>
&lt;p>These are teams with a maximum of 30 software developers, plus a few business people and designers on top. But there aren&amp;rsquo;t that many developers.&lt;/p>
&lt;p>&lt;strong>These teams don&amp;rsquo;t need Kubernetes!&lt;/strong>&lt;/p>
&lt;p>No. To put it more bluntly: These teams can&amp;rsquo;t handle Kubernetes!&lt;/p></description></item><item><title>Another Microservice Desaster</title><link>https://backendhance.com/en/blog/2023/another-microservice-desaster/</link><pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate><author/><guid>https://backendhance.com/en/blog/2023/another-microservice-desaster/</guid><description>&lt;p>Hi,&lt;/p>
&lt;h1 id="microservice-architecture">
&lt;a href="#microservice-architecture" class="anchor">Microservice Architecture&lt;/a>
&lt;/h1>
&lt;p>This buzzword has become a trigger for me. I have written about it often.&lt;/p>
&lt;p>Earlier this year, my article &lt;a href="https://backendhance.com/en/blog/2022/microservices/">Microservices are a Big Ball of Mud&lt;/a>
trended on &lt;a href="https://news.ycombinator.com/item?id=34329656"target="_blank" rel="noopener noreferrer">Hacker News&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
&lt;/p>
&lt;p>The 343 comments on my article clearly show how heated this topic can be 😉 Of course, the rational view on it is different from what I presented in that article. It ALWAYS depends on the context. &lt;a href="https://www.appcontinuum.io/"target="_blank" rel="noopener noreferrer">AppContinuum&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
is an excellent paper offering a reflective view on the subject.&lt;/p></description></item><item><title>The Microwave With Feature Creep</title><link>https://backendhance.com/en/blog/2023/the-microwave-with-feature-creep/</link><pubDate>Thu, 31 Aug 2023 00:00:00 +0000</pubDate><author/><guid>https://backendhance.com/en/blog/2023/the-microwave-with-feature-creep/</guid><description>&lt;p>Hi,&lt;/p>
&lt;p>&lt;a href="https://backendhance.com/en/blog/2023/what-sound-does-your-microwave/">My microwave was broken.&lt;/a>
&lt;/p>
&lt;p>So: I need a new one.&lt;/p>
&lt;p>However, I have a little quirk when it comes to buying anything that&amp;rsquo;s not perishable. I want to avoid making a bad purchase. &lt;strong>I&amp;rsquo;d rather spend more money once than have to buy a new one in two years.&lt;/strong>&lt;/p>
&lt;p>Here, I have to be careful not to fall down a rabbit hole. I can spend hours reading reviews.&lt;/p>
&lt;p>But what do I even want to compare?&lt;/p></description></item><item><title>State Is the Root of All Evil</title><link>https://backendhance.com/en/blog/2023/state-is-the-root-of-all-evil/</link><pubDate>Thu, 17 Aug 2023 00:00:00 +0000</pubDate><author/><guid>https://backendhance.com/en/blog/2023/state-is-the-root-of-all-evil/</guid><description>&lt;p>Hi,&lt;/p>
&lt;h2 id="what-distinguishes-an-application-from-a-mathematical-function">
&lt;a href="#what-distinguishes-an-application-from-a-mathematical-function" class="anchor">What distinguishes an application from a (mathematical) function?&lt;/a>
&lt;/h2>
&lt;p>A function takes an input &lt;code>x&lt;/code> and transforms it into an output. If &lt;code>f(x) = 2 * x&lt;/code>, then the result of this function for the input of any x is always the same.&lt;/p>
&lt;p>There are no side effects. We call this behavior &lt;em>stateless.&lt;/em>&lt;/p>
&lt;p>But what does this have to do with the question from the beginning? An application goes beyond this. (Almost) every application must work with state. As soon as we have I/O operations in our system, we inherently have state. And often a method call, with the same input, can yield different results at different times. And this is also unavoidable and is in the nature of the task we want to solve.&lt;/p></description></item><item><title>Sliced Onion Architecture</title><link>https://backendhance.com/en/blog/2023/sliced-onion-architecture/</link><pubDate>Thu, 03 Aug 2023 00:00:00 +0000</pubDate><author/><guid>https://backendhance.com/en/blog/2023/sliced-onion-architecture/</guid><description>&lt;p>Hi,&lt;/p>
&lt;p>A week ago, &lt;a href="https://twitter.com/odrotbohm/"target="_blank" rel="noopener noreferrer">Oliver Drotbohm&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
published an expanded idea of the Onion Architecture: &lt;a href="http://www.odrotbohm.de/2023/07/sliced-onion-architecture/"target="_blank" rel="noopener noreferrer">The Sliced Onion Architecture&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
.&lt;/p>
&lt;p>Most software developers are familiar with &lt;a href="https://alistair.cockburn.us/hexagonal-architecture/"target="_blank" rel="noopener noreferrer">Hexagonal Architecture&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
and its extension, &lt;a href="https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/"target="_blank" rel="noopener noreferrer">the Onion Architecture&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
. The idea (simplified): One decouples their business code from infrastructure code using adapters.&lt;/p>
&lt;p>This makes it less likely to create the &lt;a href="https://de.wikipedia.org/wiki/Big_Ball_of_Mud"target="_blank" rel="noopener noreferrer">&amp;ldquo;Big Ball of Mud&amp;rdquo;&lt;i class="bx bx-link-external">&lt;/i>&lt;/a>
.&lt;/p>
&lt;p>What do I see in practice?&lt;/p>
&lt;p>Most developers have understood that it&amp;rsquo;s a good idea not to mix business code with infrastructure code.&lt;/p></description></item><item><title>Double-Entry Bookkeeping</title><link>https://backendhance.com/en/blog/2023/double-entry-bookkeeping/</link><pubDate>Thu, 13 Jul 2023 00:00:00 +0000</pubDate><author/><guid>https://backendhance.com/en/blog/2023/double-entry-bookkeeping/</guid><description>&lt;p>Hi,&lt;/p>
&lt;p>An error in accounting can be costly. Especially in large companies, where there are many transactions, it is easy to overlook one.&lt;/p>
&lt;p>And when that happens, I might not even notice it. Perhaps the company is doing much better than the books indicate? Or maybe it&amp;rsquo;s actually unprofitable?&lt;/p>
&lt;p>Merchants in the 13th century recognized the problem. A system had to be found that would make errors less likely. They invented double-entry bookkeeping.&lt;/p></description></item><item><title>Microservices are a Big Ball of Mud</title><link>https://backendhance.com/en/blog/2022/microservices/</link><pubDate>Thu, 28 Jul 2022 00:00:00 +0000</pubDate><author/><guid>https://backendhance.com/en/blog/2022/microservices/</guid><description>&lt;p>Over the past years I attended hundreds of interviews. Many candidates proudly told tales on how they develop their projects with a microservice architecture. Often &lt;em>(I don&amp;rsquo;t want to say &amp;ldquo;always&amp;rdquo;, but from my memory I think it actually is &amp;ldquo;always&amp;rdquo;)&lt;/em> it does not require many questions to see that they used a rocket launcher to kill a mouse. &lt;strong>Microservices are hard&lt;/strong>. Everyone who experienced the pain of operating such an architecture can relate to it. The complexity kills you at one point or the other. You already had to do multiple refactorings of your architecture - because your domains didn&amp;rsquo;t work out. I wonder - why is this architecture so appealing to developers? And then I remember why I found them appealing 10 years ago.&lt;/p></description></item></channel></rss>