<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Beyond Staging]]></title><description><![CDATA[Notes on AI systems, customer engineering, product building, and the realities of shipping software.]]></description><link>https://beyondstaging.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!Cr-J!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F927e315b-154b-4f56-bdc4-99b269f42303_1254x1254.png</url><title>Beyond Staging</title><link>https://beyondstaging.substack.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 09 Aug 2026 04:37:44 GMT</lastBuildDate><atom:link href="https://beyondstaging.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Beyond Staging]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[beyondstaging@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[beyondstaging@substack.com]]></itunes:email><itunes:name><![CDATA[Beyond Staging]]></itunes:name></itunes:owner><itunes:author><![CDATA[Beyond Staging]]></itunes:author><googleplay:owner><![CDATA[beyondstaging@substack.com]]></googleplay:owner><googleplay:email><![CDATA[beyondstaging@substack.com]]></googleplay:email><googleplay:author><![CDATA[Beyond Staging]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Feature Took Three Days to Build. It Took Three Weeks to Ship.]]></title><description><![CDATA[Personal projects taught me how to build software. Working on real products is teaching me how software actually gets delivered.]]></description><link>https://beyondstaging.substack.com/p/the-feature-took-three-days-to-build</link><guid isPermaLink="false">https://beyondstaging.substack.com/p/the-feature-took-three-days-to-build</guid><dc:creator><![CDATA[Beyond Staging]]></dc:creator><pubDate>Sun, 09 Aug 2026 01:43:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4LWD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4LWD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4LWD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png 424w, https://substackcdn.com/image/fetch/$s_!4LWD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png 848w, https://substackcdn.com/image/fetch/$s_!4LWD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png 1272w, https://substackcdn.com/image/fetch/$s_!4LWD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4LWD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png" width="1456" height="484" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:484,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:894558,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://beyondstaging.substack.com/i/210416916?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4LWD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png 424w, https://substackcdn.com/image/fetch/$s_!4LWD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png 848w, https://substackcdn.com/image/fetch/$s_!4LWD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png 1272w, https://substackcdn.com/image/fetch/$s_!4LWD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79caca3f-6373-4ecb-9327-8dce3ce0471a_1536x511.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There is a very specific kind of frustration you experience as an engineer.</p><p>You get a feature.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://beyondstaging.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>You understand the requirement.</p><p>You look at the codebase.</p><p>You think:</p><p><em>&#8220;Yeah, this should take two or three days.&#8221;</em></p><p>And sometimes you&#8217;re right.</p><p>Three days later, the code is ready.</p><p>Tests are passing.</p><p>Everything works locally.</p><p>It works in staging.</p><p>You are feeling good.</p><p>Then somebody says:</p><p><em>&#8220;Cool. When can we ship it?&#8221;</em></p><p>And somehow the answer is...</p><p>Not today.</p><p>Not tomorrow either.</p><p>Maybe not even next week.</p><p>Welcome to one of the biggest differences between building a personal project and delivering software inside a real organization.</p><p><strong>Build time and delivery time are not the same thing.</strong></p><p>It took me some time to properly understand that.</p><h2>Personal projects give you a very unrealistic superpower</h2><p>When you&#8217;re building something alone, you control almost everything.</p><p>Imagine you&#8217;re working on a small SaaS project over the weekend.</p><p>You realize the database schema needs another column.</p><p>You add it.</p><p>You realize an API needs to change.</p><p>You change it.</p><p>The frontend needs slightly different data.</p><p>You update that too.</p><p>Halfway through, you decide the original feature was stupid and change the requirement completely.</p><p>Who needs to approve it?</p><p>You.</p><p>Who owns the backend?</p><p>You.</p><p>Who owns the frontend?</p><p>Also you.</p><p>Product manager?</p><p>Still you.</p><p>QA?</p><p>Unfortunately, also you.</p><p>The communication latency between all the teams involved in your project is approximately zero because every team lives inside the same skull.</p><p>It is incredibly efficient.</p><p>It is also nothing like building software with multiple teams.</p><h2>Now add other humans</h2><p>Let&#8217;s take the same feature inside a company.</p><p>You start implementing it and realize you need a change from another service.</p><p>That service belongs to another team.</p><p>They agree the change makes sense, but they already have work planned for the sprint.</p><p>Fine.</p><p>You figure out a workaround.</p><p>Then product speaks to another customer and discovers an additional use case.</p><p>The scope changes slightly.</p><p>You update the implementation.</p><p>Someone from the frontend team asks whether the API contract can be changed because the current format makes their integration harder.</p><p>Fair point.</p><p>You change it.</p><p>QA tests the feature and discovers an edge case nobody thought about.</p><p>Now you need to decide whether that edge case blocks the launch.</p><p>Meanwhile, another engineer notices that the change could affect an existing workflow.</p><p>You investigate that.</p><p>Everything seems fine.</p><p>Then somebody asks the most dangerous question in software engineering:</p><p><em>&#8220;What happens for existing customers?&#8221;</em></p><p>Back to the code.</p><p>Eventually the feature ships.</p><p>Three weeks after the code was mostly finished.</p><p>And the strange part is that nothing necessarily went wrong.</p><p>Nobody was incompetent.</p><p>Nobody was intentionally blocking the feature.</p><p>This is just what happens when software moves through a system containing multiple teams, customers, constraints and unknowns.</p><h2>We usually think about technical complexity</h2><p>Engineers are trained to notice technical complexity.</p><p>How many requests can the system handle?</p><p>How should the data be partitioned?</p><p>Do we need caching?</p><p>What happens if this service goes down?</p><p>Should this be synchronous or asynchronous?</p><p>All important questions.</p><p>But there is another kind of complexity that becomes increasingly visible as the organization grows.</p><p><strong>Coordination complexity.</strong></p><p>A technically simple feature can be organizationally difficult.</p><p>And a technically difficult feature can sometimes be surprisingly easy to deliver if one small team owns the entire path.</p><p>The number of lines of code tells you very little about how difficult something will be to ship.</p><p>Sometimes the hardest dependency isn&#8217;t a database.</p><p>It is another team&#8217;s calendar.</p><h2>Requirements are rarely as clear as they sound</h2><p>One thing I have started noticing is that people can agree on a requirement while imagining completely different things.</p><p>Take a seemingly simple sentence:</p><p><em>&#8220;We should allow customers to configure this behaviour.&#8221;</em></p><p>Sounds clear.</p><p>Until you start asking questions.</p><p>Configure it at the account level or user level?</p><p>Can different projects have different configurations?</p><p>What should existing customers get by default?</p><p>Can the configuration be changed after setup?</p><p>Who is allowed to change it?</p><p>Should the API expose it?</p><p>Do we need an audit trail?</p><p>What happens if the configuration conflicts with another setting?</p><p>Suddenly the one-line requirement becomes a small family tree of decisions.</p><p>This is why implementation itself can reveal new requirements.</p><p>You learn more about the problem while trying to solve it.</p><p>That learning changes the solution.</p><p>Which means scope changes are not always the result of poor planning.</p><p>Sometimes they are simply the result of understanding the problem better.</p><h2>Dependencies have their own timelines</h2><p>This one hurts the most when you&#8217;re used to personal projects.</p><p>Your feature might require one tiny change from another team.</p><p>Maybe five lines of code.</p><p>Technically, the dependency is tiny.</p><p>Operationally, it might still take a week.</p><p>Because that team has its own priorities.</p><p>Their own customers.</p><p>Their own incidents.</p><p>Their own roadmap.</p><p>Their own dependencies.</p><p>Your urgent request is entering a queue full of other urgent requests.</p><p>This is where software delivery starts looking less like programming and more like distributed systems.</p><p>Except the nodes are humans.</p><p>And unfortunately, humans don&#8217;t support retries with exponential backoff.</p><p>Well, maybe Slack reminders count.</p><h2>Customers make clean abstractions messy</h2><p>Software looks wonderfully predictable when everyone uses it the way you designed it.</p><p>Then customers arrive.</p><p>One customer has a network restriction you never considered.</p><p>Another uses an authentication setup slightly differently.</p><p>Another has a workflow that technically shouldn&#8217;t exist but has somehow been running for three years.</p><p>Another interprets the same feature completely differently.</p><p>This is especially visible when you work close to customers.</p><p>You start realizing that there is often a gap between:</p><p><strong>what the product supports</strong></p><p>and</p><p><strong>how the product is actually being used.</strong></p><p>That gap creates a lot of engineering work.</p><p>It also creates some of the most interesting engineering problems.</p><p>Because now the question isn&#8217;t simply:</p><p><em>&#8220;Can we build this?&#8221;</em></p><p>It becomes:</p><p><em>&#8220;Can we build this without breaking everything people already depend on?&#8221;</em></p><p>Very different problem.</p><h2>&#8220;It works&#8221; is a dangerous sentence</h2><p>When I build a personal project and something works on my machine, there is a reasonable chance I will deploy it immediately.</p><p>If something breaks, maybe five people notice.</p><p>Four of them are probably my friends.</p><p>Production software has a different standard.</p><p>Does it work under load?</p><p>Does it work for old customers?</p><p>Can we roll it back?</p><p>What happens if the migration fails?</p><p>Are there observability metrics?</p><p>What happens if only half the deployment succeeds?</p><p>Is the new behavior backwards compatible?</p><p>What happens to data written during a rollback?</p><p>Suddenly &#8220;working&#8221; is only one requirement among many.</p><p>A feature can be functionally correct and still not be safe to release.</p><p>That distinction wasn&#8217;t obvious to me when most of my experience came from building things myself.</p><h2>I used to ask, &#8220;Why can&#8217;t we just ship this?&#8221;</h2><p>Sometimes that is still the right question.</p><p>Organizations absolutely can create unnecessary process.</p><p>Meetings can become substitutes for decisions.</p><p>Approvals can exist because nobody remembers why they were introduced.</p><p>A three-day feature really can become a three-week feature because of bureaucracy.</p><p>But I am becoming more careful about assuming that every delay is bureaucracy.</p><p>Sometimes what looks like process is actually accumulated knowledge about risk.</p><p>Maybe the approval exists because something broke badly two years ago.</p><p>Maybe the rollout is gradual because customers depend on behavior that isn&#8217;t documented anywhere.</p><p>Maybe QA is asking annoying questions because they have seen exactly this kind of edge case reach production before.</p><p>Maybe the other team is cautious because changing their API affects twenty consumers you didn&#8217;t know existed.</p><p>The question I find myself asking more often now is not:</p><p><em>&#8220;Why aren&#8217;t we shipping this?&#8221;</em></p><p>It is:</p><p><strong>&#8220;What needs to be true for us to ship this safely?&#8221;</strong></p><p>That small change in wording leads to very different conversations.</p><h2>The equation I keep coming back to</h2><p>I have started thinking about feature delivery roughly like this:</p><p><strong>Delivery Time = Build Time + Coordination + Dependencies + Validation + Risk</strong></p><p>It is obviously not a real equation.</p><p>Please don&#8217;t put it into a project management spreadsheet and blame me when the sprint estimate fails.</p><p>But as a mental model, I find it useful.</p><p>Because engineers naturally focus on the first variable.</p><p>Build time.</p><p>How quickly can I implement this?</p><p>How quickly can I write the API?</p><p>How quickly can I optimize the query?</p><p>Those things matter.</p><p>But once you become reasonably good at writing software, the biggest improvements in delivery speed often come from somewhere else.</p><p>Clarifying the requirement before writing code.</p><p>Finding dependencies before they become blockers.</p><p>Reducing the scope.</p><p>Getting the right people into a conversation early.</p><p>Testing the risky assumption before building the full solution.</p><p>Designing the rollout alongside the implementation.</p><p>Communicating uncertainty before it turns into a surprise.</p><p>None of these things make you type code faster.</p><p>They can still make you ship significantly faster.</p><h2>Maybe this is what &#8220;seniority&#8221; slowly starts becoming</h2><p>I used to associate engineering growth mostly with being able to solve increasingly difficult technical problems.</p><p>And that is definitely part of it.</p><p>But I am starting to think another part is learning to see the system around the code.</p><p>A feature doesn&#8217;t exist in isolation.</p><p>It exists inside a product.</p><p>The product exists inside an organization.</p><p>The organization serves customers.</p><p>Those customers have their own systems, constraints and expectations.</p><p>The code is one piece of that chain.</p><p>A very important piece.</p><p>But still one piece.</p><p>The better you understand the rest of the chain, the better you become at actually delivering things.</p><h2>Building software and delivering software are different skills</h2><p>Personal projects taught me an enormous amount.</p><p>They taught me how to take an idea and turn it into something real.</p><p>They taught me how to debug, experiment, make decisions quickly and figure things out without waiting for permission.</p><p>I still think building things yourself is one of the best ways to become a better engineer.</p><p>But working on real products is teaching me something different.</p><p>How to build when you don&#8217;t control everything.</p><p>How to work with dependencies.</p><p>How to handle ambiguity.</p><p>How to communicate trade-offs.</p><p>How to think about customers you may never meet.</p><p>How to ship something safely when changing one piece can affect twenty others.</p><p>Personal projects taught me how to <strong>build software</strong>.</p><p>Working on real products is teaching me how software actually gets <strong>delivered</strong>.</p><p>And I am slowly realizing that those are two very different skills.</p><p>That difference is exactly the kind of thing I want to explore here.</p><p>The stuff that starts becoming visible once the code works, staging is green, and you realize the real work isn&#8217;t over yet.</p><p>The stuff <strong>beyond staging</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://beyondstaging.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[What Is Beyond Staging, and Why Am I Starting It?]]></title><description><![CDATA[Most engineering content ends when the code works. I have slowly started realizing that some of the most interesting parts begin after that.]]></description><link>https://beyondstaging.substack.com/p/what-is-beyond-staging-and-why-am</link><guid isPermaLink="false">https://beyondstaging.substack.com/p/what-is-beyond-staging-and-why-am</guid><dc:creator><![CDATA[Beyond Staging]]></dc:creator><pubDate>Sun, 09 Aug 2026 01:41:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!c4SR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c4SR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c4SR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png 424w, https://substackcdn.com/image/fetch/$s_!c4SR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png 848w, https://substackcdn.com/image/fetch/$s_!c4SR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png 1272w, https://substackcdn.com/image/fetch/$s_!c4SR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c4SR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png" width="1456" height="484" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:484,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:895713,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://beyondstaging.substack.com/i/210416327?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!c4SR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png 424w, https://substackcdn.com/image/fetch/$s_!c4SR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png 848w, https://substackcdn.com/image/fetch/$s_!c4SR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png 1272w, https://substackcdn.com/image/fetch/$s_!c4SR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5783fdd5-1fe7-4e84-823c-4ada5131b3af_1536x511.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>When I first started building things, software felt surprisingly straightforward.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://beyondstaging.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>You have an idea. You figure out how to build it. You write some code. Something breaks. You spend an unreasonable amount of time figuring out why it broke. Eventually it works.</p><p>You deploy it.</p><p>Done.</p><p>At least, that is what building personal projects taught me.</p><p>Then I started working on larger systems, real products, and eventually much closer to customers.</p><p>And the definition of &#8220;done&#8221; started becoming very blurry.</p><p>The code working was no longer the finish line.</p><p>Sometimes it wasn&#8217;t even the halfway point.</p><p>That realization is probably the simplest explanation for why this page exists.</p><h2>Why &#8220;Beyond Staging&#8221;?</h2><p>Staging is a comfortable place.</p><p>The environment is controlled. The data is predictable. The people testing the feature usually know what it is supposed to do.</p><p>You can reset things.</p><p>You can retry things.</p><p>You can tell someone, &#8220;Give me five minutes, I know what&#8217;s wrong.&#8221;</p><p>Production doesn&#8217;t always give you that luxury.</p><p>Once something leaves staging, it meets reality.</p><p>Real users use your product in ways you never imagined.</p><p>Customers have infrastructure you didn&#8217;t account for.</p><p>Requirements suddenly have edge cases.</p><p>Another team owns something you depend on.</p><p>The API behaves slightly differently.</p><p>Someone asks a question that makes you realize the original solution might have solved the wrong problem entirely.</p><p>That space fascinates me.</p><p>The space between writing software and actually delivering something useful.</p><p>The space between a clean architecture diagram and a messy production system.</p><p>The space between &#8220;technically correct&#8221; and &#8220;actually works for the customer.&#8221;</p><p>That is what <strong>Beyond Staging</strong> means to me.</p><h2>I used to think engineering was mostly about getting better at code</h2><p>For a long time, becoming a better engineer meant learning more technical things.</p><p>Better data structures.</p><p>Better databases.</p><p>Better system design.</p><p>Better debugging.</p><p>Better infrastructure.</p><p>Better ways of writing code.</p><p>And all of those things still matter. A lot.</p><p>But the more I work, the more I realize that there is another side of engineering that is much harder to learn from courses.</p><p>How do you understand what somebody actually needs when they themselves are not completely sure?</p><p>How do you make a decision when you have incomplete information?</p><p>How do you build something when another team&#8217;s system is part of your critical path?</p><p>How do you tell the difference between an edge case worth supporting and one that will consume a week of engineering time for almost no value?</p><p>How do you make something work in an environment you don&#8217;t control?</p><p>How do you know when to build the perfect solution and when to ship the boring one?</p><p>There is a surprising amount of engineering that happens before and after writing the actual code.</p><p>I didn&#8217;t fully appreciate that earlier.</p><p>I am still learning it now.</p><h2>That is what I want to write about here</h2><p>Beyond Staging isn&#8217;t going to be a newsletter where I pretend to have figured everything out.</p><p>Quite the opposite.</p><p>There are many things I am currently learning, questioning, misunderstanding and occasionally getting completely wrong.</p><p>I want this to be a place where I document that process.</p><p>Sometimes that will mean writing about Forward Deployed Engineering and what working close to customers actually looks like.</p><p>Sometimes it will be a system design problem I came across.</p><p>Sometimes it might be a paper, an AI system, an engineering concept, a production failure, a product decision or something I built over a weekend.</p><p>And sometimes the article might simply begin with:</p><p><em>&#8220;I don&#8217;t understand this well enough yet, so I spent the weekend trying to understand it.&#8221;</em></p><p>Those are usually my favourite rabbit holes anyway.</p><h2>Why write any of this publicly?</h2><p>Because writing has an annoying way of exposing whether you actually understand something.</p><p>It is easy to think you understand an idea inside your head.</p><p>Then you open an empty document and try explaining it without hiding behind jargon.</p><p>Suddenly there are gaps everywhere.</p><p>Writing forces me to slow down and ask better questions.</p><p>Why does this system work this way?</p><p>Why did we make this decision?</p><p>Was this actually a technical problem?</p><p>Could we have solved it differently?</p><p>What did I misunderstand the first time?</p><p>If documenting that process helps another engineer avoid one mistake, understand one concept better, or simply realize that the confusion they&#8217;re experiencing is normal, that makes writing it worthwhile.</p><p>There is another reason too.</p><p>The internet has given me an absurd amount of knowledge for free.</p><p>Blog posts written by engineers I have never met have solved bugs for me at 2 AM.</p><p>People have published system designs, architecture breakdowns, papers, postmortems, experiments and entire courses without expecting anything in return.</p><p>A huge portion of what I know came from people documenting what they learned.</p><p>This is, in a very small way, my attempt to do the same.</p><h2>About the mask</h2><p>Yes, there is a guy sitting behind a laptop wearing a suspiciously futuristic mask.</p><p>The mask isn&#8217;t really the point.</p><p>I actually like that it keeps the attention slightly away from the person and closer to the ideas.</p><p>Beyond Staging isn&#8217;t supposed to be about presenting some perfect engineer who knows everything.</p><p>It is about documenting what I am seeing while building software, working with systems, interacting with customers, studying things I find interesting and slowly becoming better at all of it.</p><p>The mask just makes the whole thing more fun.</p><p>And, admittedly, a little cooler.</p><h2>So, what is Beyond Staging?</h2><p>I think the answer will evolve as I do.</p><p>For now, it is my public engineering notebook.</p><p>A collection of things I am learning from production, systems, product, AI, startups, customers and everything that somehow falls in between.</p><p>Some posts will be deeply technical.</p><p>Some won&#8217;t contain a single line of code.</p><p>Because software engineering, I am slowly discovering, is about much more than software.</p><p>Staging is controlled.</p><p>Reality rarely is.</p><p>I want to write about what happens when the two meet.</p><p>Welcome to <strong>Beyond Staging</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://beyondstaging.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>