<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Architecture on Simple Enough Blog</title><link>https://blog-dev.simpleenough.net/tags/architecture/</link><description>Recent content in Architecture on Simple Enough Blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 05 Mar 2026 17:52:00 +0100</lastBuildDate><atom:link href="https://blog-dev.simpleenough.net/tags/architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>How to create a security group that allows only traffic coming from CloudFront?</title><link>https://blog-dev.simpleenough.net/blog/gs_cloudfront/</link><pubDate>Thu, 05 Mar 2026 17:52:00 +0100</pubDate><guid>https://blog-dev.simpleenough.net/blog/gs_cloudfront/</guid><description>&lt;h1 id="how-to-create-a-security-group-that-allows-only-traffic-coming-from-cloudfront" class="heading">How to create a security group that allows only traffic coming from CloudFront?&lt;a href="#how-to-create-a-security-group-that-allows-only-traffic-coming-from-cloudfront" aria-labelledby="how-to-create-a-security-group-that-allows-only-traffic-coming-from-cloudfront">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h1>




&lt;h2 id="why-this-question-keeps-coming-back" class="heading">Why this question keeps coming back&lt;a href="#why-this-question-keeps-coming-back" aria-labelledby="why-this-question-keeps-coming-back">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h2>
&lt;p>In the AWS world, some questions come up again and again.&lt;br>
Not because they are poorly phrased, but because they point to a &lt;strong>real friction between security, networking, and application architecture&lt;/strong>.&lt;/p></description></item><item><title>ADR (Architecture Decision Record): documenting decisions that matter</title><link>https://blog-dev.simpleenough.net/blog/adr/</link><pubDate>Mon, 23 Feb 2026 11:00:00 +0100</pubDate><guid>https://blog-dev.simpleenough.net/blog/adr/</guid><description>&lt;p>Engineering teams spend a lot of time discussing, arbitrating, choosing… and then forgetting &lt;em>why&lt;/em> they made certain decisions.&lt;br>
The outcome is familiar:&lt;/p>
&lt;ul>
&lt;li>the same debates come back every three months,&lt;/li>
&lt;li>decisions get challenged without the original context,&lt;/li>
&lt;li>onboarding depends on “the people who know,”&lt;/li>
&lt;li>and unnecessary migrations are born from a simple loss of memory.&lt;/li>
&lt;/ul>
&lt;p>An &lt;strong>ADR (Architecture Decision Record)&lt;/strong> exists to avoid that. It’s not a “big architecture doc,” nor a requirements spec: it’s a &lt;strong>short note&lt;/strong> that captures an important decision, with just enough context to keep it understandable and reusable.&lt;/p></description></item><item><title>AWS multi-accounts: architectural solution or disguised organizational debt?</title><link>https://blog-dev.simpleenough.net/blog/multiaccounts_aws/</link><pubDate>Wed, 18 Feb 2026 17:30:00 +0100</pubDate><guid>https://blog-dev.simpleenough.net/blog/multiaccounts_aws/</guid><description>&lt;h2 id="i-introduction" class="heading">I. Introduction&lt;a href="#i-introduction" aria-labelledby="i-introduction">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h2>
&lt;p>Creating multiple AWS accounts is now widely presented as a &lt;strong>near-universal best practice&lt;/strong>.&lt;br>
It is often introduced through simple, console-oriented tutorials that give the impression that the problem boils down to a few clicks.&lt;/p>
&lt;p>This view is misleading.&lt;/p>
&lt;p>&lt;strong>Multi-account&lt;/strong> is not an implementation detail, but a &lt;strong>fundamental architectural choice&lt;/strong>.&lt;br>
It directly impacts:&lt;/p>
&lt;ul>
&lt;li>how teams work,&lt;/li>
&lt;li>how security is enforced,&lt;/li>
&lt;li>cost visibility,&lt;/li>
&lt;li>the ability to automate,&lt;/li>
&lt;li>and organizational resilience to human error.&lt;/li>
&lt;/ul>
&lt;p>When misunderstood, it creates &lt;strong>organizational debt&lt;/strong> just as costly as traditional technical debt.&lt;/p></description></item><item><title>Entering the Cloud: The Gates of Hell</title><link>https://blog-dev.simpleenough.net/blog/hell/</link><pubDate>Wed, 04 Feb 2026 09:10:00 +0100</pubDate><guid>https://blog-dev.simpleenough.net/blog/hell/</guid><description>&lt;p>Entering the cloud is rarely experienced as a simple infrastructure change.&lt;br>
For many organizations, it is a brutal—almost violent—break
with their habits, tools, and mental models.&lt;/p>
&lt;p>What was supposed to bring simplicity instead reveals a complexity
that had long been hidden.&lt;br>
And this complexity is not only technical.&lt;/p>
&lt;hr>




