<?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[nfosignal: AI Development]]></title><description><![CDATA[Developer philosophy, technology innovation, and the intersection of AI and product development. For CTOs and product leaders.]]></description><link>https://nfosignal.substack.com/s/ai-development</link><image><url>https://substackcdn.com/image/fetch/$s_!vTOf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fnfosignal.substack.com%2Fimg%2Fsubstack.png</url><title>nfosignal: AI Development</title><link>https://nfosignal.substack.com/s/ai-development</link></image><generator>Substack</generator><lastBuildDate>Tue, 09 Jun 2026 07:00:20 GMT</lastBuildDate><atom:link href="https://nfosignal.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Neal Foster]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[nfosignal@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[nfosignal@substack.com]]></itunes:email><itunes:name><![CDATA[nfos]]></itunes:name></itunes:owner><itunes:author><![CDATA[nfos]]></itunes:author><googleplay:owner><![CDATA[nfosignal@substack.com]]></googleplay:owner><googleplay:email><![CDATA[nfosignal@substack.com]]></googleplay:email><googleplay:author><![CDATA[nfos]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[BioValue: building a drug valuation tool from scratch]]></title><description><![CDATA[check it out live: BioValue]]></description><link>https://nfosignal.substack.com/p/biovalue-building-a-drug-valuation</link><guid isPermaLink="false">https://nfosignal.substack.com/p/biovalue-building-a-drug-valuation</guid><dc:creator><![CDATA[nfos]]></dc:creator><pubDate>Tue, 12 May 2026 15:41:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!c7CV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Biotech BD analysts have used Excel templates and analyst conventions for thirty years. The math is tractable. The data is mostly public. I wanted to build a credible drug asset valuation tool and share it publicly, all using AI. I provided the valuation methodology and framework from the product management perspective, and relied on Cowork for implementation.</p><p>The reason nobody had built a good open version of it is that the work spans biology, finance, regulatory mechanics, and software, and very few people sit across all four. So I first brainstormed and consolidated datasets using Perplexity, created POC Excel workbooks to generalize the approach and math.</p><p>The result is <a href="https://nealvybe.github.io/biovalue">BioValue</a>. Open source rNPV calculator, seven validated single-asset deals as presets, a four-post analytical series sitting next to it (posted at the <a href="https://biovalue.substack.com/">BioValue substack)</a>, code is live at <a href="https://nealvybe.github.io/biovalue/">nealvybe.github.io/biovalue</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://nealvybe.github.io/biovalue" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c7CV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.png 424w, https://substackcdn.com/image/fetch/$s_!c7CV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.png 848w, https://substackcdn.com/image/fetch/$s_!c7CV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.png 1272w, https://substackcdn.com/image/fetch/$s_!c7CV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c7CV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.png" width="1456" height="865" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:865,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:422613,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://nealvybe.github.io/biovalue&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nfosignal.substack.com/i/197367557?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.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_!c7CV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.png 424w, https://substackcdn.com/image/fetch/$s_!c7CV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.png 848w, https://substackcdn.com/image/fetch/$s_!c7CV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.png 1272w, https://substackcdn.com/image/fetch/$s_!c7CV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357c0cee-8c74-4677-9f5e-db9f3e5801c8_2548x1514.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 role="img" 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><title></title><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><h2><strong>The problem</strong></h2><p>A risk-adjusted NPV for a drug asset is the standard tool BD analysts use to value a transaction. Take peak revenue, run it through a probability-of-success curve by development stage, discount at the acquirer&#8217;s WACC, subtract R&amp;D cost PV. Compare against the deal terms. Decide if the buyer overpaid.</p><p>Every BD shop has their own Excel template for this. They are mostly inconsistent. They mostly use stale PoS benchmarks (BIO/Informa 2014 is still in circulation despite better data being available). They mostly bake in assumptions the analyst doesn&#8217;t actively own. The output looks rigorous, but the input quality varies wildly between firms.</p><p>The version most analysts learn from looks something like: clinical stage on one axis, therapeutic area on the other, lookup a table, multiply. The version that produces useful outputs is more involved.</p><h2><strong>What I wanted to build</strong></h2><p>A single-file web app, no backend, no install. Open source. Sensible defaults but everything editable. PoS data from a current source. A few validated deals built in as presets so the user can sanity check the model against real transactions. A Deal Analysis tab that shows three things explicitly: standalone Asset rNPV, a commercial-adjusted lower bound, and the actual Deal PV implied by the deal structure. Where Deal PV sits in that range tells you something specific.</p><p>No registration. No paywall. No dashboard SaaS layer. Just the tool.</p><h2><strong>The data</strong></h2><p>I pulled phase-transition PoS from MIT Project ALPHA, the most current public-good PoS database. ALPHA is industry-sponsored, biomarker-stratified, and updated quarterly. It replaces the older BIO/Informa numbers and produces meaningfully different results in some TAs.</p><p>Phase durations from Sertkaya et al. (JAMA Network Open 2024). R&amp;D cost benchmarks from Chandra &amp; Mazumdar (Analysis Group / Journal of Investment Management 2024). Indication library across 39 conditions from CDC, SEER, NCCN, ADA, AHA, primary literature, each with a source citation in the data file. Deal data from press releases and analyst coverage, normalized to a common structure.</p><p>All public, all citeable. None of it was the hard part.</p><h2><strong>The build</strong></h2><p>Single HTML file, vanilla JavaScript, Chart.js for the one chart, localStorage for input persistence. No build step. No framework. No bundler. The whole engine is in the page.</p><p>I worked with Claude on the engineering. Most of the actual building was conversational: lay out a tab, wire up a calculation, validate against a known result, iterate. The Cowork workflow let me jump between editing the engine, running validation scripts in Node, regenerating chart images in Python, and pushing to GitHub Pages, all in the same session.</p><p>The pattern that worked: I&#8217;d describe what the tab needs to do, Claude would generate the HTML and JS, I&#8217;d point out where the math was wrong or the UX was off, we&#8217;d fix it. When I needed to pressure-test the rNPV engine against real deals, I had Claude write a Node script that ran each preset through the engine standalone, which let me catch a couple of bugs that wouldn&#8217;t have shown up just by clicking around in the UI.</p><p>The hardest decisions weren&#8217;t code. They were methodology. Where to draw the line between standalone Asset rNPV and a more conservative BD-realistic lower bound. How to model royalty in licensing deals vs acquisitions. Whether to include a biomarker premium and how to compute it. Whether platform deals and CGT deals fit the same framework as chronic single-asset deals (they don&#8217;t, and that took most of a week to figure out).</p><p>Each of those decisions has a defense and a counter-argument. The tool exposes the choice rather than hiding it, which is the only honest way to handle methodology disagreements.</p><h2><strong>The validation</strong></h2><p>I started with eleven recent transacted deals. I wanted to know if the framework produced Asset rNPVs that lined up with deal economics. Seven of them did. Their Deal PV landed between 30 and 65 percent of standalone Asset rNPV, median 55 percent.</p><p>The other four broke. UCB/Neurona at 180 percent of standalone. Lilly/Verve at 525 percent. AbbVie/ImmunoGen at over 300. Merck/Prometheus similarly. The numbers were too high to be deal premia.</p><p>That turned out to be the interesting part. Two of the four were cell-and-gene-therapy deals where the chronic-drug rNPV shape doesn&#8217;t describe how the asset actually generates cash (one-time treatment, no LoE, manufacturing-constrained launch). The other two were platform deals where the lead asset only captured 30 to 50 percent of what the acquirer was buying. The framework wasn&#8217;t wrong about those deals. It was wrong to apply it to them.</p><p>That breakdown became the four-post analytical series on the publication side, at <a href="https://biovalue.substack.com">biovalue.substack.com</a>.</p><h2><strong>What got built</strong></h2><p>A working rNPV engine with seven validated presets. Five HTML pages covering the tool, About, Tutorial, Market Report, and License. Eighty pages of internal docs (methodology, deal validation, post drafts). Four analytical posts ready to publish. Three validation scripts (Node and Python). Live at a custom GitHub Pages site.</p><p>The whole thing is one repository. No backend. No database. No login. The repo: <a href="https://github.com/nealvybe/biovalue">github.com/nealvybe/biovalue</a>. Everything reproducible.</p><h2><strong>What required real judgment</strong></h2><p>A few places where the AI couldn&#8217;t help and the work was mine:</p><p><strong>Which PoS dataset to use.</strong> ALPHA, BIO/Informa, Wong-Siah-Lo, and proprietary firm-specific databases all produce different numbers. Choosing ALPHA was a judgment call about credibility and currency. I read the methodology paper, checked the sample sizes, and accepted the tradeoffs.</p><p><strong>The three-value framework.</strong> Standalone Asset rNPV at the acquirer&#8217;s WACC is one number. Commercial-adjusted rNPV (BD-realistic haircut: 14 percent WACC, peak times 0.60, commercial PoS times 0.85) is a second. Deal PV (upfront plus risk-adjusted milestone PV plus royalty stream PV) is the third. The decision to surface all three rather than collapse to one number was the most important methodology call. It changes what the tool tells you.</p><p><strong>Dropping deals from validation.</strong> Neurona at 180 percent looks like a deal premium until you realize the cash-flow shape is wrong. Knowing when to drop a comp rather than rationalize the result is the difference between a model and a fitting exercise.</p><p><strong>The biomarker decomposition.</strong> The conventional &#8220;+20 percent for biomarker selection&#8221; rule turns out to be four different things wearing the same name. Working through which one applies in which context took several iterations.</p><p>None of that was a coding problem. It was a thinking problem that the tool made visible.</p><h2><strong>The numbers</strong></h2><p>One repository. Around 180KB of HTML/JS for the tool. 39 indications in the library. 19 differentiation flags. 7 validated deals with deal economics reconciled to within 5 percent of analyst consensus peak forecasts. 4 analytical posts. 1 live URL with HTTPS via GitHub Pages and Cloudflare. Built incrementally over a few weeks, in parallel with other work.</p><p>The tool is at <a href="https://nealvybe.github.io/biovalue/">nealvybe.github.io/biovalue</a>. The analytical writing is at <a href="https://biovalue.substack.com">biovalue.substack.com</a>. Both are free.</p><p>Going from idea to live tool to validated framework to publishable analytical series is the loop AI tooling now makes possible. It still requires domain background, methodology judgment, and willingness to throw out the things that don&#8217;t fit. But the bottleneck has moved off the code.</p><p></p><p><em>Neal Foster is Co-Founder &amp; CTO of SportChartz and Founder &amp; Partner of Vybe Capital.</em></p>]]></content:encoded></item><item><title><![CDATA[The Process Caught Up to the Code. The Tools Haven't.]]></title><description><![CDATA[The previous post argued that AI flipped the bottleneck in software development.]]></description><link>https://nfosignal.substack.com/p/the-process-caught-up-to-the-code</link><guid isPermaLink="false">https://nfosignal.substack.com/p/the-process-caught-up-to-the-code</guid><dc:creator><![CDATA[nfos]]></dc:creator><pubDate>Thu, 30 Apr 2026 12:40:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5bhF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.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_!5bhF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5bhF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!5bhF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!5bhF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!5bhF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5bhF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2304632,&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://nealcfoster.substack.com/i/192631534?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.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_!5bhF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!5bhF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!5bhF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!5bhF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1631e60d-503e-4c18-b03a-dd984087e7b1_1536x1024.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 role="img" 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><title></title><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>The previous post argued that AI flipped the bottleneck in software development. Writing code used to be the constraint. Now it is the fastest step in the cycle. The slow parts are upstream (defining what to build) and downstream (validating that it worked). The teams moving fastest organized around blast radius, scoped regression to the change surface, and converged roles so one person could hold more of the loop.</p><p>This post is about the tools. Specifically, what happens when you apply a Six Sigma lens to the development process and realize that the tooling was optimized for a bottleneck that no longer exists.</p><h2>Where the time goes now</h2><p>In a traditional development workflow, a Six Sigma analysis would show the constraint at the coding step. Work piled up waiting for developers. The entire tool ecosystem evolved to manage that queue. Jira managed the backlog. Code reviews ensured quality before the expensive deployment. QA (Quality Assurance) caught bugs before they reached customers. Regression suites protected against regressions in a slow, manual change process.</p><p>AI compressed the coding step. In some cases, by an order of magnitude. But the steps before and after it did not compress. So the constraint moved.</p><p>Upstream, the constraint is definition. A product person deciding what the zone should become, interpreting user feedback, articulating what correct looks like. That step is still happening at human speed because it requires human judgment.</p><p>Downstream, the constraint is validation. Not &#8220;did the tests pass&#8221; but &#8220;did the user&#8217;s experience actually improve.&#8221; That step is also at human speed because it requires watching real behavior, interpreting metrics, and making a judgment call about whether to iterate or ship.</p><p>The middle of the process, where the code gets written and tested, is now fast. The tools that manage that middle (ticketing systems, pull request workflows, manual QA pipelines) are adding overhead to the step that no longer needs it. The process caught up to the code. The tools have not.</p><h2>What the tools were built for</h2><p>Jira was built for a world where multiple humans needed to hand work to each other and track who was doing what. Developer A finishes a feature, moves the ticket to code review, Developer B picks it up, moves it to QA, Tester C verifies it, moves it to done. Each transition represents a handoff between humans, and each handoff needs tracking because humans forget, get busy, and lose context.</p><p>When AI agents are doing the coding and testing, those handoffs shrink. The product person describes what the zone should become. The agent writes the code, generates tests, runs them, and commits with notes. The product person reviews the outcome. That is two humans in the loop at most, and often one. The 47 status transitions and custom fields in the middle are tracking handoffs that no longer happen.</p><p>This does not mean Jira is useless. It means the value shifts. The ticket is no longer instructions for a developer. It is a record that a human made a decision. The board is no longer a queue of work waiting for developers. It is a dashboard showing which zones are active and what state they are in. The audit trail is no longer for daily standup. It is for the &#8220;what happened six months ago&#8221; moments.What the tools need to become</p><p>If you redesign the tooling around the new bottlenecks, three things change.</p><p><strong>The upstream tool needs to be an observatory, not a backlog.</strong> The slowest part of the new process is figuring out what to build. That means the tool needs to surface problems faster. If Atlassian integrated observability (the kind of data you get from Splunk, Mixpanel, or Datadog) directly into the product planning layer, the feedback loop from &#8220;something broke&#8221; to &#8220;someone knows about it&#8221; would tighten from days to minutes. Right now, a tester finds a crash, writes it up in Jira, someone triages it, and eventually it reaches the person who can act on it. If the crash data surfaced automatically in the zone dashboard, the product person running that zone would see it in real time and direct an agent to investigate before a ticket ever gets written.</p><p><strong>The midstream tool needs to be an orchestration layer, not a project manager.</strong> Atlassian&#8217;s recent launch of agents in Jira (February 2026, now in open beta) points in this direction. You can assign tickets to AI agents the same way you assign them to humans. The agent shows up as a team member. You can mention it in comments, track its progress, and review its output. But the interface is still ticket-shaped. The evolution would be zone-shaped. Instead of assigning individual tickets to agents, the product person would describe what the zone should become, and the agents would break that down, execute, and report back. The human reviews the outcome, not the individual steps. Epics or stories scoped to zones, not granular tasks scoped to individual changes.</p><p><strong>The downstream tool needs to close the loop automatically.</strong> After the agents make changes and tests pass, the question is whether the user&#8217;s experience improved. That requires connecting the deployment to the metrics. Did registration errors drop after the zone sprint? Did page load times improve? Did the user behavior change? Right now, that validation is manual. Someone checks a dashboard, compares before and after, and makes a call. If the tooling connected the deployment event to the observability data automatically, validation could happen in minutes instead of days.</p><h2>What others are building</h2><p>Atlassian is not the only company rethinking this space.</p><p>Anthropic published how their internal teams use Claude Code, and the pattern is revealing. Their security engineering team described their old workflow as &#8220;design doc, write janky code, refactor, give up on tests.&#8221; Now they give Claude pseudocode, guide it through test-driven development, and check in periodically. The key phrase is &#8220;check in periodically.&#8221; The human is not in the loop on every step. They set direction and audit outcomes. Between February and August 2025, the share of Claude Code usage dedicated to implementing new features jumped from 14% to 37%. The tool shifted from helping write code to being the thing that writes the code while the human focuses elsewhere.</p><p>Cursor shipped Automations in March 2026. An always-on agent that watches for triggers. A bug report lands in Slack. The automation checks for duplicates, creates a Linear issue, investigates root cause in the codebase, attempts a fix, and posts a summary back in the thread. No human context-switched. The entire upstream-to-midstream flow happened without a human deciding anything. The human&#8217;s role was to set up the automation and review the output.</p><p>Devin takes full task delegation further. You hand it a problem, it works asynchronously, and reports back with a pull request. The developer is not co-editing. They are reviewing outcomes.</p><p>The pattern across all of them: the human is moving further from the individual steps and closer to setting direction and reviewing results. The question that none of these tools has fully answered is how far you can push the &#8220;check in periodically&#8221; model before you lose control. That is the frontier.Rovo and the platform bet</p><p>Atlassian is making a bet with Rovo Dev that is worth watching. Their agent takes a Jira ticket, breaks it into a technical plan, generates code and tests, and auto-reviews pull requests against the acceptance criteria in the ticket. It pulls context from across the Atlassian ecosystem: Confluence docs, Jira history, Bitbucket repos.</p><p>The interesting thing about this is not the code generation. Every AI coding tool does that. The interesting thing is the integration surface. The agent has access to the documentation, the ticket history, and the codebase in one context. That means the quality of its output depends heavily on the quality of those inputs. Well-maintained Confluence pages, well-written Jira tickets, and clean Bitbucket repos produce better agent output. Neglected documentation and vague tickets produce vague code.</p><p>This is the &#8220;ticket as prompt&#8221; idea from the previous post, built into a product. The ticket is literally the prompt. If it is well-written, the agent can execute. If it is vague, the output is vague. Atlassian is betting that this will push teams to write better tickets, which in turn makes the agents more useful, which makes the platform more valuable. It is a flywheel, but only if teams change how they write issues.</p><h2>What this looks like in practice</h2><p>At SportChartz, the product is made up of independent services with clear API (Application Programming Interface) boundaries. The development cycle for a zone sprint looks roughly like this:</p><ol><li><p>User feedback and error data accumulate for a zone (upstream)</p></li><li><p>The product person reviews all of it, decides what the zone should become (human judgment)</p></li><li><p>Agents execute: code changes, test generation, test execution, commits with notes (fast)</p></li><li><p>Product person reviews the outcome, not the individual commits (human judgment)</p></li><li><p>Deploy to staging, check metrics, iterate or ship (downstream)</p></li></ol><p>Steps 1 and 5 are where better tooling would help the most. Step 1 is still mostly manual (reading bug reports, checking dashboards, talking to users). Step 5 is still mostly manual (comparing metrics before and after). Steps 2 and 4 are human judgment and will stay that way. Step 3 is already fast.</p><p>Atlassian&#8217;s current tools handle step 3 well. Jira tracks the work. Bitbucket holds the code. Confluence holds the context. Rovo connects them. But steps 1 and 5 require data that Atlassian does not own yet. Error rates, user behavior, performance metrics. That is Datadog and Mixpanel territory.</p><h2>The DevOps extension</h2><p>This is really a DevOps evolution. Traditional DevOps connected development to operations: CI/CD (Continuous Integration / Continuous Deployment) pipelines, automated deployments, monitoring, alerting. The tools (Jenkins, GitHub Actions, Datadog, PagerDuty) bridged the gap between &#8220;code is written&#8221; and &#8220;code is running in production.&#8221;</p><p>The new gap is between &#8220;a problem is detected&#8221; and &#8220;a human decides what to do about it.&#8221; And between &#8220;a change ships&#8221; and &#8220;someone confirms it actually helped.&#8221; DevOps solved the deployment gap. The next evolution solves the decision gap.</p><p>The development tools (Jira, Bitbucket, Confluence) need to extend into operations territory. Not to replace Datadog or Splunk, but to bring that signal into the same interface where product people are making decisions. The agent that fixes the code is only as fast as the human who tells it what to fix. If that human has to switch between four dashboards to understand what went wrong, the bottleneck is the tool, not the person.</p><p>The platform that connects all five steps of the zone sprint, from problem detection through definition through execution through validation and back to monitoring, is the one that closes the loop. Right now, no single tool does that. Atlassian is closer than most because they already own steps 2 through 4. The question is whether they move fast enough to own the edges before someone else builds the full loop from scratch.</p><p><em>Neal Foster is Co-Founder &amp; CTO of SportChartz and Founder &amp; Partner of Vybe Capital.</em></p>]]></content:encoded></item><item><title><![CDATA[The Training Problem Nobody Talks About]]></title><description><![CDATA[Every company that scales past a handful of people hits the same wall.]]></description><link>https://nfosignal.substack.com/p/the-training-problem-nobody-talks</link><guid isPermaLink="false">https://nfosignal.substack.com/p/the-training-problem-nobody-talks</guid><dc:creator><![CDATA[nfos]]></dc:creator><pubDate>Thu, 30 Apr 2026 12:38:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UXV9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.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_!UXV9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UXV9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!UXV9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!UXV9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!UXV9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UXV9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6111591,&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://nfosignal.substack.com/i/195992024?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.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_!UXV9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!UXV9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!UXV9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!UXV9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7b95a0-e43f-4a40-8309-448bb81a666b_2752x1536.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 role="img" 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><title></title><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>Every company that scales past a handful of people hits the same wall. The people who built the thing have to stop building and start explaining.</p><p>This has always been the bottleneck. Not hiring. Not fundraising. Not product-market fit. The bottleneck is the transfer of context from the people who have it to the people who need it. And for most of the history of building companies, the answer has been some version of: hire smart people, pair them with experienced people, and wait.</p><p>AI is about to break this model. Not by solving the training problem - by making it worse in ways that aren&#8217;t obvious yet.</p><h2><strong>How training actually works</strong></h2><p>The official version is onboarding docs, wiki pages, recorded walkthroughs, maybe a buddy system. The real version is someone sitting next to someone else for a few weeks and absorbing how decisions get made. What to prioritize. What to ignore. Which shortcuts are fine and which ones create problems downstream.</p><p>This works because the new person makes small mistakes, gets corrected in context, and builds a mental model of how the organization thinks. The feedback loop is tight. The cost of mistakes is low because the scope starts small.</p><p>The whole thing depends on experienced people having time to do the correcting. And it depends on mistakes being visible enough to catch.</p><h2><strong>What AI changes</strong></h2><p>When someone uses AI to produce work - code, documents, analyses, designs - the output looks finished. It&#8217;s syntactically correct. It follows conventions. It reads like someone who knows what they&#8217;re doing wrote it.</p><p>This is the problem. A junior person producing work with AI assistance looks a lot like a mid-level person producing work without it. The visible quality gap that used to signal &#8220;this person needs more guidance&#8221; has compressed. The work looks right even when the person producing it doesn&#8217;t fully understand why it&#8217;s right.</p><p>In a code review, the difference between code written by someone who understands the system and code written by someone who prompted their way to a working solution used to be obvious. Variable naming, edge case handling, architectural choices - these things revealed how deeply someone understood what they were building. Now the AI handles all of that. The code looks clean. It passes tests. But the person who submitted it might not be able to explain why this approach was chosen over an alternative, or what breaks if the assumptions change.</p><h2><strong>The review bottleneck</strong></h2><p>Code review has always been the last line of defense. Someone experienced reads the work, spots the gaps, and either fixes them or sends it back. This worked when the volume was manageable and the patterns were recognizable.</p><p>AI-assisted development changes the math. A developer using AI tools can produce three to five times the volume of code in the same time. The reviewer&#8217;s job just got three to five times harder, and the mistakes are three to five times harder to spot because the surface-level quality is high.</p><p>The reviewer used to scan for obvious problems - style issues, missing error handling, inefficient patterns. Those are gone now. The AI handles them. What&#8217;s left are the subtle problems: wrong abstractions, misunderstood requirements, solutions that work for the current case but create tech debt for the next three cases. These take real expertise to spot, and they take time to explain.</p><p>So the people with the most context are now spending more time reviewing more output that&#8217;s harder to review. The training bottleneck didn&#8217;t get better. It got worse.</p><h2><strong>The delegation paradox</strong></h2><p>Here&#8217;s where it gets counterintuitive. AI makes individuals more productive, which should mean you can do more with fewer people. And in the short term, that&#8217;s true. A small team with AI tools can ship at a pace that would have required a much larger team three years ago.</p><p>But you still need to grow the team eventually. Markets move, products expand, and the people who built the first version can&#8217;t do everything forever. When it&#8217;s time to scale, you discover that the training infrastructure has atrophied. The experienced people have been heads-down shipping. The documentation reflects what the AI generated, not the reasoning behind it. The institutional knowledge is concentrated in fewer heads than ever.</p><p>This is the paradox: the same tools that let you move fast with a small team make it harder to grow that team later. The speed advantage creates a training debt that compounds over time.</p><h2><strong>It&#8217;s not just engineering</strong></h2><p>This pattern shows up everywhere AI touches knowledge work. A junior analyst using AI to produce financial models creates output that looks polished but might not reflect a deep understanding of the assumptions. A junior marketer using AI to write campaigns creates copy that reads well but might miss the strategic positioning that an experienced person would catch.</p><p>In each case, the visible output improves while the invisible understanding stays the same. And the experienced people who could close that gap are busier than ever because the volume of output to review has exploded.</p><p>Product management hits this too. An AI can generate a reasonable-looking PRD from a prompt. But a PRD that covers the right features, has the right scope, and makes the right tradeoffs requires understanding the customer, the market, and the technical constraints in a way that doesn&#8217;t transfer through prompting.</p><h2><strong>What I&#8217;m watching for</strong></h2><p>There&#8217;s no clean answer to this yet. The training problem has been hard for as long as companies have existed. AI is reshaping it, not solving it.</p><p>The companies that figure this out will probably find ways to make the reasoning visible, not just the output. Some version of showing your work that scales beyond &#8220;explain your code in a pull request description.&#8221; Something that captures why decisions were made, not just what was decided.</p><p>The ones that don&#8217;t figure it out will build fast, ship fast, and then stall when the original team burns out and no one else can pick up where they left off. The training debt comes due the same way tech debt does - gradually, then suddenly.</p><p>I think about this a lot because I&#8217;m building a company right now where the AI-to-human ratio in the development process is high. The leverage is real. But so is the risk that the knowledge stays in too few heads for too long.</p><p><em>Neal Foster is Co-Founder &amp; CTO of SportChartz and Founder &amp; Partner of Vybe Capital.</em></p>]]></content:encoded></item><item><title><![CDATA[Measure Once, Cut Twice]]></title><description><![CDATA[The bottleneck in software development moved. The process hasn't caught up.]]></description><link>https://nfosignal.substack.com/p/measure-once-cut-twice</link><guid isPermaLink="false">https://nfosignal.substack.com/p/measure-once-cut-twice</guid><dc:creator><![CDATA[nfos]]></dc:creator><pubDate>Fri, 24 Apr 2026 02:31:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0-zs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.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_!0-zs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0-zs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!0-zs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!0-zs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!0-zs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0-zs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8848172,&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://nealcfoster.substack.com/i/192631046?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.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_!0-zs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!0-zs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!0-zs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!0-zs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F614361b9-9330-4cbf-a98e-95b78251ab19_2816x1536.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 role="img" 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><title></title><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>My father was a carpenter. He had a rule: measure twice, cut once. It made perfect sense. Wood costs money. A bad cut wastes material. You cannot un-cut a board. So you invest the time upfront to make sure the cut is right.</p><p>I used to flip it on him just to hear the lecture. Measure once, cut twice. He would shake his head every time.</p><p>His rule assumed that measuring was cheap and cutting was expensive. In his world, that was true. In software development, it used to be true too. Writing code was the hard part. A bad deployment could take down production for hours. Rolling back was painful. A bug that made it to customers meant going through the entire fix cycle again. So teams invested heavily in requirements documents, design reviews, test plans, staging environments. Measure twice, cut once.</p><p>The economics have changed. In cloud systems with CI/CD<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>, a bad cut is cheap. Deploy, see it break, roll back in seconds, fix, deploy again. And now, with AI writing the code, the cut itself takes minutes instead of days. The ratio flipped. Measuring is now the expensive part.</p><p>Measure once, cut twice is not reckless. It is rational when cutting is fast and cheap and measuring is slow and expensive. A detailed requirements document in Jira takes longer to write than just building the thing, seeing if it works, and iterating. The prototype becomes the spec.</p><h2><strong>The new bottleneck</strong></h2><p>The traditional development cycle had a clear bottleneck: writing code. The process around it (requirements, ticketing, reviews, testing) existed to make sure the expensive part went smoothly. Testers filed bugs. Product managers triaged them. Developers picked them up, understood the context, wrote the fix, wrote tests, opened a pull request. Someone reviewed it. Quality assurance verified it. Everything waited on the code.</p><p>Now the code part takes minutes. An AI assistant can write the fix and the tests in one shot. But everything around it moves at the same speed it always did. Someone still has to decide if the bug matters. Someone still has to describe it well enough that the fix is correct. Someone still has to verify the fix actually addresses the real problem. Those are all judgment calls, and judgment does not speed up just because code generation did.</p><p>If coding used to be 70% of the cycle and coordination was 30%, the proportions are closer to reversed now. The process that was designed to manage the slow part is now adding friction to the fast part.</p><h2><strong>Two functions that stay human</strong></h2><p>As AI compresses the middle of the development cycle, two distinct human functions emerge on either side. They are separate for good reason, primarily skill.</p><p>The first is product. This is the technical development side. The person who understands the system, makes architectural decisions, orchestrates AI agents across zones, and judges whether the output is correct. They need product sense to know what to build and technical depth to know if it was built right. The old titles do not map cleanly. This is not a traditional developer waiting for a spec. It is not a traditional product manager who cannot read the code. It is someone who can hold the full loop: understand the problem, decide the solution, direct the agents, evaluate the output, and iterate. A technical product manager. A lead developer with product instincts. The title matters less than the ability to run the whole cycle.</p><p>The second is marketing, in the broadest sense. Customer-facing. Support. The person who understands users, talks to them, interprets their feedback, and translates what they are experiencing into something actionable. They are the source of truth for what the customer actually needs, which is often different from what the customer says they want. Their output feeds the product side. If it is vague, the product person builds the wrong thing faster than ever.</p><p>AI can write code, generate tests, draft documentation, even summarize user feedback. But it cannot decide what the product should become. And it cannot understand what a frustrated user is really telling you. Those two judgment functions stay human. Everything in between is compressing.</p><h2><strong>Where roles converge</strong></h2><p>The most valuable person on a team right now is the one who can look at a batch of user feedback, understand the product implications, make a judgment call about what the area should become, and then directly orchestrate the AI agents to build it. That person does not need a separate developer to translate their vision into code. And a developer who cannot make product decisions is stuck waiting for someone to tell them what to build, which is the new bottleneck.</p><p>Testing follows the same pattern. The hard part of testing was never running the tests. It was knowing what to test. Edge cases that matter. Scenarios that reflect real user behavior. The judgment about which failures are acceptable and which are not. That is the same &#8220;defining correct&#8221; problem, just applied to quality instead of features. If the product person is running a zone, they already know what correct looks like. They are the best person to define the test criteria. AI generates and runs the tests. The separate QA<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> team as a handoff point becomes unnecessary when one person holds the full context.</p><p>This is a convergence. The line between developer, product manager, and tester is dissolving. Not because the skills are less important, but because one person with AI support can now hold more of the loop than was previously possible.</p><h2><strong>The new baseline</strong></h2><p>Some of what follows is already happening at well-run engineering organizations. These are not new ideas. But they used to be what separated great teams from good ones. They are becoming what separates functional teams from dysfunctional ones. The bar moved.</p><p><strong>Playing zone.</strong> The best teams are organizing work by blast radius, not ticket priority. They group issues by what part of the system they touch, not by who reported them or how urgent they sound. At SportChartz, the product is made up of multiple running services with clear API<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> boundaries between them. When we see crash bugs in registration, and registration touches the subscriber database, we look at all the pending issues that also touch the subscriber database. Feature requests, bugs, performance complaints. We group them together, assign one person to that zone, and do a focused sprint where that person absorbs all the feedback at once. The output is not &#8220;12 bugs fixed.&#8221; It is &#8220;this area of the app is significantly better.&#8221; The bug reports are not a to-do list. They are research input for rethinking the section.</p><p><strong>Scoping regression to the change surface.</strong> If you change 12 things scattered across the product, you need to regression test the whole product. If you change 12 things all within one contained area behind a clear API boundary, you regression test that area thoroughly and do a light smoke test on the rest. Change a lot in a smaller area, run full regression on that area, then rotate to the next zone. Each zone ships independently. The whole product moves forward without any single release touching everything at once.</p><p><strong>Treating AI as a participant, not a helper.</strong> This means more than giving developers access to Copilot or Claude Code. It means structuring your workflow so AI agents can consume the same inputs your developers consume. If your bug reports are only understandable by a human who already knows the codebase, you have a bottleneck that AI cannot help with.</p><p><strong>Accepting that iteration is cheaper than specification.</strong> The 2025 DORA<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> report found that AI does not automatically improve software delivery. It amplifies existing conditions. Good teams get faster. Teams with heavy process and fragmented workflows get more mess, faster. The teams that benefit most are the ones that already had short iteration cycles and were willing to ship, observe, and adjust.</p><h2><strong>Not everything changed</strong></h2><p>Some things still need the measure-twice treatment. Data migrations. Security. Anything touching money. Regulatory compliance. Infrastructure that, once deployed, is hard to undo. These are still wood. A bad cut is still expensive and sometimes irreversible.</p><p>The mistake most teams are making is treating everything like wood because that is what the process was built for. And the mistake some AI-first teams are making is treating everything like cloud because the tools make it feel that way. The reality is that every codebase has both. Knowing which parts are wood and which are cloud is itself a skill.</p><h2>A note on scale</h2><p>Everything above describes how small, product-led teams are running today. The pattern changes at enterprise scale. At 300 engineers across multiple product lines, horizontal concerns don&#8217;t fit inside a zone. Platform architecture, security, reliability, data governance. And the softer things: how junior engineers learn the codebase, how designs stay coherent across teams. They all span zones, and they need people and structures dedicated to them. The zone model is a local pattern, not an organizational one, and scaling it requires a different set of decisions about where zones end and shared platforms begin.</p><h2><strong>The frontier</strong></h2><p>The table stakes get you to functional. The next set of problems is harder, and not solved yet.</p><p><strong>Bug reports as prompts.</strong> If every issue in your tracking system was written well enough to be directly actionable by both a human and an AI agent, the entire cycle from report to fix to test gets faster. The bug report becomes the prompt. That requires a different way of writing issues than what most teams are used to.</p><p><strong>Test case generation from requirements.</strong> If the requirement is clear enough to be a prompt, then generating test cases from it is almost mechanical. &#8220;Given this input, expect this output. Given this edge case, expect this error.&#8221; The test cases are implicit in a well-written requirement. AI can extract them. But it only works if the requirement is well-written, which brings us back to the two human functions.</p><p><strong>Automated regression scoped by dependency graph.</strong> Right now, deciding what to regression test after a change is a human judgment call. If your system has a clear dependency map, that decision can be automated. Change the subscriber database layer, automatically run every test that touches subscriber data, skip the rest. The architecture has to support it, but the tooling is getting close.</p><p><strong>The workforce question.</strong> Companies are cutting 10-20% of engineering headcount and pointing to AI as the reason. Some of them restructured how they work first and then realized they needed fewer people per zone because each person is more productive. Some just cut headcount without changing the process and are now wondering why the remaining team cannot absorb the work. The difference is whether the cuts followed a real change in how work gets done, or whether &#8220;AI&#8221; was just the justification for a cost reduction. At scale, you might have five product people each running zones with AI agents, and two or three marketing people feeding them user signal. That is a team of eight doing what used to take thirty. Not because anyone was unnecessary, but because the coordination overhead between roles disappeared when one person could hold more of the loop.</p><h2><strong>In practice</strong></h2><p>I spent decades building software in both embedded and cloud environments. In embedded systems, you still measure twice. The hardware is real. A bad cut means a physical product recall. In cloud systems, the cost of a failed cut dropped so far that the old process creates more drag than it prevents.</p><p>The teams that are moving fastest right now are playing zone. They organize by blast radius, scope their regression to the change surface, and treat bug reports as research input for area-level redesigns rather than individual tickets. The people running those zones are a new kind of role, part developer, part product manager, part tester. They hold the full loop, and AI handles the parts that used to require separate people with separate handoffs.</p><p>The practical side of this is in how you structure the inputs. Jira issues written as prompts. Test cases generated from well-defined requirements. Workflows where AI agents participate in the development cycle alongside humans. That is where the zone model pays off.</p><p></p><p><em>Neal Foster is Co-Founder &amp; CTO of SportChartz and Founder &amp; Partner of Vybe Capital.</em></p><p></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>CI/CD: continuous integration and continuous deployment.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>QA: quality assurance.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>API: application programming interface.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>DORA: DevOps Research and Assessment, an annual report on software delivery performance.</p></div></div>]]></content:encoded></item><item><title><![CDATA[The Feedback Loop is the Product]]></title><description><![CDATA[Everything else just go cheaper.]]></description><link>https://nfosignal.substack.com/p/the-framework-doesnt-know-about-the</link><guid isPermaLink="false">https://nfosignal.substack.com/p/the-framework-doesnt-know-about-the</guid><dc:creator><![CDATA[nfos]]></dc:creator><pubDate>Thu, 09 Apr 2026 11:09:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4doT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.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_!4doT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4doT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!4doT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!4doT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!4doT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4doT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6147627,&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://nfosignal.substack.com/i/192630753?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.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_!4doT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.png 424w, https://substackcdn.com/image/fetch/$s_!4doT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.png 848w, https://substackcdn.com/image/fetch/$s_!4doT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!4doT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb05c48-08b8-4331-b524-ab306ee052a7_2752x1536.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 role="img" 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><title></title><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>Product development has always had a cost problem.</p><p>Not the cost of building. The cost of being wrong. A wrong build used to mean months of wasted engineering, a missed quarter, a planning cycle spent undoing what the previous one created. So the frameworks that survived were the ones that invested heavily upstream. Understand the market. Define the buyer. Write the requirements. Get it right on paper before you touch the code, because touching the code is expensive.</p><p>That logic was sound. It&#8217;s just no longer the constraint.</p><h2>The cost of being wrong</h2><p>When building takes days instead of months, the cost of being wrong collapses. You can build the wrong thing, show it to a real user, learn exactly why it&#8217;s wrong, and rebuild it in the time it used to take to write the requirements document for the first version.</p><p>This doesn&#8217;t mean the upstream work stops mattering. Market problems don&#8217;t change faster just because you can build faster. Knowing who you&#8217;re for, what you do for them, why you&#8217;re different: that&#8217;s strategy, not implementation. If anything, the speed of AI-assisted building makes positioning more important, because you can build so many things that the discipline of choosing what not to build becomes the real constraint.</p><p>What changes is everything between the insight and the market.</p><h2><strong>The spec is the build</strong></h2><p>The long requirements document was a technology for managing expensive uncertainty. Specify every interaction, every edge case, every acceptance criterion before development starts, because development is the expensive part and you need to get it right on paper first.</p><p>When building is cheap, the prototype is the spec. You build it, react to it, adjust. The document that used to justify the build is now the build itself. A rough sketch and a conversation replace twenty pages nobody finishes reading anyway.</p><p>Roadmaps longer than a quarter become fiction. If you can build and validate a feature in two weeks, a twelve-month roadmap is six learning cycles out of date before you&#8217;re halfway through it.</p><h2><strong>What the product actually is</strong></h2><p>But the deeper shift isn&#8217;t about speed. It&#8217;s about what the product actually is.</p><p>In the traditional model, the product is what you ship. The feedback loop is how you improve it. They&#8217;re sequential. You build, you launch, you learn, you plan, you build again. The learning informs the next cycle.</p><p>In an AI-accelerated model, the feedback loop is the product. The thing you ship on day one is a hypothesis. The thing you ship on day thirty, after four or five iterations shaped by real usage, is the product. The learning process and the building process aren&#8217;t sequential anymore. They&#8217;re the same activity.</p><h2><strong>The skill that matters now</strong></h2><p>This changes what skill matters most. It isn&#8217;t requirements writing. It isn&#8217;t even building. It&#8217;s pattern recognition across fast feedback.</p><p>Can you watch five users interact with something you shipped three days ago and identify the common thread? Can you tell the difference between &#8220;this is confusing because we implemented it poorly&#8221; and &#8220;this is confusing because the concept is wrong&#8221;? Can you distinguish a user struggling with the interface from a user who doesn&#8217;t actually have the problem you thought they had?</p><p>These are judgment calls that require deep market understanding. The understanding doesn&#8217;t change. The speed at which you have to apply it does.</p><h2><strong>The frameworks aren't wrong</strong></h2><p>The frameworks built for the old cost structure aren&#8217;t wrong. The market orientation is right. The buyer focus is right. Pragmatic Marketing got the important things correct.</p><p>What they couldn&#8217;t anticipate is a world where the build is no longer the expensive part. Where the cost of correcting is lower than the cost of planning. Where the thing you learn by shipping in week one is worth more than anything you could have specified in the months before it.</p><p>The feedback loop was always how products got better.</p><p>Now it&#8217;s how products get made.</p><p></p><p><em>Neal Foster is Co-Founder &amp; CTO of SportChartz and Founder &amp; Partner of Vybe Capital.</em></p>]]></content:encoded></item><item><title><![CDATA[How We Got to Agents]]></title><description><![CDATA[SportChartz started as a spread reversion model.]]></description><link>https://nfosignal.substack.com/p/how-we-got-to-agents</link><guid isPermaLink="false">https://nfosignal.substack.com/p/how-we-got-to-agents</guid><dc:creator><![CDATA[nfos]]></dc:creator><pubDate>Sat, 04 Apr 2026 15:31:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CqAH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.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_!CqAH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CqAH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!CqAH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!CqAH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!CqAH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CqAH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f3aba128-54eb-4422-925f-e29cb754e777_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7063675,&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://nealcfoster.substack.com/i/192630339?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.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_!CqAH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!CqAH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!CqAH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!CqAH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3aba128-54eb-4422-925f-e29cb754e777_2816x1536.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 role="img" 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><title></title><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>SportChartz started as a spread reversion model. A way to predict the probability of reaching the closing spread within a certain number of drives. The charting came later, once we transformed the data and realized the patterns that CMTs use in equities were showing up in the game signal. That&#8217;s when it became a charting platform, modeled after TradeStation and StockCharts.com. The path from there to an agent platform was a series of problems we didn&#8217;t see coming until we were standing in front of them.</p><h2><strong>The charting tool</strong></h2><p>Once the charting system was in place, the platform gave users Bollinger Bands, RSI, MACD, and Spread Deviation, all working on data that&#8217;s been reindexed by game events and transformed into a proper signal.</p><p>The first version supported up to ten simultaneous games. That felt like plenty. We&#8217;d pick the marquee matchups (prime-time NFL, nationally televised NBA games) and provide charts for the games people were already watching.</p><h2><strong>The selection problem</strong></h2><p>Then we started learning from the CMTs using the platform. Some of them weren&#8217;t interested in the marquee games. They were trading mid-week college basketball. Tuesday night MAC conference games. The kind of games most people don&#8217;t even know are happening.</p><p>The less prominent games were sometimes better trading games. Less efficient markets. Fewer sharp bettors watching. The prediction market prices reflected less information, which meant the technical signals were often more actionable. A divergence in a prime-time game might get corrected quickly because thousands of people are watching. The same divergence in a Tuesday night game might persist longer because nobody&#8217;s paying attention.</p><p>We&#8217;d spent time trying to figure out which games and leagues to support. The answer turned out to be all of them. All power conferences for NCAA, all pro games. On a day when multiple sports overlap (pro and college football, NBA, college basketball) that can be 40 to 50 games.</p><p>So we rebuilt the architecture to support all of them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sbW6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sbW6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.png 424w, https://substackcdn.com/image/fetch/$s_!sbW6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.png 848w, https://substackcdn.com/image/fetch/$s_!sbW6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.png 1272w, https://substackcdn.com/image/fetch/$s_!sbW6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sbW6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.png" width="1456" height="2855" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2855,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1442121,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nealcfoster.substack.com/i/192630339?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.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_!sbW6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.png 424w, https://substackcdn.com/image/fetch/$s_!sbW6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.png 848w, https://substackcdn.com/image/fetch/$s_!sbW6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.png 1272w, https://substackcdn.com/image/fetch/$s_!sbW6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae18231-1b81-4727-9f68-6005a6eba357_3140x6156.png 1456w" sizes="100vw" loading="lazy"></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 role="img" 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><title></title><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><h2><strong>The consumption problem</strong></h2><p>Supporting 50 games created a new problem. Nobody can read 50 charts. The charting tool was excellent for a user focused on one or two games. But the whole point of covering everything was that the opportunities could be anywhere. A CMT watching the Celtics game might be missing a better setup in a college game they didn&#8217;t know was happening.</p><p>We opened a Discord and encouraged users to share what they were trading. The idea was community intelligence, CMTs spotting signals in different games and surfacing them for each other.</p><p>This didn&#8217;t work the way we hoped. What we got was after-the-fact reporting. &#8220;I caught this divergence in the second half and it played out.&#8221; That&#8217;s interesting for learning, but useless for acting in the moment. By the time someone posted about a signal, the window had closed.</p><h2><strong>Alerts</strong></h2><p>The fix was to take the human out of the communication loop. Instead of waiting for a user to spot something and post about it, we built alerts. The platform monitors the charts and pushes notifications when specific conditions are met. A MACD crossover in the Memphis-Houston game hits your phone whether you&#8217;re watching that game or not.</p><p>This solved the timing problem. The signal reached the user while it was still actionable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HsTO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HsTO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.png 424w, https://substackcdn.com/image/fetch/$s_!HsTO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.png 848w, https://substackcdn.com/image/fetch/$s_!HsTO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.png 1272w, https://substackcdn.com/image/fetch/$s_!HsTO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HsTO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.png" width="1456" height="936" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:936,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:230154,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nealcfoster.substack.com/i/192630339?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.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_!HsTO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.png 424w, https://substackcdn.com/image/fetch/$s_!HsTO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.png 848w, https://substackcdn.com/image/fetch/$s_!HsTO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.png 1272w, https://substackcdn.com/image/fetch/$s_!HsTO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ce4e54-a9d3-4cb2-9007-95186b7c498d_1786x1148.png 1456w" sizes="100vw" loading="lazy"></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 role="img" 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><title></title><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><h2><strong>The complexity wall</strong></h2><p>We started showing the platform to people outside the CMT community. Handicappers with deep knowledge of teams and matchups. Sports fans who traded prediction markets casually. They saw the alerts, understood that something was happening, but couldn&#8217;t act on them.</p><p>The alerts said things like &#8220;bearish RSI divergence&#8221; and &#8220;Bollinger squeeze breakout.&#8221; For someone who speaks that language, these are clear and specific. For someone who doesn&#8217;t, they&#8217;re noise. Even when we simplified the language, the underlying issue remained. Acting on a technical signal requires understanding what it means in context, and that understanding takes time to develop.</p><p>These users didn&#8217;t want to become chartists. They had their own frameworks for thinking about games. They wanted the information the charts were producing, translated into terms they could use without leaving their existing workflow.</p><h2><strong>The agent decision</strong></h2><p>Instead of trying to teach everyone technical analysis, we built agents that watch the charts, interpret the signals, and communicate them in plain terms. The agent does the chart reading. The user gets the insight.</p><p>For CMTs, the agents became something more. A way to encode their strategies and run them at scale across every live game. A technician who developed a multi-indicator strategy for identifying momentum shifts could program it into an agent and have it monitor 50 games simultaneously. The strategy runs everywhere at once. The CMT&#8217;s expertise scales beyond what they could do watching charts manually.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AvEX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AvEX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.png 424w, https://substackcdn.com/image/fetch/$s_!AvEX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.png 848w, https://substackcdn.com/image/fetch/$s_!AvEX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!AvEX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AvEX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.png" width="1456" height="863" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:863,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:261340,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nealcfoster.substack.com/i/192630339?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.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_!AvEX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.png 424w, https://substackcdn.com/image/fetch/$s_!AvEX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.png 848w, https://substackcdn.com/image/fetch/$s_!AvEX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!AvEX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f21278-153d-45a0-8377-ff3f7aa4dba8_2116x1254.png 1456w" sizes="100vw" loading="lazy"></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 role="img" 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><title></title><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><h2><strong>The app we didn&#8217;t build</strong></h2><p>There was a point where we discussed building separate apps. A pro version for CMTs with full charting tools and strategy builders. A simple version for casual users with just the agent notifications and plain-language summaries.</p><p>Separate apps would have missed the point. The value isn&#8217;t in the tool. It&#8217;s in the network. CMTs and casual users on the same platform create something that separate apps can&#8217;t. A CMT builds a strategy. The agent runs it. A handicapper uses the output. They&#8217;re on the same platform, benefiting from each other&#8217;s presence, even though they&#8217;re using it in completely different ways. Split them into separate apps and you lose that connection.</p><h2><strong>Where this may be going</strong></h2><p>Every step in this build, from charting tool to alerts to agents, was a response to a real problem we discovered by putting the product in front of users. That's still the only method we trust.</p><p><em>Neal Foster is Co-Founder &amp; CTO of SportChartz and Founder &amp; Partner of Vybe Capital.</em></p>]]></content:encoded></item><item><title><![CDATA[Speed Kills Quality (Until It Doesn't)]]></title><description><![CDATA[I had a working R Shiny prototype for football spread reversion predictions.]]></description><link>https://nfosignal.substack.com/p/speed-kills-quality-until-it-doesnt</link><guid isPermaLink="false">https://nfosignal.substack.com/p/speed-kills-quality-until-it-doesnt</guid><dc:creator><![CDATA[nfos]]></dc:creator><pubDate>Sat, 04 Apr 2026 15:23:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7H1g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.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_!7H1g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7H1g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!7H1g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!7H1g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!7H1g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7H1g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5190080,&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://nealcfoster.substack.com/i/192630083?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.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_!7H1g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!7H1g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!7H1g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!7H1g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b38198b-fe31-4d22-a228-e3c20928d6d2_2816x1536.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 role="img" 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><title></title><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>I had a working R Shiny prototype for football spread reversion predictions. A handful of users, no security, R doesn&#8217;t scale. The goal was to port the whole thing to a real platform and allow Chartered Market Technicians to use it across multiple live games.</p><p>I turned to Claude Code. Within a couple of days we had the AWS scaffolding together: front end, containers, deployment pipelines, documentation. It filled in gaps in my understanding of CloudWatch monitoring, DNS, VPC networking.</p><p>Then we ported the R data feed and analysis modules to Python, built test scripts, and got the spread reversion model running on the new infrastructure. The main issues were anomalous data events from the sport feed: timeouts, referee administration events, edge cases that the R prototype had papered over.</p><p>Auth was next. Multiple users means login. I partnered with Okta and Claude implemented the integration. Then caching, so every game analysis wasn&#8217;t re-transforming the data for every user.</p><p>The caching architecture was where the prompting workflow started to take shape. I&#8217;d pass the design and requirements to Claude, which generated ideas and questions. I&#8217;d add my thinking, then pass the whole thread to ChatGPT for a different perspective, then back again. It was conversational, the same kind of iteration you&#8217;d get from a whiteboard session with senior engineers. The difference was no scheduling, no Confluence write-up, no follow-up meeting. If I wanted additional insight, I opened a new session. The rigor was the same. The coordination overhead disappeared.</p><p>By the end of football season, we had a working multi-user app. Then I described what I really wanted to build: a charting platform modeled after TradeStation and StockCharts.com, using the enriched data feed, with tools for users to annotate the charts. We had a working model shortly after.</p><h2><strong>The backlog problem</strong></h2><p>Development capacity had outpaced every other part of the operation. CMT associates providing product feedback generated a backlog longer than I have ever seen. More sports, more indicators, additional analysis modules, charting tools, sharing, social features, communities. The list kept growing.</p><p>And the capacity to build it was there. Functionality that would take a traditional team several months was getting done in weeks.</p><p>I refactored the services with Claude so they could deploy independently, aligned to functional areas that matched the backlog feedback. Terraform infrastructure scripts, database changes, all part of the same refactor.</p><p>Then I opened a Claude coding session for each microservice, with a shared markdown library for documentation. I ran the backlog in parallel. Instead of treating it as a list of issues to resolve, I started asking a simple question for each service: &#8220;how can we make this awesome?&#8221; I&#8217;d go into planning mode with that service&#8217;s Claude session, implement not just the fixes but the features to make it great. While one agent was running, I switched to the next.</p><p>At Dell, VMware, and Comcast, this scope of work would have been an epic with stories broken across multiple sprints. Each story groomed, estimated, assigned, reviewed. Sprint planning, standups, retros, cross-team dependencies managed through program increments. The agile framework exists to coordinate people across functional areas. When the development capacity changes this dramatically, that coordination model starts working against you. The ceremonies become the bottleneck.</p><h2><strong>The ratio problem</strong></h2><p>Then reality stepped in. The app had a lot of functionality, well beyond MVP scope. And the process around it hadn&#8217;t kept up.</p><p>Telling users what should happen in each release, having tests we could execute before deployment, those became luxuries. We were changing so much that even with a few users, I couldn&#8217;t align a bug report to know which release it was filed against.</p><p>The core problem was a ratio. Traditional dev cycles have a rough balance: a week of development matched to a week of testing. AI compressed the development side to almost nothing, but the testing cycle stayed the same. We couldn&#8217;t reduce the testing. So we had to increase the development work per release.</p><p>But we couldn&#8217;t just pull more Jira issues by priority. If we did, we&#8217;d be changing too many areas of the app at once. The increased surface area meant more regression testing, which made the problem worse, not better.</p><h2><strong>Making it awesome by service</strong></h2><p>We changed the goal. Instead of taking Jira issues from a priority perspective across the whole app, we looked at a single service with high-priority bugs. Then we brainstormed on how to make that service awesome.</p><p>The bugs were the entry point, but the scope expanded to include features and improvements for that service. A week of focused development on one service matched the test cycle. The regression surface stayed contained because we were only changing one functional area. The ratio balanced out.</p><p>This is the approach now. Pick a service, go deep, make it great, test it properly, deploy it. Then move to the next service. The speed is still there, it just runs within a structure that keeps quality connected to it.</p><h2><strong>Where we are now</strong></h2><p>The current focus is scaling the development process. The system works. The methodology works. It lives in markdown documentation and in practice &#8212; architecture decisions, service boundaries, deployment procedures, development history, post-mortems, each service with its own complete record. Confluence got replaced by Obsidian and a searchable index across all of it. Claude&#8217;s context window means every coding session starts from scratch, so the docs became the continuity layer.</p><p>The AI compressed the development cycle, but it didn&#8217;t compress the thinking, the testing, or the process around it. The speed is transformative, but only if the rest of the operation can keep up with it.</p><p><em>Neal Foster is Co-Founder &amp; CTO of SportChartz and Founder &amp; Partner of Vybe Capital.</em></p>]]></content:encoded></item></channel></rss>