<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Yeskendir Salgara on Medium]]></title>
        <description><![CDATA[Stories by Yeskendir Salgara on Medium]]></description>
        <link>https://medium.com/@salgarayes?source=rss-99e8ea431498------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*or95XWmVomIL12h5Srtg1g.jpeg</url>
            <title>Stories by Yeskendir Salgara on Medium</title>
            <link>https://medium.com/@salgarayes?source=rss-99e8ea431498------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 07:54:58 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@salgarayes/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[How To Fail a Tech Interview | Notes from a Staff Engineer]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@salgarayes/how-to-fail-a-tech-interview-notes-from-a-staff-engineer-079c2db88833?source=rss-99e8ea431498------2"><img src="https://cdn-images-1.medium.com/max/1400/0*aM3T5hmGpnvEoWZd.jpeg" width="1400"></a></p><p class="medium-feed-snippet">Lessons from 100+ interviews I&#x2019;ve conducted as Tech Lead / Staff Engineer.</p><p class="medium-feed-link"><a href="https://medium.com/@salgarayes/how-to-fail-a-tech-interview-notes-from-a-staff-engineer-079c2db88833?source=rss-99e8ea431498------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@salgarayes/how-to-fail-a-tech-interview-notes-from-a-staff-engineer-079c2db88833?source=rss-99e8ea431498------2</link>
            <guid isPermaLink="false">https://medium.com/p/079c2db88833</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[system-design-interview]]></category>
            <dc:creator><![CDATA[Yeskendir Salgara]]></dc:creator>
            <pubDate>Fri, 03 Jul 2026 13:20:06 GMT</pubDate>
            <atom:updated>2026-07-03T13:20:06.356Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Swift: Optimize SPM for AI-First Feature Teams]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@salgarayes/swift-optimize-spm-for-ai-first-feature-teams-ff8b527b3c09?source=rss-99e8ea431498------2"><img src="https://cdn-images-1.medium.com/max/1456/0*KCvIE0M7b0EW1AC3.png" width="1456"></a></p><p class="medium-feed-snippet">Sandboxed Feature Development. Optimize build time, test time and &#x2018;architectural scope&#x2019; of every feature team.</p><p class="medium-feed-link"><a href="https://medium.com/@salgarayes/swift-optimize-spm-for-ai-first-feature-teams-ff8b527b3c09?source=rss-99e8ea431498------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@salgarayes/swift-optimize-spm-for-ai-first-feature-teams-ff8b527b3c09?source=rss-99e8ea431498------2</link>
            <guid isPermaLink="false">https://medium.com/p/ff8b527b3c09</guid>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[ios]]></category>
            <dc:creator><![CDATA[Yeskendir Salgara]]></dc:creator>
            <pubDate>Wed, 24 Jun 2026 13:31:26 GMT</pubDate>
            <atom:updated>2026-06-24T13:31:26.001Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Swift, KMP: Type-Safe Feature Flags for Scaled Teams]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/kerege/swift-kmp-type-safe-feature-flags-for-scaled-teams-981af1371d12?source=rss-99e8ea431498------2"><img src="https://cdn-images-1.medium.com/max/1456/0*DSqo_d_ObDsw8jcc.png" width="1456"></a></p><p class="medium-feed-snippet">A safe, reliable feature flag system for developers and users &#x2014; and why Firebase&#x2019;s approach falls short at scale.</p><p class="medium-feed-link"><a href="https://medium.com/kerege/swift-kmp-type-safe-feature-flags-for-scaled-teams-981af1371d12?source=rss-99e8ea431498------2">Continue reading on Conscious Engineering  »</a></p></div>]]></description>
            <link>https://medium.com/kerege/swift-kmp-type-safe-feature-flags-for-scaled-teams-981af1371d12?source=rss-99e8ea431498------2</link>
            <guid isPermaLink="false">https://medium.com/p/981af1371d12</guid>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[kotlin]]></category>
            <category><![CDATA[android]]></category>
            <category><![CDATA[ios]]></category>
            <dc:creator><![CDATA[Yeskendir Salgara]]></dc:creator>
            <pubDate>Sat, 04 Apr 2026 13:00:58 GMT</pubDate>
            <atom:updated>2026-04-04T13:01:15.985Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Apple’s Way: Bidirectional SwiftUI — Compose Interactions]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@salgarayes/apples-way-bidirectional-swiftui-compose-interactions-b09ad63c2573?source=rss-99e8ea431498------2"><img src="https://cdn-images-1.medium.com/max/1456/0*Q1Hg4-7CG7rnFJeG.png" width="1456"></a></p><p class="medium-feed-snippet">Communication between Compose views and SwiftUI views that keeps them synchronized. No hacks.</p><p class="medium-feed-link"><a href="https://medium.com/@salgarayes/apples-way-bidirectional-swiftui-compose-interactions-b09ad63c2573?source=rss-99e8ea431498------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@salgarayes/apples-way-bidirectional-swiftui-compose-interactions-b09ad63c2573?source=rss-99e8ea431498------2</link>
            <guid isPermaLink="false">https://medium.com/p/b09ad63c2573</guid>
            <category><![CDATA[jetpack-compose]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[swiftui]]></category>
            <category><![CDATA[compose-multiplatform]]></category>
            <dc:creator><![CDATA[Yeskendir Salgara]]></dc:creator>
            <pubDate>Mon, 16 Mar 2026 06:39:30 GMT</pubDate>
            <atom:updated>2026-03-16T06:39:30.422Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[SwiftUI, Swift Effects: A Beautiful Onion Architecture]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@salgarayes/swiftui-swift-effects-a-beautiful-onion-architecture-d6360b138ecb?source=rss-99e8ea431498------2"><img src="https://cdn-images-1.medium.com/max/1400/0*z8WK26Vcj_xYmzPN.png" width="1400"></a></p><p class="medium-feed-snippet">Swift + SwiftUI + Type-Driven Design + Swift Effect.</p><p class="medium-feed-link"><a href="https://medium.com/@salgarayes/swiftui-swift-effects-a-beautiful-onion-architecture-d6360b138ecb?source=rss-99e8ea431498------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@salgarayes/swiftui-swift-effects-a-beautiful-onion-architecture-d6360b138ecb?source=rss-99e8ea431498------2</link>
            <guid isPermaLink="false">https://medium.com/p/d6360b138ecb</guid>
            <category><![CDATA[swiftui]]></category>
            <category><![CDATA[swift]]></category>
            <dc:creator><![CDATA[Yeskendir Salgara]]></dc:creator>
            <pubDate>Wed, 04 Mar 2026 14:09:27 GMT</pubDate>
            <atom:updated>2026-03-04T14:09:27.550Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Swift: Measurable Architecture  - You Get What You Measure.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/kerege/swift-measurable-architecture-you-get-what-you-measure-62cd2f70b224?source=rss-99e8ea431498------2"><img src="https://cdn-images-1.medium.com/max/1456/0*VWTKz-hiqCnmbUGG" width="1456"></a></p><p class="medium-feed-snippet">We learned how to build testable, scalable, automatable architecture, but what about measurable one?</p><p class="medium-feed-link"><a href="https://medium.com/kerege/swift-measurable-architecture-you-get-what-you-measure-62cd2f70b224?source=rss-99e8ea431498------2">Continue reading on Conscious Engineering  »</a></p></div>]]></description>
            <link>https://medium.com/kerege/swift-measurable-architecture-you-get-what-you-measure-62cd2f70b224?source=rss-99e8ea431498------2</link>
            <guid isPermaLink="false">https://medium.com/p/62cd2f70b224</guid>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[software-architecture]]></category>
            <dc:creator><![CDATA[Yeskendir Salgara]]></dc:creator>
            <pubDate>Fri, 20 Feb 2026 10:46:57 GMT</pubDate>
            <atom:updated>2026-02-22T05:27:19.399Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Swift: How to Read Code with a Single Glance]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@salgarayes/swift-how-to-read-code-with-a-single-glance-5f3a9c4be2f7?source=rss-99e8ea431498------2"><img src="https://cdn-images-1.medium.com/max/2400/0*8psdemNG84VmweqZ.png" width="2400"></a></p><p class="medium-feed-snippet">&#x201C;It takes two years to learn to speak, and sixty to learn to keep quiet&#x201D;</p><p class="medium-feed-link"><a href="https://medium.com/@salgarayes/swift-how-to-read-code-with-a-single-glance-5f3a9c4be2f7?source=rss-99e8ea431498------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@salgarayes/swift-how-to-read-code-with-a-single-glance-5f3a9c4be2f7?source=rss-99e8ea431498------2</link>
            <guid isPermaLink="false">https://medium.com/p/5f3a9c4be2f7</guid>
            <category><![CDATA[swift]]></category>
            <dc:creator><![CDATA[Yeskendir Salgara]]></dc:creator>
            <pubDate>Thu, 12 Feb 2026 12:13:48 GMT</pubDate>
            <atom:updated>2026-02-12T12:13:48.548Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Swift, SwiftUI: CI build & test time 99.7% faster]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/kerege/swift-swiftui-ci-build-test-time-99-7-faster-9bfe9ca81759?source=rss-99e8ea431498------2"><img src="https://cdn-images-1.medium.com/max/1400/0*UB78jnzOlaR6uG7J.png" width="1400"></a></p><p class="medium-feed-snippet">SwiftSPM running on macOS: build &amp; test time improvements from ~20 minutes to ~3 minutes in total&#x200A;&#x2014;&#x200A;for Swift, SwiftUI.</p><p class="medium-feed-link"><a href="https://medium.com/kerege/swift-swiftui-ci-build-test-time-99-7-faster-9bfe9ca81759?source=rss-99e8ea431498------2">Continue reading on Conscious Engineering  »</a></p></div>]]></description>
            <link>https://medium.com/kerege/swift-swiftui-ci-build-test-time-99-7-faster-9bfe9ca81759?source=rss-99e8ea431498------2</link>
            <guid isPermaLink="false">https://medium.com/p/9bfe9ca81759</guid>
            <category><![CDATA[macos]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[swiftui]]></category>
            <category><![CDATA[ios]]></category>
            <dc:creator><![CDATA[Yeskendir Salgara]]></dc:creator>
            <pubDate>Tue, 03 Feb 2026 11:52:10 GMT</pubDate>
            <atom:updated>2026-02-03T11:52:10.336Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[TDD with SwiftUI: Test in Composable Way]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@salgarayes/tdd-with-swiftui-test-in-composable-way-ce08f4f5daf0?source=rss-99e8ea431498------2"><img src="https://cdn-images-1.medium.com/max/784/1*ats740gkug3CKVmK2N6X_g.png" width="784"></a></p><p class="medium-feed-snippet">SwiftUI, Swift Testing, Composable tests</p><p class="medium-feed-link"><a href="https://medium.com/@salgarayes/tdd-with-swiftui-test-in-composable-way-ce08f4f5daf0?source=rss-99e8ea431498------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@salgarayes/tdd-with-swiftui-test-in-composable-way-ce08f4f5daf0?source=rss-99e8ea431498------2</link>
            <guid isPermaLink="false">https://medium.com/p/ce08f4f5daf0</guid>
            <category><![CDATA[swiftui]]></category>
            <category><![CDATA[swift-testing]]></category>
            <category><![CDATA[swift]]></category>
            <dc:creator><![CDATA[Yeskendir Salgara]]></dc:creator>
            <pubDate>Wed, 17 Dec 2025 12:56:43 GMT</pubDate>
            <atom:updated>2025-12-17T12:56:43.699Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[An Architecture Is Not a Metric]]></title>
            <link>https://medium.com/kerege/an-architecture-is-not-a-metric-merry-christmas-mr-lawrence-45357d9d92d9?source=rss-99e8ea431498------2</link>
            <guid isPermaLink="false">https://medium.com/p/45357d9d92d9</guid>
            <category><![CDATA[architecture]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Yeskendir Salgara]]></dc:creator>
            <pubDate>Wed, 10 Dec 2025 06:02:17 GMT</pubDate>
            <atom:updated>2026-01-26T10:59:24.119Z</atom:updated>
            <content:encoded><![CDATA[<p>A rabbit hole into which most developers fall very easily.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/732/1*PjPHhj1IicapFMeLSpR9Dg.jpeg" /><figcaption>🎶</figcaption></figure><p>People ask questions about architecture and reason about it even before asking what software they are building, what goal they are trying to achieve, and what metrics they will use to measure success.</p><p>It’s the same as asking about ingredients before even looking at a dish or tasting it. One person says there is too much salt, another says there is too much sugar.</p><p>Without overgeneralizing, I can clearly describe a syndrome among developers who treat architecture patterns <strong>as the yardstick for everything — as the measure of all things.</strong></p><p>One developer declares MVVM the best architecture, backed by an argument from authority. Another rejects everything except their favorite pattern (MVC, VIPER, MVP, TCA, CIRCUIT, RIB, MVI, MVU), giving “valid” reasons the way a chef explains why pepper ruins a dessert.</p><p>Even when someone considers all aspects of their setup — their challenges and resources (human, time, technological) — and chooses an architecture, it’s unclear whether they succeeded or failed.</p><p>If they succeed, they brag about it, praising their solution as the ultimate pill.</p><p>If they fail, they blame the developers, the tight deadlines, ambiguous business requirements, or the technology.</p><p>There is no scientific way to reproduce the result — not only because environments differ, but also because there are no metrics that allow comparison.</p><p>But wait. Do we really need to reproduce the result? Didn’t we just fall into the rabbit hole again?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*N9xsy2BK79agXqAc.jpeg" /></figure><blockquote><em>“Far west, across the sea, there is a land called Vinland. It’s warm and fertile. A faraway land where </em><strong><em>the flames of architecture wars</em></strong><em> never reached.”</em></blockquote><p>Are we truly seeing beyond architectures — toward software development free from holy wars, blind worship, and cargo cults?</p><p>Many years ago, when I first had control over a project with multiple feature teams working on it, I was excited and already knew how I wanted to improve it. I knew what libraries, what approaches, and of course what architecture I was going to apply.</p><h3>Chapter 1: Nobody measures it.</h3><p>I don’t clearly recall whether I was a middle or senior developer, since those titles are vague and often overlap. I had my favorite libraries and approaches and knew exactly when to apply them.</p><p>After working on a project for a week or two, I could easily find the “weak points” of the existing architecture and declare:<br>“Code smells. We need refactoring. We can’t work with this.”<br>If there were a lot of closures, someone might say <a href="https://github.com/ReactiveX/RxSwift">RxSwift</a> is the best solution. If there was reactiveness, someone else would say:<br>“Oh, those idiots didn’t know how to use it. Reactiveness is everywhere, but the implementation is wrong. They’re shooting themselves in the foot.”<br>Then they would replace it with <a href="https://github.com/mxcl/PromiseKit">Closures</a>.</p><p>Always same story. Always same statement: “If we continue, we will stuck in development. This architecture is not scalable, testable. We need refactoring.“</p><p>I could confidently say in interviews:<br>“MVC is bad because of Massive View Controllers,”<br>or<br>“When the team is big, use VIPER; when small, use MVVM.”</p><p>When tasks were assigned, I was the one who could start quickly and finish fast. I was the best performer. But… we had a lot of bugs. I fixed them quickly, yet new ones kept appearing — cut off one head of the monster, two more grew. PO, Scrum Master, and teammates couldn’t identify the root cause. Sometimes it was me, sometimes backend, sometimes unclear business requirements. It was “normal.” <strong>Nobody measured anything.</strong></p><p>Looking back, I can say I had too many library initializers in <a href="https://developer.apple.com/documentation/uikit/uiapplicationdelegate/application(_:didfinishlaunchingwithoptions:)">didFinishLaunchingWithOptions</a>, too many data fetches during app launch, hitches and hangs, ever-increasing app size, and circular dependencies leading to memory leaks.</p><p>But these issues were <em>not</em> fatal. In fact, based on <a href="https://en.wikipedia.org/wiki/Survivorship_bias">Survivorship bias</a>, they often didn’t prevent success. I’ve worked on many successful apps — profitable, growing, expanding — whose technical implementations were far from perfect.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*o94USxVC97wtVRnH.png" /><figcaption>does it look familiar? 🤔</figcaption></figure><p>That’s why I always stick to the Pareto law:<br>80% of refactoring leads to only 20% real improvement.</p><p>And the lesson is a question: <strong>“What are your metrics?”</strong></p><p>Developers use architecture as a metric, but it isn’t. If you think for a moment, you’ll see how many biases we carry.</p><p>“Massive View Controller” — some say it’s about the number of lines. But you’ll find non-MVC files with even more lines. Others say the problem is violating SOLID principles. And yet others argue that you shouldn’t be too religious about SOLID, and some principles are misunderstood (even Uncle Bob confirms this).</p><p>Before falling into the rabbit hole again, ask:<br><strong>“What are your metrics?”</strong><br>You’ll soon find that none of the above are true metrics.</p><p>There are many real metrics:<br><em>Lines of code, code coverage, mutation index, time per task type, compile time of a file, full build time, test duration, app launch time, app size, number of specific bug types, hitches and hangs (count and duration), memory consumption,</em> etc.</p><p>It sounds obvious, but people forget:<br><strong>metrics must be measurable.</strong></p><p>Refactoring must have a clear goal:<br>“Our current situation is X, our goal is Y. It’s important because {link the technical metrics to business need}.”</p><p>This way, 20% of refactoring brings 80% real change.</p><p>If we eliminate metrics and make decisions based on emotion or politics, we end up treating irrelevant things — architecture, frameworks, tools, languages — as “metrics.”</p><p>They say: <strong>“You get what you measure.”</strong></p><p>We should face the truth — even if everyone else goes crazy.<br>That, my friends, is <strong>conscious engineering</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*YMbpO74YfZyONKNU.png" /><figcaption>architecture takes the shape of the engineering problem.</figcaption></figure><h3>Chapter 2: It doesn’t matter.</h3><p>When I analyzed software delivery and operational performance across different projects I’ve worked on, it turned out:</p><p><strong>Architecture doesn’t matter at all.</strong></p><p>One can pick any architecture — or none at all — or many in the same app. MVC, MVVM, VIPER — it doesn’t matter.</p><p>With AI and developers’ ability to copy/paste existing patterns, architecture becomes fragile.</p><p>Teams often work “on autopilot.” They follow patterns without asking “why.”Architecture becomes habit, not strategy.</p><p>You’ll find logic where it shouldn’t be. You’ll find new patterns that contradict the existing architecture because a new use case needs a new solution.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*2BiqFd6C8IO9eDSR" /><figcaption>it’s only natural: more efficient isn’t it?</figcaption></figure><p>We’ve all been there: you need to implement something, but there’s no example or reference to copy or learn from.</p><p>If the person who designed the architecture is still around, there are two options:</p><ol><li><strong>Extend</strong> the existing architecture to support the new case.</li><li><strong>Modify</strong> the architecture to create a perfect place for the new case.</li></ol><p>Both are fine. They’re just efforts to remain consistent.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Hf4JsPzH0mDyGhBe" /><figcaption>But “natural” doesn’t always mean “efficient.” And what is “efficiency” anyway?</figcaption></figure><p>I once read:<br>“It doesn’t matter what the architecture is, as long as it’s consistent.”</p><p>I agree only with the first part: <strong>“it doesn’t matter.”</strong><br>Because consistency doesn’t help if the architecture doesn’t solve the problems it was designed for.</p><p>There can be one architecture per feature.<br>Have you ever tried building a white-label super-app with Telegram-like chats, Instagram-like stories, TikTok-like videos, Facebook-like feeds, YouTube-like videos, Stripe-like wallet? I have — and there was <em>more than one architecture.</em></p><p>Because consistency doesn’t matter. Architecture doesn’t matter.</p><p><strong>So what does matter?</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*rEVgTj8mjAZepn36.png" /><figcaption>one metric says: great! another metric says: awful!</figcaption></figure><h3>Chapter 3: The Early Feedback Loop Problem.</h3><p>In almost every WWDC session about performance, user experience, or debugging, you’ll hear about the <strong>feedback loop</strong>. And it is the key to everything you write in your code.</p><p>Once, a developer in my company introduced a new design pattern to solve a problem while implementing a feature. He opened a PR. But here’s the thing: I’ve added around 100 comments. I said:<br>“You could’ve saved a lot of time and energy if we discussed your solution before writing code.”</p><p>That’s late feedback.</p><p>Listen:<br>One can work with the worst architecture, but if it compiles fast and developers can deliver features quickly, it’s a <em>good </em>architecture.<br>If it’s the “best architecture in the world” but newcomers struggle and no one can help — they get stuck — it’s a <em>bad </em>architecture.</p><p>Why?<br>Because of the <strong>feedback loop</strong>.<br>Because <strong>we build products for users</strong>.<br>Because <strong>nobody cares about an architecture</strong>.</p><p>When a user reports a critical bug — <strong>it’s already late</strong>.<br>When QA finds it — <strong>late</strong>.<br>When a PR review reveals an invalid state — <strong>late</strong>.<br>When you notice strange behavior on a device or on a simulator — <strong>late</strong>.</p><p>When tests fail — <strong>fine</strong>.<br>When the compiler errors — <strong>perfect</strong>.<br>When you eliminate invalid states during the “solutioning” phase <em>before writing code</em> — <strong>amazing</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*oBtnMgXTg2G-tLy7.png" /><figcaption>even the worst architecture can be great if you have enough resources to pay its cost 😉</figcaption></figure><p><strong>Your architecture must shorten the feedback loop.</strong><br>The shorter the loop, the better the architecture.<br>If you catch issues instantly during a task discussion, your architecture is ideal.<br>If users discover bugs after release — it’s the worst architecture possible.</p><p>If you can’t explain your implementation to a kid — even with the best architecture — you lose.</p><p>That’s why the “write-read” tradeoff matters.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*xo3L7bYqXnOYXhps.png" /><figcaption>write-read balance in architecture. invalid states.</figcaption></figure><p>But in perfect architecture there is no tradeoff.<br>The developer who cuts the feedback loop writes code that’s easy to read.<br>Because the mental model is already complete — code merely reflects it.<br>That’s why we write in programming languages: transforming human logic into machine logic.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*8D5jir0mzLpFZPyi.png" /><figcaption>no trade-off. no invalid states.</figcaption></figure><h3>Chapter 4: It’s not about architecture. It was never.</h3><p>When people talk about architecture, they talk about design patterns — predefined solutions to typical tasks. I call this “unconscious engineering.”</p><p>There’s nothing wrong with it. It’s natural not to question something the team already agreed on. It’s like brushing your teeth — you do it automatically. That’s why we all converge toward some version of “architecture.” It’s a map, a shelf where things have labels and places. It enables teams.</p><p>But usually architecture is always a consequence of circumstances.</p><p>Take Conway’s Law:</p><blockquote><strong><em>Conway’s Law</em></strong><em> is a principle that states organizations will design systems that mirror their own communication structures.</em></blockquote><p>Architectures are doomed to have long feedback loops if nobody questions them.<br>Not because of the architecture itself, but because of the unconsciousness around it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*kwR0XP-W81rk7y3L.png" /><figcaption>Are you really able to design an architecture free from biases?</figcaption></figure><p>If communication problems cause long feedback loops — and nobody addresses them — your architecture is already doomed.</p><p>The true cause of “bad architecture” is rarely the pattern itself — it’s almost always <strong>communication, team structure, and missing feedback</strong>, not the code.</p><p>It’s not about code. It never was.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ztWCdI8ja4OH3CBP.png" /><figcaption>Always question everything</figcaption></figure><h3>TLDR;</h3><ul><li>Nobody measures whether an architecture is good or bad.</li><li>Over time, good architecture becomes bad under new conditions.</li><li>Without metrics, 80% of refactoring results in only 20% real improvement.</li><li>With metrics, 20% of refactoring results in 80% real improvement.</li><li>Architecture doesn’t matter. Consistency doesn’t matter.</li><li>Good or bad depends on the <strong>metrics</strong> you choose.</li><li>Feedback loop matters.</li><li>Good architecture shortens the loop; bad architecture lengthens it.</li><li>Conscious engineering requires questioning, measuring, and keeping your hand on metrics.</li><li>Unconscious engineering leads to doomed architectures.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=45357d9d92d9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kerege/an-architecture-is-not-a-metric-merry-christmas-mr-lawrence-45357d9d92d9">An Architecture Is Not a Metric</a> was originally published in <a href="https://medium.com/kerege">Conscious Engineering 🌊</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>