&lt;h2 id="i-the-call-of-the-cloud" class="heading">I. The Call of the Cloud&lt;a href="#i-the-call-of-the-cloud" aria-labelledby="i-the-call-of-the-cloud">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h2>
&lt;p>The cloud always begins with a seductive promise.&lt;/p></description></item><item><title>Latency: Understanding, Perceiving, and Mastering an Invisible Delay</title><link>https://blog-dev.simpleenough.net/blog/latency/</link><pubDate>Wed, 28 Jan 2026 09:00:00 +0100</pubDate><guid>https://blog-dev.simpleenough.net/blog/latency/</guid><description>&lt;p>Latency is one of those ubiquitous terms in computing, often used to explain a negative feeling — &lt;em>“it lags”&lt;/em>, &lt;em>“it’s slow”&lt;/em> — without its real meaning being clearly understood.&lt;br>
Yet latency is neither a bug nor a simple performance issue: it is a &lt;strong>structural constraint&lt;/strong> of modern computer systems.&lt;/p>
&lt;p>This article offers a comprehensive view of latency:&lt;/p>
&lt;ul>
&lt;li>what it is from a &lt;strong>general perspective&lt;/strong>,&lt;/li>
&lt;li>its &lt;strong>technical definition&lt;/strong>,&lt;/li>
&lt;li>how it is &lt;strong>perceived by users&lt;/strong>,&lt;/li>
&lt;li>the &lt;strong>trade-offs&lt;/strong> it imposes,&lt;/li>
&lt;li>and above all, &lt;strong>how to master it architecturally&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;hr>




&lt;h2 id="i-what-is-latency" class="heading">I. What Is Latency?&lt;a href="#i-what-is-latency" aria-labelledby="i-what-is-latency">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h2>




&lt;h3 id="1-general-definition" class="heading">1. General definition&lt;a href="#1-general-definition" aria-labelledby="1-general-definition">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h3>
&lt;p>In its simplest sense, &lt;strong>latency&lt;/strong> refers to the &lt;strong>waiting time between an action and the system’s first reaction&lt;/strong>.&lt;/p></description></item><item><title>Test-Driven Infrastructure: Applying TDD to Infrastructure as Code</title><link>https://blog-dev.simpleenough.net/blog/infratdd/</link><pubDate>Wed, 14 Jan 2026 13:45:30 +0200</pubDate><guid>https://blog-dev.simpleenough.net/blog/infratdd/</guid><description>&lt;h1 id="test-driven-infrastructure" class="heading">Test-Driven Infrastructure&lt;a href="#test-driven-infrastructure" aria-labelledby="test-driven-infrastructure">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h1>




&lt;h2 id="applying-tdd-to-infrastructure-as-code" class="heading">Applying TDD to Infrastructure as Code&lt;a href="#applying-tdd-to-infrastructure-as-code" aria-labelledby="applying-tdd-to-infrastructure-as-code">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h2>
&lt;p>&lt;strong>Test-Driven Development (TDD)&lt;/strong> is now well established on the application side.&lt;br>
However, when it comes to &lt;strong>infrastructure&lt;/strong>, many still consider TDD unnecessary, too complex, or unsuitable.&lt;/p>
&lt;p>That is a mistake.&lt;/p>
&lt;p>&lt;strong>TDD applied to infrastructure&lt;/strong> already exists, often without being named as such. When properly understood, it becomes a major lever for &lt;strong>securing, structuring, and evolving a cloud platform&lt;/strong>.&lt;/p></description></item><item><title>“It’s slow”, “it lags”, “it bugs”: but in the end, what does it really mean?</title><link>https://blog-dev.simpleenough.net/blog/cabug/</link><pubDate>Tue, 30 Dec 2025 10:00:00 +0100</pubDate><guid>https://blog-dev.simpleenough.net/blog/cabug/</guid><description>&lt;h2 id="introduction" class="heading">Introduction&lt;a href="#introduction" aria-labelledby="introduction">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h2>
&lt;p>In a family, at work, or within a technical team, it is very common to hear: &lt;strong>“it’s slow”&lt;/strong>, &lt;strong>“it lags”&lt;/strong>, or &lt;strong>“it bugs”&lt;/strong>. These expressions are often used interchangeably… &lt;strong>wrongly&lt;/strong>. They mix together problems that actually have nothing to do with each other.&lt;/p>
&lt;p>Understanding the difference between these three situations makes it possible to &lt;strong>explain what is happening more clearly&lt;/strong>, to &lt;strong>react more quickly&lt;/strong>, and above all to &lt;strong>avoid bad solutions&lt;/strong>. A performance issue is not solved like a bug, and a bug never disappears just because the machine has been made more powerful.&lt;/p></description></item><item><title>Using Constants in TDD with Go</title><link>https://blog-dev.simpleenough.net/blog/consttdd/</link><pubDate>Tue, 23 Dec 2025 10:08:49 +0200</pubDate><guid>https://blog-dev.simpleenough.net/blog/consttdd/</guid><description>&lt;h2 id="best-practices-pitfalls-and-design-signals" class="heading">Best Practices, Pitfalls, and Design Signals&lt;a href="#best-practices-pitfalls-and-design-signals" aria-labelledby="best-practices-pitfalls-and-design-signals">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h2>
&lt;p>&lt;strong>Test-Driven Development (TDD)&lt;/strong> is not only about writing tests.&lt;br>
Its primary purpose is to &lt;strong>design software&lt;/strong>.&lt;/p>
&lt;p>In Go, the use of &lt;strong>constants&lt;/strong> is often misunderstood in TDD:&lt;/p>
&lt;ul>
&lt;li>should they be exposed?&lt;/li>
&lt;li>tested?&lt;/li>
&lt;li>injected?&lt;/li>
&lt;li>avoided?&lt;/li>
&lt;/ul>
&lt;p>This article proposes a &lt;strong>pragmatic and idiomatic Go approach&lt;/strong>, based on real-world experience, to understand &lt;strong>when a constant represents good design&lt;/strong>… and &lt;strong>when it hides a deeper problem&lt;/strong>.&lt;/p></description></item><item><title>Interfaces, Functions and Modules in Go: Structuring Your Code for TDD Without Adding Unnecessary Complexity</title><link>https://blog-dev.simpleenough.net/blog/go-tdd-interfaces-functions/</link><pubDate>Mon, 15 Dec 2025 10:08:49 +0200</pubDate><guid>https://blog-dev.simpleenough.net/blog/go-tdd-interfaces-functions/</guid><description>&lt;h2 id="i-introduction" class="heading">I. Introduction&lt;a href="#i-introduction" aria-labelledby="i-introduction">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h2>
&lt;p>Go is a minimalist language, but this simplicity can sometimes make developers feel like something is “missing” — especially when dealing with more advanced architectures, Test-Driven Development, or the need to mock dependencies. Developers coming from Java, C#, or Python often ask the same questions:&lt;/p>
&lt;ul>
&lt;li>&lt;em>Should I turn all my functions into structs + interfaces to test them?&lt;/em>&lt;/li>
&lt;li>&lt;em>How should I organize my packages to keep them modular and testable?&lt;/em>&lt;/li>
&lt;li>&lt;em>Where should interfaces live — in the provider or the consumer?&lt;/em>&lt;/li>
&lt;li>&lt;em>How do I isolate a package that only exports functions?&lt;/em>&lt;/li>
&lt;li>&lt;em>How does Go automatically detect signature changes?&lt;/em>&lt;/li>
&lt;/ul>
&lt;hr>




&lt;h2 id="ii-gos-model-simple-modular-but-different" class="heading">II. Go&amp;rsquo;s Model: Simple, Modular, but Different&lt;a href="#ii-gos-model-simple-modular-but-different" aria-labelledby="ii-gos-model-simple-modular-but-different">
&lt;!-- &lt;i class="fas fa-link anchor">&lt;/i> -->
 &lt;svg class="svg-inline--fa fas fa-link anchor" fill="currentColor" aria-hidden="true" role="img" viewBox="0 0 640 512">&lt;use href="#fas-link">&lt;/use>&lt;/svg>&amp;nbsp;
 &lt;/a>
&lt;/h2>
&lt;p>Unlike Java or C#, Go does not rely on inheritance, classes, or heavy dependency injection frameworks.&lt;/p></description></item></channel></rss>