<?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[Jagadeesh Rampam]]></title><description><![CDATA[Tech, research, field notes, BTS of our products: Parjanya v2.0, WilderhoodTV, Smriti LLM
https://phagyul.ai]]></description><link>https://blog.phagyul.ai</link><image><url>https://blog.phagyul.ai/img/substack.png</url><title>Jagadeesh Rampam</title><link>https://blog.phagyul.ai</link></image><generator>Substack</generator><lastBuildDate>Sun, 26 Jul 2026 02:21:13 GMT</lastBuildDate><atom:link href="https://blog.phagyul.ai/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jagadeesh Rampam]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[jagadeeshrampam@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[jagadeeshrampam@substack.com]]></itunes:email><itunes:name><![CDATA[Phagyul AI Systems Pvt Ltd]]></itunes:name></itunes:owner><itunes:author><![CDATA[Phagyul AI Systems Pvt Ltd]]></itunes:author><googleplay:owner><![CDATA[jagadeeshrampam@substack.com]]></googleplay:owner><googleplay:email><![CDATA[jagadeeshrampam@substack.com]]></googleplay:email><googleplay:author><![CDATA[Phagyul AI Systems Pvt Ltd]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[When SageMaker Wasn't the Problem]]></title><description><![CDATA[The Parjanya v2.0 case study: how AWS primitives replaced a managed ML platform through reconciliation, replay, and event-driven orchestration]]></description><link>https://blog.phagyul.ai/p/when-sagemaker-wasnt-the-problem</link><guid isPermaLink="false">https://blog.phagyul.ai/p/when-sagemaker-wasnt-the-problem</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Wed, 24 Jun 2026 05:23:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QzHI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As a follow-up to the original engineering note on Parjanya v2.0, this deep dive explores the architectural decisions, operational lessons, and production incidents that shaped the migration away from Amazon SageMaker toward a purpose-built AWS-native inference orchestration platform.</p><p>The original note documented how a <em><strong>combination of EC2 GPU warm pools, Auto Scaling Groups, SQS, EventBridge, DynamoDB Streams, and pre-baked GPU AMIs enabled Parjanya to eliminate SageMaker cold-start penalties, achieve scale-to-zero economics, and build a replay-native control plane capable of self-repair and reconciliation</strong></em>. Rather than treating GPU inference as a model-serving problem, the architecture reframed it as an orchestration and reconciliation problem, resulting in dramatically lower startup latency, parallel execution, improved replay safety, and reduced operational cost.</p><p>This article expands on that foundation by examining the complete system architecture, the TBIE (Truth, Belief, Intent, Execution) operating model, the move from polling to event-driven reconciliation, and the real production incidents that ultimately shaped the platform&#8217;s reliability model.</p><h3>EXECUTIVE SUMMARY</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QzHI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QzHI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!QzHI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!QzHI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!QzHI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QzHI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4da6209a-e84d-4b8d-b391-3ad31aaa2e69_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;:1537810,&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://blog.phagyul.ai/i/203346926?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_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_!QzHI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!QzHI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!QzHI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!QzHI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da6209a-e84d-4b8d-b391-3ad31aaa2e69_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Parjanya v2.0 is Phagyul AI&#8217;s image ingestion and GPU-based visual scoring, later evolved as curation platform by replacing score engine to rule engine. </p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;dc8842b8-bd28-4ff0-a8f2-d08d86644c7c&quot;,&quot;caption&quot;:&quot;I did not set out to replace a scoring engine with a rule engine. I set out to make the system cheaper, easier to explain, and less fragile as I was not keen on moving to g5.xlarge or g6.xlarge due to prompt sizes increased and would be lot of churn in terms of architectural and infra changes, comes with re testing every functionality and the increase i&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;From Score Engine to Rule Engine: Why I Rebuilt the Decision Layer&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-14T11:27:06.000Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!UKjF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/from-score-engine-to-rule-engine&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:197643272,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Its nightly VLM inference pipeline was originally built on Amazon SageMaker. The pipeline processed photographer uploads using Qwen3-8B-VLM and worked &#8212; but it revealed a fundamental architectural mismatch over time. Wall-clock time regularly stretched to ~11 hours. Cold starts ate into every nightly window. Replay handling for failed enrichments grew fragile. Sequential execution prevented scale-out. And persistent managed-platform overhead stopped making financial sense for burst-only workloads.<br>The core insight that drove the migration was a reframing of the problem. The question was no longer </p><blockquote><p><strong>&#8216;how do we run a model?&#8217;</strong> </p></blockquote><p>It became: </p><blockquote><p><strong>&#8216;how do we orchestrate burst-scale inference reliably, replay safely, and cost-efficiently?&#8217;</strong> </p></blockquote><p>That reframing led to retiring SageMaker and rebuilding the pipeline entirely from native AWS primitives &#8212; EC2 GPU warm pools, Auto Scaling Groups, SQS-driven orchestration, EventBridge-triggered scale-out, and pre-baked GPU AMIs with Qwen3-8B-VLM weights embedded.</p><div class="comment" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/&quot;,&quot;commentId&quot;:263136758,&quot;comment&quot;:{&quot;id&quot;:263136758,&quot;date&quot;:&quot;2026-05-22T03:22:43.452Z&quot;,&quot;edited_at&quot;:null,&quot;body&quot;:&quot;Over the past few weeks, I&#8217;ve been working on a deep dive around one of the most interesting production transitions we made in Parjanya v2.0 under the TBIE case study series.\n\nI have retired a SageMaker-based VLM inference pipeline that processed uploaded photographer images nightly using Qwen3-8BVLM.\n\nThe original system worked.\n\nBut operationally, it exposed a deeper architectural mismatch.\n\nEvery nightly batch incurred GPU cold starts before the first image could even be processed. Replay handling for failed enrichments became increasingly fragile. Sequential execution slowed the overall pipeline. And for a workload that only needed burst GPU inference during specific windows, the managed overhead simply stopped making sense.\n\nThe pipeline regularly stretched close to ~11 hours wall-clock.\n\nWhat became obvious after observing the system in production was this:\n\nThe problem was no longer &#8220;how do we run a model?&#8221;\n\nThe real problem was: &#8220;How do we orchestrate burst-scale inference reliably, replay safely, and cost efficiently?&#8221;\n\nThat led to rebuilding the pipeline using native AWS primitives:\n\n\n\n\n\nEC2 GPU warm pools\n\n\n\nAuto Scaling Groups\n\n\n\nSQS-driven orchestration\n\n\n\nEventBridge-triggered scale-out\n\n\n\nPre-baked GPU AMIs with Qwen3-8B-VLM weights\n\n\n\nTBIE reconciliation for replay verification and automated recovery\n\nThe outcome was more than cost optimization.\n\nIt fundamentally changed how the system behaved operationally:\n\n\n\n\n\nnear-zero or sub-minute startup latency\n\n\n\nparallel GPU workers replacing sequential processing\n\n\n\nevent-driven replay handling\n\n\n\nscale-to-demand orchestration\n\n\n\ndrastically reduced idle GPU waste\n\nThe upcoming write-up is not just about infrastructure changes.\n\nIt is a deep dive into how TBIE reconciliation patterns were applied in Parjanya v2.0 to build replay-safe, scalable GPU inference orchestration in production.\n\nOn Monday, I&#8217;ll be sharing the full TBIE case study deep dive covering:\n\n\n\n\n\nwhy the original architecture struggled\n\n\n\nthe reasoning behind the migration\n\n\n\nreconciliation-driven orchestration\n\n\n\nreplay-safe enrichment pipelines\n\n\n\nburst-scale GPU worker design\n\n\n\nlessons learned from operating the system in production\n\nOne of the biggest lessons from this transition:\n\nNot every AI workload needs a managed ML platform.\n\nSometimes the real engineering challenge sits in orchestration, reconciliation, and operational resilience.&quot;,&quot;body_json&quot;:{&quot;type&quot;:&quot;doc&quot;,&quot;attrs&quot;:{&quot;schemaVersion&quot;:&quot;v1&quot;,&quot;title&quot;:null},&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;Over the past few weeks, I&#8217;ve been working on a deep dive around one of the most interesting production transitions we made in Parjanya v2.0 under the TBIE case study series.&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;I have retired a SageMaker-based VLM inference pipeline that processed uploaded photographer images nightly using Qwen3-8BVLM.&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;marks&quot;:[{&quot;type&quot;:&quot;bold&quot;}],&quot;text&quot;:&quot;The original system worked.&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;But operationally, it exposed a deeper architectural mismatch.&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;Every nightly batch incurred GPU cold starts before the first image could even be processed. Replay handling for failed enrichments became increasingly fragile. Sequential execution slowed the overall pipeline. And for a workload that only needed burst GPU inference during specific windows, the managed overhead simply stopped making sense.&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;The pipeline regularly stretched close to ~11 hours wall-clock.&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;What became obvious after observing the system in production was this:&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;The problem was no longer &#8220;how do we run a model?&#8221;&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;marks&quot;:[{&quot;type&quot;:&quot;code&quot;}],&quot;text&quot;:&quot;The real problem was: &#8220;How do we orchestrate burst-scale inference reliably, replay safely, and cost efficiently?&#8221;&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;That led to rebuilding the pipeline using native AWS primitives:&quot;}]},{&quot;type&quot;:&quot;bulletList&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;EC2 GPU warm pools&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;Auto Scaling Groups&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;SQS-driven orchestration&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;EventBridge-triggered scale-out&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;Pre-baked GPU AMIs with Qwen3-8B-VLM weights&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;TBIE reconciliation for replay verification and automated recovery&quot;}]}]}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;The outcome was more than cost optimization.&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;It fundamentally changed how the system behaved operationally:&quot;}]},{&quot;type&quot;:&quot;bulletList&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;near-zero or sub-minute startup latency&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;parallel GPU workers replacing sequential processing&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;event-driven replay handling&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;scale-to-demand orchestration&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;drastically reduced idle GPU waste&quot;}]}]}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;The upcoming write-up is not just about infrastructure changes.&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;It is a deep dive into how TBIE reconciliation patterns were applied in Parjanya v2.0 to build replay-safe, scalable GPU inference orchestration in production.&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;On Monday, I&#8217;ll be sharing the full TBIE case study deep dive covering:&quot;}]},{&quot;type&quot;:&quot;bulletList&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;why the original architecture struggled&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;the reasoning behind the migration&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;reconciliation-driven orchestration&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;replay-safe enrichment pipelines&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;burst-scale GPU worker design&quot;}]}]},{&quot;type&quot;:&quot;listItem&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;lessons learned from operating the system in production&quot;}]}]}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;One of the biggest lessons from this transition:&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;Not every AI workload needs a managed ML platform.&quot;}]},{&quot;type&quot;:&quot;paragraph&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;Sometimes the real engineering challenge sits in orchestration, reconciliation, and operational resilience.&quot;}]}]},&quot;restacks&quot;:0,&quot;reaction_count&quot;:0,&quot;children_count&quot;:0,&quot;attachments&quot;:[{&quot;id&quot;:&quot;86f8c144-cee6-4a2d-9c22-124f46099fc5&quot;,&quot;type&quot;:&quot;image&quot;,&quot;imageUrl&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa14b656-f349-498c-8608-dd4e34858433_1672x941.png&quot;,&quot;imageWidth&quot;:1672,&quot;imageHeight&quot;:941,&quot;explicit&quot;:false}],&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;user_id&quot;:12091074,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;user_bestseller_tier&quot;:null,&quot;userStatus&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;subscriber&quot;:null}},&quot;source&quot;:null,&quot;forumChannel&quot;:null}" data-component-name="CommentPlaceholder"></div><p><br>This is a detailed internal engineering deep dive into that migration. It covers the original architecture and its failure modes, the design decisions behind each new component, how TBIE (Truth, Belief, Intent, Execution) reconciliation patterns were applied to make the system replay-safe and operationally resilient, the specific production incidents encountered and how each shaped the architecture, and the guardrails now embedded to prevent regression.<br>Key outcome: the rebuilt system achieved near-zero or sub-minute startup latency, parallel GPU workers replacing sequential processing, event-driven replay handling, scale-to-demand orchestration, and drastically reduced idle GPU waste. More importantly, it became a system that could reason about and repair its own state &#8212; a reconciliation system, not just a pipeline.</p><h2>BACKGROUND: WHAT IS PARJANYA V2.0?</h2><p>Parjanya v2.0 is the image ingestion and GPU-powered visual scoring platform at Phagyul AI Systems. Photographers upload raw images; the platform extracts technical metadata (EXIF, resolution, format), performs visual-language model inference to produce content quality scores, enforces content policy, and writes enriched metadata back to the workflow database.</p><p><strong>The data flow is:</strong></p><ul><li><p>Photographers upload images to per-tenant S3 buckets via browser-based presigned URLs &#8594; An S3 event triggers a Graviton Lambda for EXIF extraction and technical validation.</p></li><li><p>On successful validation, a DynamoDB workflow row is written with status <code>pending_vlm_enrichment</code>.</p></li><li><p>A GPU worker consumes this work, runs <strong>Qwen3-8B-VLM inference</strong>, and writes scored metadata back(later recuration) to DynamoDB.</p></li><li><p>A control plane (replay Lambda, reconciliation loop) monitors for stalled or missing work and re-orchestrates as needed.</p></li><li><p>The platform spans immutable uploads (S3), workflow state (DynamoDB), intent queues (SQS), Lambda orchestration, GPU autoscaling (ASG + EC2), browser-side uploads with CORS policies, content policy enforcement, and tenant isolation.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xv1J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b8942d-8039-4017-8555-afd877e2f0d7_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xv1J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b8942d-8039-4017-8555-afd877e2f0d7_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Xv1J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b8942d-8039-4017-8555-afd877e2f0d7_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Xv1J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b8942d-8039-4017-8555-afd877e2f0d7_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Xv1J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b8942d-8039-4017-8555-afd877e2f0d7_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xv1J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b8942d-8039-4017-8555-afd877e2f0d7_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42b8942d-8039-4017-8555-afd877e2f0d7_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;:1482571,&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://blog.phagyul.ai/i/203346926?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b8942d-8039-4017-8555-afd877e2f0d7_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_!Xv1J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b8942d-8039-4017-8555-afd877e2f0d7_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Xv1J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b8942d-8039-4017-8555-afd877e2f0d7_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Xv1J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b8942d-8039-4017-8555-afd877e2f0d7_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Xv1J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b8942d-8039-4017-8555-afd877e2f0d7_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>THE ORIGINAL SAGEMAKER PIPELINE</h3><p>Parjanya&#8217;s first VLM inference implementation used Amazon SageMaker as the compute platform. A nightly batch job was triggered on a schedule. SageMaker endpoints were provisioned, images were submitted for inference in sequence, results were collected, and endpoints were torn down.</p><p>The original system worked. It produced correct results. But it had structural problems that compounded as the platform grew:</p><ul><li><p><strong>Cold-start tax:</strong> Every nightly run incurred GPU cold starts before the first image could be processed.</p></li><li><p><strong>Sequential execution:</strong> Image inference ran sequentially across the batch; there was no parallelism at the worker level.</p></li><li><p><strong>Fragile replay</strong>: Failed enrichments required increasingly fragile custom replay logic layered on top of SageMaker&#8217;s job model.</p></li><li><p><strong>Idle cost</strong>: The platform was billed for managed infrastructure overhead even during windows with no work to do.</p></li><li><p><strong>Throughput ceiling</strong>: Wall-clock time regularly stretched to approximately 11 hours per nightly run.</p></li></ul><h2>THE ARCHITECTURAL REFRAMING</h2><p>The decision to migrate was not triggered by a single catastrophic failure. It was triggered by a change in how the problem was understood.</p><div class="pullquote"><p><strong>&#8220;The problem was no longer &#8216;how do we run a model?&#8217;</strong><br>The real problem was: <strong>&#8216;how do we orchestrate burst-scale inference reliably, replay safely, and cost efficiently?&#8217;&#8221;</strong></p></div><p>Once the problem was stated that way, SageMaker was the wrong tool. SageMaker is an excellent managed platform for running models. It is not designed to be a burst-scale GPU orchestration layer with event-driven replay. Those properties had to be bolted on from outside, which is why the replay logic was fragile and why cold start latency was unavoidable.<br>Native AWS primitives offered a better fit for the actual problem: EC2 GPU instances could be pre-baked with model weights, Auto Scaling Groups could scale to demand rather than a fixed schedule, SQS provided durable, replayable intent, and EventBridge could trigger orchestration the moment new work appeared. The result is not a simpler system &#8212; it is a more intentional one.</p><h2>THE NEW ARCHITECTURE: NATIVE AWS- PRIMITIVES</h2><h3>EC2 GPU WARM POOLS</h3><p>Rather than provisioning GPU instances from scratch each time a job runs, Parjanya v2.0 uses EC2 warm pools attached to the Auto Scaling Group. Instances are pre-initialised and held in a stopped or standby state. When the ASG scales out, warm pool instances start in seconds rather than minutes, eliminating the cold start latency that dominated the original SageMaker pipeline.</p><blockquote><p><strong>Warm pool design note:</strong> instances in the warm pool must be pre-baked with model weights already on disk. Do not rely on model download during instance boot &#8212; download failures become silent launch failures. The AMI is the contract between infrastructure and runtime.</p></blockquote><h3>PRE-BAKED GPU AMIs WITH QWEN3-8B-VLM WEIGHTS</h3><p>Each GPU AMI is built with the <strong>Qwen3-8B-VLM</strong> model weights, runtime dependencies, and worker application code baked in. The AMI is immutable. When a new model version or dependency is needed, a new AMI is built and the launch template is updated. This makes the execution environment reproducible and testable before deployment.</p><h4>Key constraints on AMI design:</h4><p>All model weights must be present at AMI build time &#8212; no remote download at boot.<br>Python environment, CUDA libraries, and worker scripts must be included in the AMI.</p><p>The launch template image tag and the AMI must be kept in sync; stale launch templates are a production risk (see Incident 6).</p><p>Container and model artifact versions are a compatibility pair &#8212; they must be validated together.</p><h3>AUTO SCALING GROUPS (ASG)</h3><p>An Auto Scaling Group manages the GPU worker fleet. The ASG is configured with a minimum of 0 instances (scale-to-zero for cost efficiency) and a maximum that reflects the burst capacity needed during active processing windows. Desired capacity is driven by queue depth rather than a schedule.</p><h4>ASG configuration decisions:</h4><ol><li><p>Scale-out is triggered by the replay Lambda when SQS queue depth exceeds threshold.</p></li><li><p>Scale-in is time-based to prevent premature termination of in-flight workers.</p></li><li><p>Instance type selection balances GPU memory requirements (Qwen3-8B-VLM needs sufficient VRAM) against cost per inference.</p></li><li><p>Warm pool instances buffer the latency between a scale-out trigger and first inference.</p></li></ol><h3>SQS-DRIVEN ORCHESTRATION</h3><p>SQS is the durable intent layer. Each message represents a single VLM inference job for one image. Messages are not ephemeral transport &#8212; they are the replayable journal of work that must happen. This is a TBIE design principle: intent must survive transient failure.</p><h4>SQS configuration decisions:</h4><ul><li><p>Visibility timeout is set to exceed the maximum realistic inference time to prevent duplicate processing.</p></li><li><p>Queue retention is set to exceed the maximum expected outage window (e.g., weekend + holiday gap) so intent survives scale-to-zero periods.</p></li><li><p>A dead-letter queue captures messages that exceed the maximum receive count, enabling manual triage of terminal failures.</p></li><li><p>Message attributes carry routing metadata: tenant ID, image key, source bucket, expected output location.</p></li><li><p>Queue retention is not a generic operational setting. It is a resilience parameter. If the GPU fleet is at zero for 3 days, messages must still be present when the fleet wakes up. Set retention to match your worst-case outage window, not a default.</p></li></ul><h3>EVENTBRIDGE-TRIGGERED SCALE-OUT</h3><p>Scale-out is event-driven via EventBridge and DynamoDB Streams. When a DynamoDB row reaches <code>pending_vlm_enrichment</code>, the stream emits an event. A stream processor filters and batches records, then invokes the replay Lambda. The replay Lambda evaluates queue state (Belief) against database state (Truth), emits SQS messages (Intent), and increases ASG desired capacity (Execution trigger).<br>This replaces a polling model where a scheduled timer would periodically scan for work. The event-driven approach gives lower latency, eliminates wasted invocations during quiet periods, and makes the system&#8217;s reaction to new work causally clear:</p><blockquote><p><strong>Truth changes &#8594; control plane notices &#8594; Intent is created &#8594; Execution follows.</strong></p></blockquote><h3>REPLAY LAMBDA (CONTROL PLANE)</h3><p>The replay Lambda is the reconciliation control plane. It is invoked by DynamoDB Streams and by periodic safety-net schedules. Its job is to compare Truth (DynamoDB workflow state) against Intent (SQS queue depth) and repair any divergence: emitting missing messages, resetting stale state, and triggering ASG scale-out when work is present.<br>The replay Lambda is a first-class reliability surface, not a background helper. If it fails silently, every other safety net becomes weaker. Its observability must be stronger than ordinary worker observability.<br>Monitor its error rate, execution duration, and whether it successfully reads queue attributes. A lambda that runs but cannot see queue state is functionally blind.</p><h2>TBIE: TRUTH, BELIEF, INTENT, EXECUTION</h2><p>TBIE is the operating model used to design, debug, and evolve Parjanya v2.0. It decomposes a distributed system into four conceptually distinct layers. The model is most valuable as a diagnostic tool: when the system behaves unexpectedly, TBIE provides a structured vocabulary for identifying which layer has diverged.</p><h3>TRUTH</h3><p>Truth is the durable, authoritative record of what is actually true. It must survive worker restarts, deploys, transient outages, and infrastructure drift.<br>In Parjanya v2.0, Truth lives in:</p><p>S3 &#8212; immutable image uploads and preview artifacts. If an object is in S3, it exists.</p><p>DynamoDB &#8212; workflow rows recording status, EXIF metadata, VLM scores, curation state, and hashes.</p><p>Derived committed state &#8212; VLM output written durably after successful inference.</p><p><strong>Truth answers questions like: </strong></p><ul><li><p>What objects exist? </p></li><li><p>What stage is this image in? </p></li><li><p>What has been computed? </p></li><li><p>What is the authoritative record for this batch?</p></li></ul><h3>BELIEF</h3><p>Belief is the operational view of reality. It is derived from Truth and current signals, but it may lag, be partial, or be noisy. Belief is what operators see first &#8212; but it must never be confused with source-of-record Truth.</p><p>In Parjanya, Belief includes:</p><ol><li><p>SQS queue depth and in-flight message counts.</p></li><li><p>ASG desired capacity, running instance count, and warm pool state.</p></li><li><p>Worker health signals and CloudWatch alarms.</p></li><li><p>GPU availability and instance lifecycle state.</p></li></ol><p>A healthy Belief is not the same as a healthy system. The queue can appear empty while Truth still holds a large pending backlog. That gap is a reconciliation failure, not an idle system.</p><h3>INTENT</h3><p>Intent is the durable record of work that has been requested. It is the replayable journal of &#8216;<em>please do this work</em>.&#8217; </p><p>The critical property of Intent is replayability: if Intent can be lost too early, transient failures become permanent failures requiring manual rescue.</p><p>In Parjanya, Intent is:</p><ul><li><p>SQS messages &#8212; each representing a single VLM inference job.</p></li><li><p>Replay jobs &#8212; reconstructed Intent emitted for rows that had pending Truth without corresponding queue messages.</p></li><li><p>Regrade jobs &#8212; Intent emitted for historical reprocessing after policy changes.</p></li></ul><h3>EXECUTION</h3><p>Execution is the stateless work that turns Intent into side effects and updated Truth. Execution is where work happens, but in a resilient system it must never be allowed to erase the record of what was supposed to happen.</p><p>In Parjanya, Execution includes:</p><ul><li><p>Graviton Lambdas for EXIF extraction and technical validation.</p></li><li><p>GPU workers running Qwen3-8B-VLM inference and writing scored results to DynamoDB.</p></li><li><p>Replay Lambda emitting Intent and triggering ASG scale-out.</p></li><li><p>ASG and EC2 actions that instantiate the worker fleet.</p></li></ul><h3>TBIE AS A DIAGNOSTIC MODEL</h3><p>The power of TBIE is operational. Once internalised, it changes the first question asked during any incident. The question is no longer &#8216;<em>is the queue healthy?</em>&#8217; or &#8216;<em>are the GPU workers running?</em>&#8217; Those are Belief signals. The real question is:</p><blockquote><p><strong>Is the system waiting because Intent is missing &#8212; or because Intent is present but Execution cannot realise it?</strong></p></blockquote><p>That single question narrows the search space dramatically and prevents wasted time on the wrong layer.</p><h2>EVENT-DRIVEN RECONCILIATION</h2><p>Parjanya initially used a scheduled polling model. A timer would wake the replay Lambda periodically. The Lambda would scan for pending work and, if appropriate, emit SQS messages and trigger GPU autoscaling. This worked but introduced avoidable latency, wasted invocations, and operational ambiguity.<br>The move to DynamoDB Streams changed the architecture fundamentally. Now, when a workflow row reaches pending_vlm_enrichment, the stream emits an event immediately. An event source mapping filters for relevant writes, batches records briefly, and invokes the replay Lambda. The Lambda discovers missing or retriable work, emits Intent into SQS, and kicks the GPU ASG when necessary.</p><h4><strong>The net effect:</strong></h4><p>Reconciliation latency dropped from <code>O(poll_interval) to O(stream_propagation)</code> &#8212; typically seconds.</p><ul><li><p>Wasted Lambda invocations during idle periods eliminated.</p></li><li><p>Causal chain made explicit: Truth changes &#8594; stream emits &#8594; Lambda reacts &#8594; Intent created &#8594; Execution follows.</p></li><li><p>Operators can reason about system state without wondering &#8216;has the next poll happened yet?&#8217;</p></li><li><p>A reconciliation system does not rely on humans noticing a stalled queue and manually fixing it. </p></li></ul><p>It detects, explains, and repairs the divergence between Truth and Intent on its own. Event-driven streaming is what makes that self-repair fast enough to be useful in production.</p><h2>PRODUCTION FAILURE MODES &amp; LESSONS</h2><p>The following incidents occurred during the development and operation of Parjanya v2.0. Each is documented here not as a post-mortem but as a design lesson &#8212; how the failure shaped the architecture, and what guardrail was added as a result. TBIE is used throughout as the diagnostic lens.</p><h3>Incident 1: Transient GPU Failure Destroying Intent</h3><p>GPU workers were deleting SQS messages before the retry window had been exhausted. A worker could encounter a temporary S3 download failure or an OOM condition, write a failure status to DynamoDB, and still delete the queue message. At that point, Truth said the work had failed, but Intent no longer existed &#8212; the system had no automatic path to retry.</p><h4>TBIE diagnosis: Execution destroyed Intent prematurely.</h4><h4><strong>Resolution</strong>: </h4><p>Workers now return explicit outcome signals: retry, terminal_failure, or completed.</p><p><strong>retry</strong>: preserve the message. Visibility timeout and receive count govern re-attempts.</p><p><strong>terminal_failure</strong>: write durable failed Truth, then delete the message.</p><p><strong>completed</strong>: write final Truth, then delete the message.</p><p>That separation preserves replayability while still allowing durable failure when necessary. The message deletion decision became a function of execution outcome, not a side effect of worker exit.</p><h1>Worker outcome protocol</h1><p><code>if outcome == &#8216;retry&#8217;:<br># Do NOT delete. Let visibility timeout expire.<br>  return # SQS will re-deliver<br>elif outcome == &#8216;terminal_failure&#8217;:<br>  write_durable_failure(db, image_id)<br>  sqs.delete_message(receipt_handle)<br>elif outcome == &#8216;completed&#8217;:<br>  write_enriched_truth(db, image_id, scores)<br>  sqs.delete_message(receipt_handle)</code></p><h3>Incident 2: Pending Truth Without Intent (Reconciliation Gap)</h3><p>DynamoDB rows remained in <code>pending_vlm_enrichment</code> status, but no corresponding SQS messages existed. Queue depth showed zero. The system appeared idle. The backlog still existed in Truth but was invisible to Execution.</p><h4>TBIE diagnosis: Truth was pending while Intent never existed. Classic reconciliation gap.</h4><h4><strong>Resolution</strong>:</h4><ul><li><p>The replay Lambda now scans for pending rows without corresponding queue messages.</p></li><li><p>For each orphaned pending row, it regenerates a queue message and kicks the GPU ASG.</p></li><li><p>DynamoDB Streams ensure this scan is triggered promptly rather than waiting for a polling cycle.</p></li><li><p>The key insight: this is not a worker bug. Workers cannot fix work that was never queued. The control plane must own the responsibility of keeping Truth and Intent aligned.</p></li></ul><h3>Incident 3: Retry vs. Replay Distinction</h3><p>Some failures &#8212; S3 download errors, temporary GPU OOM &#8212; are retryable once the underlying condition is fixed. But simply re-enqueueing the message is insufficient when the workflow row contains partial or stale derived fields from the failed attempt.</p><h4>TBIE clarification: </h4><h4>a retry is another attempt at the same execution. A replay is a deliberate reset to a pre-execution boundary, removal of stale derived state, and emission of fresh Intent.</h4><h4><strong>Resolution</strong>:</h4><p><strong>Retry</strong>: re-attempt on the existing message, preserving current workflow state.</p><p><strong>Replay</strong>: reset the DynamoDB row to a clean pre-VLM boundary (clear stale score fields, VLM status, partial outputs), then emit a fresh SQS message.</p><p>Replay is a controlled reconstruction, not just another attempt on top of corrupted state. The distinction prevents accumulating corrupted derived fields across multiple failed attempts.</p><h3>Incident 4: Wrong Bucket, Right Key (Deterministic Misrouting)</h3><p>An SQS payload pointed to a valid preview key but in the wrong bucket. The worker repeatedly failed with S3 download errors even though the file existed &#8212; just not at that address. This was deterministic misrouting, not flaky execution.</p><h4>TBIE diagnosis: Intent encoded the wrong target. Not an Execution failure &#8212; an Intent construction failure.</h4><h4><strong>Resolution:</strong></h4><p>Preview keys now canonically use the uploads bucket as the authoritative source.<br>Intent construction validates bucket routing before emitting to SQS.<br>Eligibility checks were tightened: only objects confirmed present in the correct bucket are enqueued.<br>The lesson generalises: Intent must encode the correct target, not just some valid key. A message that is &#8216;almost correct&#8217; will fail deterministically and indefinitely until the Intent itself is repaired.</p><h3>Incident 5: Policy Change Requiring Historical Replay</h3><p>Content policy was updated to more strictly reject non-photographic content: screenshots, banners, infographics, social cards, slides, illustrations, and mockups. Historical images scored under the old policy needed to be re-evaluated.</p><h4>TBIE framing: policy change = controlled replay, not a patching exercise.</h4><h4><strong>Resolution:</strong></h4><p>Affected rows were identified by policy version marker in DynamoDB.<br>Each affected row was reset to a pre-VLM boundary: stale score fields cleared, VLM status reset to pending.<br>Fresh Intent was emitted into SQS so GPU workers re-scored under the new policy.<br>This is one of the most powerful properties of a replay-native system: policy evolution does not require one-off correction scripts. It becomes a controlled reprocessing event with clear before-and-after semantics. The same replay machinery used for failure recovery also handles deliberate re-evaluation.</p><h3>Incident 6: Execution Drift Below the Application Layer</h3><p>Two distinct incidents exposed failures where application code was correct but the execution environment was stale.</p><h4>6a: Stale Launch Template (Image Tag)</h4><p>A launch template continued to reference an old image tag that no longer existed. Cloud-init failed when pulling the nonexistent container image, and the GPU instance came up without ever starting the worker. The worker log group was empty &#8212; the application layer never ran.<br>Complete silence in the GPU log group is a critical signal. It usually means execution failed before the application layer started: image pull failure, IAM denial during bootstrap, or cloud-init crash.</p><h4>6b: Incomplete AMI (Missing Model Artifacts)</h4><p>A separate incident involved an AMI that was missing the Python files required by Qwen3-8B-VLM (a model that relies on remote code). The container started successfully, but the model loader crashed because local artifacts were incomplete.</p><h4><strong>Resolution &#8212; both incidents:</strong></h4><ul><li><p>Launch templates now include version assertions checked at deployment time.<br>AMI build pipelines validate the presence and integrity of all model artifacts before publishing.</p></li><li><p>Container version and model artifact version are treated as a compatibility pair, validated together.</p></li><li><p>Deployment tooling refreshes launch templates automatically when image tags change.</p></li></ul><h3>Incident 7: CORS and Browser Upload Split-State Failure</h3><p>The backend could write a pending upload record and generate a presigned URL, but the browser&#8217;s PUT could fail because of CORS misconfiguration. In that case, Truth at the API layer looked correct while Execution at the browser layer never completed.<br>Investigation revealed multiple independent configuration failures could co-exist: a bucket rejecting wildcard origins under restricted public bucket settings, while the client simultaneously used a global S3 endpoint that returned redirects that browsers would not follow on OPTIONS preflight.</p><h4>TBIE diagnosis: </h4><h4>Intent existed (presigned URL generated, pending row written). Execution was blocked by infrastructure configuration drift. Two independent misconfiguration layers were both wrong simultaneously.</h4><h4><strong>Resolution:</strong></h4><ul><li><p>CORS policies are version-controlled and validated in CI before deployment.</p></li><li><p>Bucket CORS and public access settings are treated as a matched pair, not configured independently.</p></li><li><p>Upload path includes client-side detection of presigned URL PUT failure with structured error reporting.</p></li><li><p>Pending rows created without a completed upload are detected by the replay Lambda and age-gated before re-emission.</p></li></ul><h3>Incident 8: Control Plane Blindness (Replay Lambda IAM Failure)</h3><p>The replay Lambda lacked permission to read SQS queue attributes. The function continued to be scheduled and invoked, but it crashed before it could inspect Belief (queue depth) or emit Intent. From the outside, everything appeared enabled. In reality, the control plane had gone blind.</p><p>This is the most dangerous failure mode in the system. A silently failing control plane means every other safety net weakens simultaneously. Worker failures that should self-repair accumulate without rescue. Operators see green infrastructure dashboards while reconciliation has effectively stopped.</p><h4><strong>Resolution:</strong></h4><ul><li><p>The replay Lambda&#8217;s IAM policy now explicitly grants <code>sqs:GetQueueAttributes</code>, <code>sqs:GetQueueUrl</code>, and <code>sqs:SendMessage</code>.</p></li><li><p>IAM policy drift is checked in deployment assertions &#8212; the Lambda will not deploy if required permissions are absent.</p></li><li><p>The Lambda now emits a structured heartbeat metric on every successful invocation, including after inspecting queue state.</p></li><li><p>Alarm on absence of heartbeat metric: silence means the control plane has likely failed.</p></li></ul><p>The operational philosophy shift from this incident: worker failures are recoverable noise. Control-plane blindness is a systemic risk. Observability on the control plane must be stronger than on individual workers.</p><h3>Incident 9: Dynamic Tenant Discovery and Queue Retention</h3><p>As the platform grew, static tenant lists became a bottleneck. Reconciliation could not depend on manually editing infrastructure configuration every time a new tenant was onboarded. Additionally, when the GPU fleet was scaled to zero for cost savings, queue retention was set too short &#8212; messages expired before the fleet woke up.</p><h4>Resolution:</h4><p>The control plane moved to dynamic tenant discovery from DynamoDB. Tenant registry markers are written by the upload path and discovered by the replay Lambda at runtime.<br>Queue retention policy was extended to match the maximum expected outage window, not an idealised constant.<br>New tenant onboarding now automatically creates the required DynamoDB registry marker without manual infrastructure changes.</p><h2>OPERATIONAL MODEL AND RUNBOOK THINKING</h2><p>By the time Parjanya matured into an event-driven reconciliation system, the debugging approach itself had changed. The starting question is no longer &#8216;<em><strong>is the queue healthy?</strong></em>&#8217; or &#8216;<em><strong>are GPU workers running?</strong></em>&#8217; &#8212; those are <strong>Belief signals</strong>. Every incident investigation now begins with a TBIE classification:</p><h3>THE DIAGNOSTIC SEQUENCE</h3><ul><li><p><strong>Step 1: Check Truth</strong></p></li></ul><p>Is DynamoDB accumulating rows in <code>pending_vlm_enrichment</code>? If so, the platform believes unfinished work exists, regardless of what the queue shows. A growing Truth backlog is the authoritative signal that the system is behind.</p><ul><li><p><strong>Step 2: Check Intent</strong></p></li></ul><p>Does SQS contain replayable work items? High Truth backlog + near-zero queue depth = reconciliation failure, not execution failure. The replay Lambda itself becomes suspect. Either it stopped emitting Intent, or it lost the ability to discover the work.</p><ul><li><p><strong>Step 3: Check Execution</strong></p></li></ul><p>If Intent exists but the backlog still does not move, shift to Execution health. GPU worker logs become critical. Check for:</p><ol><li><p>Deterministic S3 download errors (wrong bucket routing &#8212; see Incident 4).<br>Repeated OOM crashes (model too large for instance type).</p></li><li><p>Complete log group silence (execution failed before the application layer &#8212; check cloud-init).</p></li><li><p>Stale launch template (image tag no longer exists &#8212; check ASG launch configuration).</p></li></ol><ul><li><p><strong>Step 4: Check the Control Plane</strong></p></li></ul><p>If queue visibility is unchanged while pending Truth continues growing, the replay Lambda itself is the focus. Check: Is it being invoked? Is it completing successfully? Can it read <code>sqs:GetQueueAttributes</code>? Is it emitting its heartbeat metric?</p><p><strong>Operational summary of diagnostic signals:</strong></p><ul><li><p>Truth backlog growing &#8594; unfinished work exists</p></li><li><p>Intent near zero despite Truth backlog &#8594; reconciliation failure</p></li><li><p>Intent present but Execution failing &#8594; runtime or routing failure</p></li><li><p>GPU log silence &#8594; bootstrap failure (cloud-init, image pull, IAM at boot)</p></li><li><p>Replay Lambda silence &#8594; control-plane failure (IAM, crash, permission gap)</p></li><li><p>No heartbeat metric &#8594; control plane has gone blind</p></li></ul><h3>INCIDENT RESPONSE DECISION TREE</h3><h4>At 02:00 AM, when the queue looks empty but customers are waiting:</h4><ol><li><p>Check Truth: pull DynamoDB pending count. If non-zero, the system is behind regardless of queue state.</p></li><li><p>Check replay Lambda logs: has it run in the last cycle? Did it complete? Did it emit messages?</p></li><li><p>Check SQS: are messages present? If Truth is high and SQS is low, replay Lambda is suspect.</p></li><li><p>Check ASG desired capacity: did the Lambda set it correctly? Check CloudWatch ASG activity log.</p></li><li><p>Check GPU worker logs: any entries? Silence means boot failure. Errors usually indicate routing or model issues.</p></li><li><p>Check IAM: can the Lambda call sqs:GetQueueAttributes? Can the worker read the correct S3 bucket?</p></li><li><p>Check launch template: does the image tag still exist? Pull the AMI manifest.</p></li><li><p>OUTCOMES<br>The migration from SageMaker to native AWS primitives, combined with TBIE reconciliation, changed both the cost profile and the operational character of the pipeline.</p></li></ol><h3>OPERATIONAL IMPROVEMENTS</h3><ul><li><p>Latency: Startup latency: near-zero or sub-minute (down from 20&#8211;40 minutes cold start on SageMaker).</p></li><li><p>Parallelism: Workers process images in parallel rather than sequentially &#8212; throughput scales with fleet size.</p></li><li><p>Throughput: Wall-clock time reduced dramatically from the ~11 hour nightly baseline.</p></li><li><p>Replay: Event-driven replay handles failures automatically without manual intervention for most failure classes.</p></li><li><p>Cost: Scale-to-zero when no work is present; burst capacity available within seconds via warm pools.</p></li></ul><h3>ARCHITECTURAL IMPROVEMENTS</h3><p>The system can repair its own state: Truth without Intent is detected and corrected by the control plane.<br>Policy changes are handled as replay events &#8212; no custom migration scripts needed.<br>Tenant onboarding is dynamic &#8212; no infrastructure changes required per tenant.<br>Execution environments are immutable and reproducible via pre-baked AMIs.<br>Control plane observability now triggers independent alerting paths from worker failures.</p><h3>THE BROADER LESSON</h3><p>Not every AI workload needs a managed ML platform. Sometimes the real engineering challenge sits in orchestration, reconciliation, and operational resilience &#8212; not in model serving. When the problem is &#8216;how do we run a model?&#8217;, SageMaker is the right answer. When the problem is &#8216;<em><strong>how do we orchestrate burst-scale inference reliably, replay safely, and cost efficiently?</strong></em>&#8217;, native primitives and a clear reconciliation model are the right answer.</p><h2>GUARDRAILS, MAINTENANCE, AND OPERATIONAL CHECKLIST</h2><p>Parjanya&#8217;s reliability is not a property of its initial design. It is the accumulated result of incidents converted into permanent controls. The following checklist encodes what the system has already learned.</p><h3>INTENT PRESERVATION</h3><ul><li><p>Workers never delete SQS messages unless the outcome is terminal_failure or completed.</p></li><li><p>Visibility timeout exceeds maximum realistic inference time.</p></li><li><p>Queue retention exceeds maximum expected outage window.</p></li><li><p>Dead-letter queue is monitored and reviewed regularly.</p></li></ul><h3>EXECUTION ENVIRONMENT INTEGRITY</h3><p>Launch template image tags are validated against existing AMIs at deployment time.</p><p>AMI build pipelines assert presence of all model artifacts before publishing.</p><p>Container version and model artifact version are validated as a compatibility pair.</p><p>Launch templates are refreshed automatically when image tags change.</p><p>Python lockfiles are used to prevent dependency drift inside worker environments.</p><h3>CONTROL PLANE HEALTH</h3><p>Replay Lambda emits a structured heartbeat metric on every successful execution.</p><p>Alarm fires if heartbeat is absent for more than one poll cycle.</p><p>IAM policy grants for the Lambda are validated in deployment assertions.</p><p>Lambda error rate and duration are independently alarmed.</p><p>Control-plane CloudWatch logs are retained and searchable for incident forensics.</p><h3>RECONCILIATION INTEGRITY</h3><p>Truth backlog (pending DynamoDB rows) is monitored as a primary SLI.<br>Intent gap (pending Truth with no corresponding queue message) is checked by the Lambda on each invocation.</p><p>Replay logic resets Truth cleanly to a pre-execution boundary before re-emitting Intent.</p><p>Tenant discovery is dynamic &#8212; no manual configuration changes needed on onboarding.</p><p>Queue retention policy change requires explicit engineering review.</p><h3>INFRASTRUCTURE DRIFT PREVENTION</h3><p>CORS policies are version-controlled and validated in CI.</p><p>Bucket CORS and public access settings are configured as a matched pair.</p><p>API schema and frontend types have drift detection in CI.</p><p>S3 bucket routing is validated at Intent construction time, not only at worker download time.</p><h3>POLICY AND REGRADE</h3><p>Content policy version is stored per image in DynamoDB.</p><p>Policy changes trigger replay jobs for images scored under previous policy versions.</p><p>Regrade jobs use the same replay machinery as failure recovery &#8212; no custom tooling.</p><h2>IMPLICATIONS FOR AI PLATFORM DESIGN</h2><p>TBIE generalises beyond Parjanya. Any AI platform that spans storage, metadata, asynchronous work, GPU execution, and policy evolution benefits from the same model. The key is to stop thinking of the system as a one-way pipeline and treat it as a reconciliation loop that continuously restores alignment between durable truth and intended work.</p><p>That shift changes concrete architecture choices:</p><p>Queues: Queues become journals of intent rather than temporary transport.</p><p>Replay: Replay becomes a first-class product capability, not an ops workaround.</p><p>Autoscaling: Autoscaling becomes a consequence of work existing, not a heuristic guess.</p><p>Model packaging: Model packaging becomes part of execution correctness, not just deployment.</p><p>Browser uploads: Browser upload behaviour becomes part of the end-to-end reliability model.</p><p>Policy change: Policy change becomes a replay event rather than a manual repair task.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5c4582d3-6e65-4595-bc62-caf291fd4f91&quot;,&quot;caption&quot;:&quot;In my previous post few weeks ago, I introduced TBIE &#8212; Truth, Belief, Intent and Execution &#8212; as a framework for reasoning about resilient distributed systems.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;From Pipeline to Platform &quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-06-22T05:45:48.801Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!AEfT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/from-pipeline-to-platform&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:203038071,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>The right mental model for modern AI infrastructure is not &#8216;build a pipeline.&#8217; It is &#8216;build a system that can continuously reconcile truth and intent until intended work is actually realised.&#8217;</p><h2>APPENDIX A: COMPONENT MAPPING TABLE</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VsTY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F360055ee-b572-404b-8939-928d326bbddd_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VsTY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F360055ee-b572-404b-8939-928d326bbddd_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!VsTY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F360055ee-b572-404b-8939-928d326bbddd_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!VsTY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F360055ee-b572-404b-8939-928d326bbddd_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!VsTY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F360055ee-b572-404b-8939-928d326bbddd_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VsTY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F360055ee-b572-404b-8939-928d326bbddd_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/360055ee-b572-404b-8939-928d326bbddd_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;:1601859,&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://blog.phagyul.ai/i/203346926?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F360055ee-b572-404b-8939-928d326bbddd_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_!VsTY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F360055ee-b572-404b-8939-928d326bbddd_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!VsTY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F360055ee-b572-404b-8939-928d326bbddd_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!VsTY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F360055ee-b572-404b-8939-928d326bbddd_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!VsTY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F360055ee-b572-404b-8939-928d326bbddd_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>APPENDIX B: KEY TERMS</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Eth4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87cb7a50-8d9c-452e-9e55-1261931326f1_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Eth4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87cb7a50-8d9c-452e-9e55-1261931326f1_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Eth4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87cb7a50-8d9c-452e-9e55-1261931326f1_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Eth4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87cb7a50-8d9c-452e-9e55-1261931326f1_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Eth4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87cb7a50-8d9c-452e-9e55-1261931326f1_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Eth4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87cb7a50-8d9c-452e-9e55-1261931326f1_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87cb7a50-8d9c-452e-9e55-1261931326f1_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;:1470043,&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://blog.phagyul.ai/i/203346926?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87cb7a50-8d9c-452e-9e55-1261931326f1_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_!Eth4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87cb7a50-8d9c-452e-9e55-1261931326f1_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Eth4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87cb7a50-8d9c-452e-9e55-1261931326f1_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Eth4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87cb7a50-8d9c-452e-9e55-1261931326f1_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Eth4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87cb7a50-8d9c-452e-9e55-1261931326f1_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[From Pipeline to Platform ]]></title><description><![CDATA[Event-Driven TBIE Architecture, Reconciliation Patterns, and the Lessons from Building Parjanya v2.0]]></description><link>https://blog.phagyul.ai/p/from-pipeline-to-platform</link><guid isPermaLink="false">https://blog.phagyul.ai/p/from-pipeline-to-platform</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Mon, 22 Jun 2026 05:45:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AEfT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my previous post few weeks ago, I introduced TBIE &#8212; Truth, Belief, Intent and Execution &#8212; as a framework for reasoning about resilient distributed systems.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;869ed1a6-1c56-4907-a5b6-bcd1c8d765ad&quot;,&quot;caption&quot;:&quot;Abstract&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;TBIE in Practice: Designing Resilient AI Pipelines That Recover, Reconcile, and Re-run&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-25T05:36:28.000Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!ok-g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/tbie-in-practice-designing-resilient&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:199145206,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>The framework emerged from a simple observation:</p><p>Distributed systems rarely fail through catastrophic outages.</p><p>More often, they fail through divergence.</p><p>Truth says one thing.<br>Execution does another.<br>Intent disappears.<br>Belief becomes detached from reality.</p><p>TBIE gave me a vocabulary for understanding those failures.</p><p>What I did not fully appreciate at the time was the architectural consequence of taking TBIE seriously.</p><p>I thought I was building an AI pipeline.</p><p>I ended up building a platform.</p><div class="pullquote"><p>More specifically, I ended up building a reconciliation-driven control plane whose primary responsibility was not inference, enrichment, scoring, or curation.</p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AEfT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AEfT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png 424w, https://substackcdn.com/image/fetch/$s_!AEfT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png 848w, https://substackcdn.com/image/fetch/$s_!AEfT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png 1272w, https://substackcdn.com/image/fetch/$s_!AEfT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AEfT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png" width="1536" height="950" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:950,&quot;width&quot;:1536,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1673176,&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://blog.phagyul.ai/i/203038071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd724deb0-7e36-4332-9a5a-3b8d4d003179_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_!AEfT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png 424w, https://substackcdn.com/image/fetch/$s_!AEfT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png 848w, https://substackcdn.com/image/fetch/$s_!AEfT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.png 1272w, https://substackcdn.com/image/fetch/$s_!AEfT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e3c006b-8d0e-4176-8bfc-72a45027eb6d_1536x950.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Its primary responsibility was preserving correctness.</p><p>That realization fundamentally changed how I thought about reliability.</p><p>The hard problems in Parjanya v2.0 were not model problems.</p><p>They were coordination problems.</p><ul><li><p>Not GPU problems.</p></li><li><p>Not inference problems.</p></li><li><p>Not even scaling problems.</p></li></ul><p>The hardest problems emerged whenever the system lost alignment between:</p><ul><li><p>what was true,</p></li><li><p>what work should exist,</p></li><li><p>what execution was currently happening,</p></li><li><p>and what the system believed was happening.</p></li></ul><p>The original architecture looked deceptively simple.</p><p>Images landed in S3.</p><p>Metadata was written into DynamoDB.</p><p>Validation ran through Lambda functions.</p><p>GPU workers performed VLM enrichment and IQA processing.</p><p>Results were written back into DynamoDB.</p><p>Autoscaling reacted to queue depth.</p><p>At first glance, it looked like a fairly conventional event-driven AI pipeline.</p><p>Production quickly proved otherwise.</p><p>Workers crashed.</p><p>Queues drained without progress.</p><p>Pending images remained pending forever.</p><p>Retries became impossible.</p><p>Infrastructure drifted away from declared state.</p><p>The system could remain technically healthy while doing absolutely nothing useful.</p><p>That was the moment I realised we were solving the wrong problem.</p><p>The challenge was not moving images through a pipeline.</p><p>The challenge was continuously reconciling distributed state.</p><p>Once viewed through that lens, the architecture began evolving in a very different direction.</p><p>The replay engine stopped being a utility.</p><p>It became the control plane.</p><p>Queues stopped being transport mechanisms.</p><p>They became durable Intent.</p><p>Autoscaling stopped being a scaling feature.</p><p>It became a realization layer for Intent.</p><p>And the system itself stopped behaving like a pipeline.</p><p>It started behaving like a platform.</p><p>This article is the story of that evolution.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UWpj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UWpj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!UWpj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!UWpj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!UWpj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UWpj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_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;:1545865,&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://blog.phagyul.ai/i/203038071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_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_!UWpj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!UWpj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!UWpj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!UWpj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a269d84-eb4b-47c5-9cf4-3ba9f3a72c9e_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Preface</h2><p>Distributed systems rarely fail in the way architecture diagrams suggest.</p><p>The boxes stay alive. The queues still exist. The databases continue accepting writes. The autoscaling groups look healthy. The dashboards even remain green.</p><p>And yet the system silently stops doing useful work.</p><p>An image sits in a pending state forever. A queue drains but no GPU ever runs. A worker crashes and deletes the only replayable work item. A presigned upload URL looks valid but browser execution never begins. A GPU instance launches correctly while the actual container inside it continuously crashloops.</p><p>Most production failures are not total outages. They are reconciliation failures.</p><p>Something the system believes should happen never actually happens. Or something already completed continues to look pending. Or a control plane silently loses the ability to coordinate execution.</p><p>Parjanya v2.0 forced us to confront this repeatedly.</p><p>Initially, the architecture looked straightforward:</p><ul><li><p>Images upload into S3</p></li><li><p>Metadata lands in DynamoDB</p></li><li><p>Lambdas perform validation and enrichment</p></li><li><p>GPU workers run VLM and IQA workloads</p></li><li><p>Results are written back into DynamoDB</p></li><li><p>Autoscaling follows queue depth</p></li></ul><p>At first glance, this looked like a normal AI pipeline.</p><p>In practice, it evolved into something else.</p><p>The deeper challenge was not inference. The challenge was maintaining alignment between:</p><p>the durable truth of the system,<br>the operational understanding of the system,<br>the work the system intended to perform,<br>and the execution layer actually performing it.</p><blockquote><p>Truth &#8594; Belief &#8594; Intent &#8594; Execution</p></blockquote><p>TBIE was never intended as branding. It emerged as an operational language for reasoning about reliability.</p><p>The model eventually shaped:</p><p>the event-driven reconciliation architecture,<br>the autoscaling strategy,<br>the replay model,<br>the control plane,<br>failure recovery,<br>multi-tenant orchestration,<br>policy regrading,<br>infrastructure debugging,<br>and eventually the broader direction of Parjanya itself.</p><p>This article is a deep dive into that journey.</p><p>It is not a summary. It is a detailed architectural walkthrough of:</p><p>how TBIE emerged,<br>why event-driven reconciliation mattered,<br>what failed in production,<br>how those failures were diagnosed,<br>and why reconciliation patterns matter far more than most AI infrastructure discussions acknowledge.</p><p>The goal is not merely to explain Parjanya.</p><p>The goal is to explain how resilient AI systems are actually built.</p><h2>1. The Real Problem in Distributed AI Systems</h2><p>Most modern AI infrastructure discussions focus heavily on models.</p><p>Which VLM?<br>Which embedding strategy?<br>Which vector database?<br>Which GPU?<br>Which inference framework?<br>Which quantization?</p><p>These questions matter.</p><p>But they are not usually what breaks systems.</p><p>The real production problems tend to look different:</p><p>Work disappears.<br>Retries become impossible.<br>Workers process stale state.<br>Uploads partially succeed.<br>Queues drain without progress.<br>Control planes silently stop coordinating.<br>Autoscaling behaves correctly against the wrong metric.<br>Infrastructure layers drift away from declared source-of-truth.</p><p>In other words:</p><p>The problem is not merely computation. The problem is reconciliation.</p><p>Distributed systems are fundamentally coordination systems.</p><p>A resilient architecture needs to answer:</p><p>What is the durable truth?<br>What work should exist?<br>What execution is currently happening?<br>Can the system reconstruct work after failures?<br>Can the system distinguish transient failure from terminal failure?<br>Can infrastructure drift be detected?<br>Can the system replay work safely?<br>Can policy changes be re-applied deterministically?</p><p>Most architectures answer these implicitly.</p><p>TBIE attempts to answer them explicitly.</p><h2>2. TBIE &#8212; Truth, Belief, Intent, Execution</h2><p>The TBIE model separates distributed systems into four operational layers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JoPa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa319b520-37eb-4f90-ab0a-b458e9b31038_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JoPa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa319b520-37eb-4f90-ab0a-b458e9b31038_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!JoPa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa319b520-37eb-4f90-ab0a-b458e9b31038_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!JoPa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa319b520-37eb-4f90-ab0a-b458e9b31038_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!JoPa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa319b520-37eb-4f90-ab0a-b458e9b31038_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JoPa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa319b520-37eb-4f90-ab0a-b458e9b31038_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a319b520-37eb-4f90-ab0a-b458e9b31038_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;:1312875,&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://blog.phagyul.ai/i/203038071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa319b520-37eb-4f90-ab0a-b458e9b31038_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_!JoPa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa319b520-37eb-4f90-ab0a-b458e9b31038_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!JoPa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa319b520-37eb-4f90-ab0a-b458e9b31038_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!JoPa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa319b520-37eb-4f90-ab0a-b458e9b31038_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!JoPa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa319b520-37eb-4f90-ab0a-b458e9b31038_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The model becomes powerful because it forces explicit boundaries.</p><h3>Truth</h3><p>Truth represents the authoritative record.</p><p>Truth must be:</p><p>durable,<br>reconstructable,<br>queryable,<br>replayable,<br>and independent of transient execution state.</p><p>In Parjanya:</p><p>S3 object bytes are Truth.<br>DynamoDB workflow fields are Truth.<br>Pipeline status transitions are Truth.<br>Curation outputs are Truth.<br>Hashes and metadata are Truth.</p><p>Truth is what remains after workers crash.</p><p>Truth is what survives retries.</p><p>Truth is what operators use to reconstruct system state.</p><h3>Belief</h3><p>Belief is operational understanding.</p><p>Belief is not always perfectly accurate.</p><p>Examples:</p><ul><li><p>Queue depth</p></li><li><p>Autoscaling desired capacity</p></li><li><p>In-flight SQS messages</p></li><li><p>Worker health</p></li><li><p>Current GPU availability</p></li><li><p>Visibility timeout state</p></li></ul><p>Belief may lag reality. Belief may be partial. Belief may even temporarily be wrong.</p><p>But Belief matters because orchestration depends on it.</p><p>Importantly:</p><p>Belief should be derivable from Truth + Intent.</p><p>That distinction becomes critical later.</p><h3>Intent</h3><p>Intent represents durable declarations of work.</p><p>Intent answers:</p><blockquote><p>&#8220;What should the system attempt next?&#8221;</p></blockquote><p>In Parjanya:</p><p>SQS messages are Intent.<br>Replay queues are Intent.<br>Regrade operations are Intent.<br>Retry workflows are Intent.</p><p>Intent is one of the most important concepts in the entire architecture.</p><p>Execution should never destroy Intent casually.</p><p>Why?</p><p>Because Intent is replayability.</p><p>Without replayable Intent:</p><p>transient failures become permanent,<br>retries become manual,<br>reconciliation becomes impossible,<br>and the system loses self-healing capability.</p><h3>Execution</h3><p>Execution is the stateless machinery that realizes work.</p><p>Execution includes:</p><p>Lambdas,<br>GPU workers,<br>autoscaling groups,<br>validation services,<br>EXIF processors,<br>and inference pipelines.</p><p>Execution should ideally be:</p><p>disposable,<br>reproducible,<br>restartable,<br>and stateless.</p><p>If an execution worker disappears, the system should still be able to recover from Truth + Intent.</p><p>That principle drove many later architectural decisions.</p><h2>3. Mapping TBIE onto Parjanya v2.0</h2><p>Once TBIE became the operational lens, the architecture became easier to reason about.</p><h3>Truth Layer</h3><p>Truth in Parjanya consisted primarily of:</p><p><strong>S3</strong></p><ul><li><p>original uploads,</p></li><li><p>RAW image payloads,</p></li><li><p>generated previews,</p></li><li><p>derived thumbnails,</p></li><li><p>metadata artifacts.</p></li></ul><p><strong>DynamoDB</strong></p><p>Workflow state:</p><ul><li><p>batch_status</p></li><li><p>pipeline_status</p></li><li><p>curation</p></li><li><p>quality scores</p></li><li><p>VLM outputs</p></li><li><p>EXIF metadata</p></li><li><p>technical validation</p></li><li><p>image hashes</p></li><li><p>routing information</p></li></ul><p>Truth represented the durable state of every image.</p><h3>Intent Layer</h3><p>Intent existed primarily in SQS.</p><p>Examples:</p><ul><li><p>ml-large-jobs</p></li><li><p>replay queues</p></li><li><p>regrade operations</p></li><li><p>retry workflows</p></li></ul><p>Each Intent payload encoded:</p><ul><li><p>bucket,</p></li><li><p>object key,</p></li><li><p>tenant,</p></li><li><p>image id,</p></li><li><p>execution metadata.</p></li></ul><p>Intent was intentionally replayable.</p><p>That design decision later prevented multiple catastrophic replay-loss scenarios.</p><h3>Belief Layer</h3><p>Belief included:</p><ul><li><p>ASG desired capacity,</p></li><li><p>queue visibility counts,</p></li><li><p>in-flight message counts,</p></li><li><p>CloudWatch metrics,</p></li><li><p>worker availability,</p></li><li><p>queue backlog,</p></li><li><p>GPU scale state.</p></li></ul><p>Belief drove orchestration.</p><p>For example:</p><ul><li><p>queue depth controlled autoscaling,</p></li><li><p>replay Lambdas checked queue visibility,</p></li><li><p>scaling decisions relied on approximate message counts.</p></li></ul><p>Belief was operationally useful but never fully authoritative.</p><h3>Execution Layer</h3><p>Execution included:</p><p><strong>Lambda Workers</strong></p><ul><li><p>EXIF extraction</p></li><li><p>technical validation</p></li><li><p>replay orchestration</p></li><li><p>autoscaling control-plane logic</p></li></ul><p><strong>GPU Workers</strong></p><ul><li><p>Qwen VLM inference</p></li><li><p>IQA processing</p></li><li><p>curation scoring</p></li><li><p>natural-language enrichment</p></li></ul><p>Execution workers remained stateless wherever possible.</p><p>That allowed replay to remain safe.</p><h2>4. Why Reconciliation Matters</h2><p>A distributed system does not stay healthy merely because components exist.</p><p>Health depends on reconciliation.</p><p>Consider this state:</p><p>DynamoDB row says pending_vlm_enrichment<br>SQS queue is empty<br>GPU ASG is scaled to zero</p><p>Nothing is technically &#8220;down.&#8221;</p><p>And yet the system is stuck.</p><p>Truth says work should exist. Intent does not exist. Execution never begins. Belief incorrectly suggests the system is idle.</p><p>This is a reconciliation failure.</p><p>TBIE made this visible.</p><p>The system needed a mechanism that continuously aligned:</p><p>Truth &#8596; Intent &#8596; Execution</p><p>That eventually led to the event-driven reconciliation architecture.</p><h2>5. From Polling to Event-Driven Reconciliation</h2><p>The original architecture used scheduled polling.</p><p>Every few minutes:</p><p>EventBridge triggered a Lambda,<br>the Lambda scanned DynamoDB,<br>pending work was discovered,<br>SQS messages were emitted,<br>GPU autoscaling was triggered.</p><p>This worked.</p><p>But it introduced fundamental limitations.</p><h3>Problems with Polling</h3><p><strong>Latency</strong></p><p>An image could wait:</p><p>0&#8211;15 minutes before the next poll cycle.</p><p>GPU cold starts already consumed several minutes. Adding polling latency made the UX significantly worse.</p><p><strong>Waste</strong></p><p>Most polling invocations found no work.</p><p>The control plane continuously woke up merely to rediscover emptiness.</p><p><strong>Operational Ambiguity</strong></p><p>Polling blurred the distinction between:</p><p>&#8220;there is no work,&#8221;<br>and<br>&#8220;the system has not discovered the work yet.&#8221;</p><p>That ambiguity complicated debugging.</p><p><strong>Poor Reactive Scaling</strong></p><p>Autoscaling became tied to polling frequency.</p><p>Queue discovery latency directly affected GPU startup latency.</p><h2>6. DynamoDB Streams Changed the Architecture</h2><p>The major architectural shift came from moving reconciliation into an event-driven model.</p><p>Instead of periodically checking for state changes:</p><p>The system reacted immediately when Truth changed.</p><h3>The New Model</h3><p>DynamoDB row transitions to pending_vlm_enrichment<br>DynamoDB Streams emits an event<br>Event source mapping filters relevant writes<br>Replay Lambda triggers immediately<br>SQS Intent is emitted<br>GPU ASG is kicked from zero<br>GPU workers process work<br>Results are written back into Truth</p><p>The architecture became reactive.</p><h2>7. Anatomy of the Event-Driven TBIE</h2><h3>Architecture</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iIx-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191eeab5-afd4-46c6-bd82-f0f651daa6b4_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iIx-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191eeab5-afd4-46c6-bd82-f0f651daa6b4_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!iIx-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191eeab5-afd4-46c6-bd82-f0f651daa6b4_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!iIx-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191eeab5-afd4-46c6-bd82-f0f651daa6b4_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!iIx-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191eeab5-afd4-46c6-bd82-f0f651daa6b4_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iIx-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191eeab5-afd4-46c6-bd82-f0f651daa6b4_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/191eeab5-afd4-46c6-bd82-f0f651daa6b4_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;:1627507,&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://blog.phagyul.ai/i/203038071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191eeab5-afd4-46c6-bd82-f0f651daa6b4_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_!iIx-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191eeab5-afd4-46c6-bd82-f0f651daa6b4_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!iIx-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191eeab5-afd4-46c6-bd82-f0f651daa6b4_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!iIx-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191eeab5-afd4-46c6-bd82-f0f651daa6b4_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!iIx-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F191eeab5-afd4-46c6-bd82-f0f651daa6b4_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>DynamoDB Streams</h4><p>The table emits:</p><ul><li><p>INSERT events</p></li><li><p>MODIFY events</p></li></ul><p>Filtered specifically for:</p><p>batch_status = pending_vlm_enrichment</p><p>This is extremely important.</p><p>The system does not react to every write. It reacts only when Truth crosses a workflow boundary requiring Intent creation.</p><h4>Event Source Mapping</h4><p>The stream mapping aggregates:</p><p>up to 50 records,<br>or up to 5 seconds.</p><p>This balances:</p><p>latency,<br>throughput,<br>Lambda cost,<br>queue pressure.</p><p>The system effectively performs micro-batching naturally.</p><h4>Replay Lambda</h4><p>The replay Lambda became the core reconciliation engine.</p><p>Responsibilities:</p><ul><li><p>inspect stream events,</p></li><li><p>discover pending rows,</p></li><li><p>identify retriable failures,</p></li><li><p>generate replayable Intent,</p></li><li><p>avoid duplicate queueing,</p></li><li><p>trigger autoscaling.</p></li></ul><p>This Lambda evolved into the operational heart of the platform.</p><h4>Queue Backlog Guard</h4><p>One subtle but extremely important design decision:</p><p>The replay Lambda checks queue visibility before re-enqueueing pending work.</p><p>Why?</p><p>Because replay itself can become destructive if uncontrolled.</p><p>Without a backlog guard:</p><p>the control plane could continuously duplicate Intent,<br>queue pressure would inflate,<br>workers would process stale state,<br>autoscaling would overreact.</p><p>This is a classic reconciliation trap.</p><p>The backlog guard prevented it.</p><h4>GPU ASG Kick</h4><p>The replay Lambda also became responsible for scaling GPU workers.</p><p>This matters because scale-to-zero architectures create a hidden problem:</p><p>The queue may contain work while compute remains asleep.</p><p>The replay Lambda solved this by:</p><p>emitting Intent,<br>then immediately setting desired ASG capacity.</p><p>That turned the replay engine into both:</p><p>a reconciliation layer,<br>and a control-plane orchestrator.</p><h2>8. Latency Transformation</h2><p>The shift from polling to event-driven reconciliation fundamentally changed responsiveness.</p><h3>Before</h3><p>Upload &#8594; wait for poll &#8594; queue &#8594; ASG scale &#8594; GPU boot</p><p>Total latency:</p><p>~3&#8211;20 minutes</p><p>depending on polling window timing.</p><h3>After</h3><p>Upload &#8594; stream event &#8594; immediate reconciliation &#8594; queue &#8594; ASG scale</p><p>Total latency:</p><p>~4&#8211;6 minutes</p><p>with remaining delay dominated almost entirely by:</p><p>EC2 startup,<br>model load,<br>GPU warm-up.</p><p>This is a very different operational profile.</p><p>The system stopped feeling batch-oriented.</p><p>It began behaving like a reactive platform.</p><h2>9. The First Major TBIE Failure</h2><h3>Intent Destroyed Too Early</h3><p>One of the earliest major incidents exposed why TBIE mattered.</p><h4>Symptom</h4><p>GPU workers experienced transient:</p><ul><li><p>S3 download failures,</p></li><li><p>temporary consistency races,</p></li><li><p>OOM conditions.</p></li></ul><p>But the worker still deleted the SQS message.</p><p>At the same time:</p><p>DynamoDB was updated with:</p><p>vlm_failed</p><p>The result:</p><p>Intent disappeared,<br>Truth claimed terminal failure,<br>automatic replay became impossible.</p><p>This was a severe reconciliation violation.</p><h4>The Core TBIE Violation</h4><p>Execution destroyed Intent before retries were exhausted.</p><p>That single decision broke replayability.</p><p>TBIE clarified the failure immediately.</p><p>The problem was not merely worker instability.</p><p>The problem was:</p><p>Execution invalidated Intent prematurely.</p><h4>The Fix</h4><p>The worker execution model changed.</p><p>Instead of binary success/failure, workers returned:</p><p>retry</p><ul><li><p>do NOT delete SQS message</p></li><li><p>do NOT write terminal Truth</p></li></ul><p>terminal_failure</p><ul><li><p>write durable failure state</p></li><li><p>delete Intent</p></li></ul><p>completed</p><ul><li><p>write success state</p></li><li><p>delete Intent</p></li></ul><p>This restored replay semantics.</p><h4>Why This Matters Beyond Parjanya</h4><p>Many distributed systems accidentally conflate:</p><p>&#8220;execution failed once&#8221; with<br>&#8220;execution is permanently impossible.&#8221;</p><p>Those are not equivalent.</p><p>TBIE forced the architecture to encode that distinction explicitly.</p><h2>10. Truth Pending, Intent Missing</h2><p>Another class of failures appeared repeatedly.</p><h3>Symptom</h3><p>Rows remained:</p><p>pending_vlm_enrichment</p><p>But:</p><ul><li><p>queues were empty,</p></li><li><p>GPU workers never started,</p></li><li><p>no replay existed.</p></li></ul><p>The system appeared healthy.</p><p>But nothing moved.</p><h3>What TBIE Revealed</h3><p>Truth and Intent were decoupled.</p><p>The architecture had assumed:</p><p>&#8220;If Truth says pending, Intent must already exist.&#8221;</p><p>That assumption was false.</p><p>Reconciliation cannot be assumed. It must be continuously enforced.</p><h3>The Replay Architecture</h3><p>This led to:</p><ul><li><p>replay scripts,</p></li><li><p>scheduled replay Lambdas,</p></li><li><p>retriable failure reset workflows,</p></li><li><p>queue reconstruction logic.</p></li></ul><p>The replay Lambda evolved into a continuously running reconciler.</p><p>This was the moment the architecture stopped being merely a pipeline.</p><p>It became a platform.</p><h2>11. Wrong Bucket, Right Key</h2><h3>A Perfect Distributed Systems Failure</h3><p>One of the most revealing incidents involved bucket mismatch.</p><h4>Symptom</h4><p>GPU workers repeatedly failed with:</p><p>s3_download_error</p><p>Yet:</p><ul><li><p>queue depth was growing,</p></li><li><p>autoscaling worked,</p></li><li><p>workers were alive,</p></li><li><p>previews existed.</p></li></ul><p>Everything looked operational.</p><h4>Root Cause</h4><p>The SQS payload contained:</p><p>the correct object key,<br>but the wrong bucket.</p><p>The preview existed.</p><p>Just not in the referenced bucket.</p><h4>Why This Was Architecturally Important</h4><p>The system was reliably executing the wrong instruction.</p><p>This is one of the hardest classes of distributed failures.</p><p>Nothing is technically broken.</p><p>The system is functioning exactly as instructed.</p><p>The instruction itself is invalid.</p><p>TBIE framed this correctly:</p><p>Intent must not merely exist. Intent must be correct and replayable.</p><h4>The Fix</h4><p>The architecture introduced:</p><ul><li><p>bucket source-of-truth rules,</p></li><li><p>preview-aware routing,</p></li><li><p>enqueue eligibility tightening,</p></li><li><p>RAW-aware preview validation,</p></li><li><p>replay resets for retriable failures.</p></li></ul><p>The fix was operationally deeper than changing one field.</p><p>It hardened the meaning of Intent itself.</p><h2>12. CORS Failures and Split Truth</h2><p>One of the most subtle incidents occurred at the ingestion boundary.</p><h3>Symptom</h3><p>Frontend uploads failed with browser CORS errors.</p><p>But backend APIs:</p><ul><li><p>generated presigned URLs,</p></li><li><p>wrote pending upload records,</p></li><li><p>and returned success responses.</p></li></ul><p>Truth looked correct.</p><p>Execution never happened.</p><h3>What Actually Failed</h3><p>The browser failed during:</p><p>OPTIONS preflight.</p><p>Execution never reached:</p><p>PUT upload.</p><h3>The TBIE Interpretation</h3><p>Truth existed. Intent existed. Execution failed before realization.</p><p>This became an important diagnostic heuristic:</p><p>When work is stuck:</p><p>Ask whether:</p><ul><li><p>Truth is missing,</p></li><li><p>Intent is missing,</p></li><li><p>or Execution cannot realize Intent.</p></li></ul><p>That framing simplified debugging enormously.</p><h2>13. Event-Driven Architecture Exposes Infrastructure Drift Faster</h2><p>As the architecture became more reactive, infrastructure drift became easier to detect.</p><p>This was unexpected.</p><h3>Example: Stale Worker Image Tag</h3><p>The ASG launch template still referenced:</p><p>:v20</p><p>while the actual system had moved to:</p><p>:v23</p><p>The ASG launched correctly. Cloud-init executed. Docker attempted to pull. The image no longer existed.</p><p>Workers never started.</p><h3>The Deeper Problem</h3><p>Terraform ignored user_data changes.</p><p>This created silent divergence between:</p><p>declared source-of-truth,<br>and actual runtime execution.</p><p>TBIE exposed this as an Execution drift problem.</p><p>Truth, Belief, and Intent were all correct.</p><p>Execution itself had drifted away from reality.</p><h3>The Architectural Lesson</h3><p>Infrastructure reproducibility is not optional.</p><p>Execution environments must remain tied to durable source-of-truth.</p><p>Otherwise replay becomes dangerous because:</p><p>the same Intent may produce different outcomes over time.</p><h2>14. AMI Drift and Runtime Incompatibility</h2><p>Another failure emerged at the AMI layer.</p><h3>Symptom</h3><p>Containers started. But model loading crashed.</p><p>The model weights existed. The processors did not.</p><p>The AMI bake omitted Python files required by:</p><p>trust_remote_code=True</p><p>The worker entered a crashloop.</p><h3>Why This Was Important</h3><p>Again:</p><p>Truth was correct. Intent was correct. Belief suggested workers existed.</p><p>Execution failed due to stale artifacts.</p><p>This is precisely why replayable systems require reproducible execution environments.</p><p>TBIE repeatedly reinforced this architectural truth.</p><h2>15. The Replay Lambda Became the Control Plane</h2><p>Originally, the replay Lambda was operational glue.</p><p>Eventually, it became the platform control plane.</p><p>Responsibilities expanded to include:</p><ul><li><p>pending reconciliation,</p></li><li><p>retriable failure resets,</p></li><li><p>tenant discovery,</p></li><li><p>queue backlog management,</p></li><li><p>autoscaling coordination,</p></li><li><p>replay orchestration,</p></li><li><p>dynamic routing.</p></li></ul><p>The replay layer became central infrastructure.</p><p>This was a critical architectural evolution.</p><h2>16. The IAM Incident</h2><h3>When the Control Plane Goes Blind</h3><p>One of the most dangerous incidents involved a missing IAM permission.</p><h4>Symptom</h4><p>The replay Lambda continuously crashed on:</p><p>sqs:GetQueueAttributes</p><p>for nearly 12 hours.</p><p>But:</p><ul><li><p>EventBridge still invoked it,</p></li><li><p>the schedule looked healthy,</p></li><li><p>the infrastructure appeared alive.</p></li></ul><p>Meanwhile:</p><ul><li><p>pending rows accumulated,</p></li><li><p>queues stopped reconciling,</p></li><li><p>autoscaling logic failed.</p></li></ul><h3>The TBIE Lesson</h3><p>The control plane had lost Belief.</p><p>Without Belief:</p><p>the replay engine could not safely emit Intent,<br>queue guards could not function,<br>orchestration collapsed.</p><p>The system looked operational while the reconciler was effectively dead.</p><h3>The Operational Insight</h3><p>A scheduled Lambda is not necessarily a healthy Lambda.</p><p>Control-plane observability matters more than worker observability.</p><p>Why?</p><p>Because worker failures are recoverable.</p><p>Control-plane blindness disables recovery itself.</p><h2>17. Dynamic Tenant Discovery</h2><p>As Parjanya moved toward beta onboarding, static tenant configuration became a bottleneck.</p><p>Originally:</p><p>The replay Lambda used static tenant lists.</p><p>Every new tenant required:</p><ul><li><p>Terraform changes,</p></li><li><p>environment updates,</p></li><li><p>redeploys.</p></li></ul><p>This violated the self-service model.</p><h3>The Evolution</h3><p>The architecture introduced:</p><ul><li><p>tenant registry writes during upload completion,</p></li><li><p>runtime tenant discovery,</p></li><li><p>dynamic reconciliation.</p></li></ul><p>The control plane became data-driven rather than configuration-driven.</p><p>This is a major architectural distinction.</p><p>Reactive systems scale operationally only when discovery becomes dynamic.</p><h2>18. Regrading and Policy Replay</h2><p>One of the most powerful consequences of TBIE was deterministic replay.</p><p>This became especially valuable during policy changes.</p><h3>Example</h3><p>The IQA policy evolved to reject:</p><ul><li><p>screenshots,</p></li><li><p>banners,</p></li><li><p>posters,</p></li><li><p>slides,</p></li><li><p>social cards,</p></li><li><p>infographics,</p></li><li><p>illustrations.</p></li></ul><p>The architecture needed to:</p><ul><li><p>reset VLM-derived Truth,</p></li><li><p>regenerate Intent,</p></li><li><p>rerun GPU enrichment,</p></li><li><p>rewrite curation outputs.</p></li></ul><p>This was not merely a retry.</p><p>It was a deterministic policy replay.</p><h3>Why This Matters</h3><p>Most ML systems struggle with:</p><p>&#8220;How do we reprocess historical data safely?&#8221;</p><p>TBIE already contained the answer.</p><p>Truth could be reset to a replay boundary. Intent could be regenerated. Execution remained stateless.</p><p>The system became replay-native.</p><p>This is a profound operational capability.</p><h2>19. Queue Retention and Weekend Gaps</h2><p>Another subtle operational issue:</p><p>Scale-to-zero architectures create temporal gaps.</p><h3>Scenario</h3><p>Users upload images Friday evening. GPU workers remain offline over the weekend.</p><p>If queue retention is too short:</p><p>Intent disappears before execution resumes.</p><p>Truth remains pending.</p><p>Intent vanishes.</p><p>This is catastrophic reconciliation drift.</p><h3>The Fix</h3><p>Queue retention was extended.</p><p>This ensured Intent outlived temporary execution dormancy.</p><p>An important TBIE lesson emerged:</p><p>Intent durability must exceed execution availability windows.</p><h2>20. Why Event-Driven Reconciliation Matters</h2><h3>Beyond AI</h3><p>Although Parjanya is an AI platform, the architectural lessons generalize broadly.</p><p>The same TBIE principles apply to:</p><p>distributed media systems,<br>payment processing,<br>ETL pipelines,<br>logistics systems,<br>asynchronous workflows,<br>microservice orchestration,<br>large-scale ingestion platforms.</p><p>The core challenge is universal:</p><p>How do you maintain alignment between:</p><p>durable truth,<br>intended work,<br>operational state,<br>and actual execution?</p><p>TBIE provides a vocabulary for reasoning about that alignment.</p><h2>21. The Shift from Pipeline to Platform</h2><p>This was perhaps the most important realization.</p><p>A pipeline moves data.</p><p>A platform:</p><ul><li><p>survives retries,</p></li><li><p>supports replay,</p></li><li><p>reconciles state continuously,</p></li><li><p>tolerates execution drift,</p></li><li><p>evolves policy safely,</p></li><li><p>supports operational introspection,</p></li><li><p>and remains debuggable under failure.</p></li></ul><p>The event-driven TBIE architecture pushed Parjanya decisively toward the latter.</p><p>The replay Lambda stopped being a utility.</p><p>It became the reconciliation brain of the system.</p><p>The architecture stopped being:</p><p>&#8220;process uploaded images.&#8221;</p><p>It became:</p><p>&#8220;maintain durable correctness while asynchronous distributed execution continuously changes.&#8221;</p><p>That is a very different engineering problem.</p><h2>22. The Operator&#8217;s Mental Model</h2><p>TBIE becomes most useful when it changes how incidents are diagnosed.</p><p>By the time Parjanya matured into an event-driven reconciliation system, the debugging approach itself had changed. Operators no longer began by asking whether &#8220;the queue is healthy&#8221; or whether &#8220;the GPU workers are running.&#8221; Those signals still mattered, but they were no longer treated as authoritative.</p><p>Instead, every investigation began with a much more precise question:</p><p>Is the system waiting because Intent is missing, or is Intent present but Execution cannot realize it?</p><p>That distinction dramatically narrowed the search space during incidents.</p><p>If Truth showed a growing backlog while Intent remained near zero, the issue was usually in reconciliation itself. Replay Lambda failure, queue emission failure, stale tenant discovery, or a blind control plane could all create this pattern. The queue might look empty and the autoscaling group might remain at zero, yet the real failure would not be in the workers. It would be in the system&#8217;s ability to regenerate Intent from Truth.</p><p>If Intent existed but Execution failed repeatedly, the investigation shifted toward realization problems instead: bucket routing mismatches, stale AMIs, launch-template drift, IAM gaps, runtime incompatibilities, model-loading failures, endpoint routing problems, or browser-side execution failures.</p><p>That diagnostic framing changed operations significantly. Incidents became easier to classify because TBIE separated the architecture into meaningful operational boundaries. Instead of treating the platform as one opaque pipeline, operators could isolate whether the failure belonged to Truth, Belief, Intent, or Execution.</p><p>The model also made one uncomfortable reality obvious: dashboards alone are not enough. A queue can look healthy while Truth continues accumulating backlog. Autoscaling can look correct while workers continuously crashloop. A scheduled Lambda can appear operational while silently failing every invocation because of an IAM permission gap.</p><p>TBIE did not eliminate debugging complexity. What it did was make debugging systematic.</p><h2>23. When the System Hangs at 02:00 AM</h2><p>Architectural diagrams are useful during design reviews.</p><p>Runbooks matter during incidents.</p><p>One of the most important evolutions in Parjanya v2.0 was realizing that reconciliation needed to exist not only in architecture, but also in operational practice. TBIE only became truly useful once there was a repeatable process for recovering the system under pressure.</p><p>The first step during any &#8220;hung VLM&#8221; investigation became identifying the TBIE boundary itself.</p><p>Truth consisted of the DynamoDB image rows and their workflow state. Intent consisted of SQS messages representing GPU work. Execution consisted of GPU workers consuming that Intent and writing enriched Truth back into DynamoDB. Belief consisted of queue depth, autoscaling state, visibility counts, worker health, and operational telemetry.</p><p>Once those boundaries were established, incident triage became much more structured.</p><p>Operators first checked Truth backlog. Were rows accumulating in pending_vlm_enrichment? If yes, the system still believed work should happen.</p><p>Next came Intent backlog. Did SQS contain replayable work items? If Truth backlog was high while Intent remained near zero, then reconciliation itself had failed.</p><p>Then came Execution health. Were GPU workers alive? Were containers actually starting? Were model loads succeeding? Were workers consuming messages or continuously failing before acknowledgement?</p><p>Several operational shortcuts emerged over time.</p><p>If the GPU log group was empty while ASG instances existed, the problem was often below the application layer entirely. Cloud-init failures, stale image tags, or broken launch templates frequently surfaced first through EC2 console output rather than through CloudWatch worker logs.</p><p>If the replay Lambda appeared scheduled but no queue activity existed, IAM permissions became the first thing to inspect. One of the most dangerous incidents in the system occurred precisely because the reconciliation Lambda could no longer read queue attributes, effectively blinding the control plane while the infrastructure superficially appeared healthy.</p><p>If rows repeatedly failed with S3 download errors while workers remained alive, the issue was often deterministic addressing rather than transient instability. Wrong-bucket references, preview routing mismatches, or endpoint configuration drift could all create workers that failed consistently while still appearing operational.</p><p>Over time, this changed the operational mindset of the platform. The goal stopped being &#8220;restart the workers and hope.&#8221; The goal became understanding exactly where reconciliation had broken down and then repairing the appropriate boundary.</p><p>That distinction is subtle, but extremely important.</p><p>A resilient platform is not the one that avoids incidents. It is the one that can recover from them methodically.</p><h2>24. Guardrails and Proactive Controls</h2><p>One of the clearest architectural patterns that emerged from Parjanya was that every major incident eventually needed to produce a permanent guardrail.</p><p>Without that discipline, incidents remain stories. With it, incidents become operational evolution.</p><p>The architecture gradually accumulated a large number of proactive controls:</p><p>Transient worker failures no longer delete Intent prematurely. Replay Lambdas continuously reconcile pending Truth. Reproducible lockfiles prevent dependency drift. Terraform validations reject invalid wildcard CORS patterns. Tenant discovery became dynamic rather than operator-maintained. Queue retention was extended to match real outage windows rather than idealized assumptions.</p><p>Many of these controls were not introduced because the architecture diagram required them. They emerged because production failures revealed where reconciliation could silently drift.</p><p>This is one of the strongest long-term lessons from the TBIE model.</p><p>Resilience is not achieved through one large design decision. It is accumulated gradually through operational guardrails.</p><p>The mature version of the system looked very different from the original one not because the core architecture changed dramatically, but because every important failure eventually became:</p><p>a validation rule,<br>a replay strategy,<br>a Terraform constraint,<br>a CI assertion,<br>a queue safeguard,<br>or an operational diagnostic.</p><p>That is how resilient systems evolve in practice.</p><p>They convert incidents into institutional memory.</p><h2>25. Maintenance as a Reliability Discipline</h2><p>One of the easiest mistakes in distributed systems is assuming resilience is something implemented once.</p><p>In reality, resilience is maintained continuously.</p><p>By the later stages of Parjanya v2.0, the team had accumulated a growing operational checklist precisely because many failures were caused not by dramatic outages, but by small forms of drift.</p><p>Replay logic and worker behavior needed to evolve together. GPU image tags needed to stay aligned with launch templates. Lockfiles had to remain committed when dependencies changed. Tenant buckets required CORS validation before onboarding. Queue retention needed to reflect actual business downtime windows. Backend API contracts and frontend types had to remain synchronized.</p><p>None of these tasks sound individually sophisticated.</p><p>But distributed systems rarely collapse from a single catastrophic event. They erode through gradual inconsistency.</p><p>That realization changed how the platform was maintained.</p><p>Operational discipline became part of the architecture itself.</p><p>The maintenance checklist was therefore not merely documentation. It was a recognition that reconciliation must continue throughout the entire lifecycle of the platform.</p><h2>26. Why TBIE Matters Beyond AI</h2><p>Although Parjanya is an AI platform, the architectural lessons generalize broadly.</p><p>The same TBIE principles apply to:</p><p>distributed media systems,<br>payment processing,<br>ETL pipelines,<br>logistics systems,<br>asynchronous workflows,<br>microservice orchestration,<br>large-scale ingestion platforms.</p><p>The core challenge is universal:</p><p>How do you maintain alignment between:</p><p>durable truth,<br>intended work,<br>operational state,<br>and actual execution?</p><p>TBIE provides a vocabulary for reasoning about that alignment.</p><h2>27. The Shift from Pipeline to Platform</h2><ol><li><p>Truth must remain durable and replayable</p></li></ol><p>If Truth cannot reconstruct the system after failures, the architecture becomes operationally fragile.</p><ol start="2"><li><p>Intent is more important than most systems realize</p></li></ol><p>Intent is replayability.</p><p>Destroying Intent prematurely destroys recovery.</p><ol start="3"><li><p>Event-driven systems expose hidden drift faster</p></li></ol><p>Reactive architectures surface infrastructure inconsistencies earlier.</p><p>This is painful initially.</p><p>But healthier long-term.</p><ol start="4"><li><p>Execution must remain reproducible</p></li></ol><p>Replay without reproducibility becomes dangerous.</p><ol start="5"><li><p>Control-plane observability matters more than worker observability</p></li></ol><p>Worker crashes are recoverable. Blind reconcilers are not.</p><ol start="6"><li><p>Queue depth alone is not truth</p></li></ol><p>Belief metrics require interpretation.</p><p>Approximate counts are operational signals, not durable truth.</p><ol start="7"><li><p>Policy replay should be designed intentionally</p></li></ol><p>Eventually every ML platform needs deterministic reprocessing.</p><p>Replay-native architectures handle this gracefully.</p><ol start="8"><li><p>Distributed systems fail by divergence</p></li></ol><p>Not by total outage.</p><p>The hardest bugs were:</p><p>wrong bucket,<br>stale AMI,<br>hidden CORS mismatch,<br>invisible IAM gap,<br>frozen replay,<br>missing Intent.</p><p>TBIE helped make those failures explainable.</p><h2>28. The Future Direction</h2><p>The current architecture already points toward several future evolutions:</p><ul><li><p>multi-stage event-driven pipelines,</p></li><li><p>adaptive batching,</p></li><li><p>warm GPU pools,</p></li><li><p>richer metrics export,</p></li><li><p>dynamic replay orchestration,</p></li><li><p>per-stage autoscaling,</p></li><li><p>event-sourced workflow history,</p></li><li><p>tenant-aware media delivery,</p></li><li><p>replayable policy evolution.</p></li></ul><p>Importantly:</p><p>These evolutions do not require rewriting the architecture.</p><p>They emerge naturally because reconciliation is already foundational.</p><p>That is one of the strongest signs that the architecture direction is correct.</p><h2>Closing Thoughts</h2><p>TBIE did not begin as an attempt to create a framework.</p><p>It emerged because distributed AI infrastructure repeatedly exposed the same class of operational failures:</p><p>work disappearing,<br>retries becoming impossible,<br>control planes drifting,<br>execution environments diverging,<br>queues losing meaning,<br>infrastructure behaving correctly against stale assumptions.</p><p>The model became useful because it created clarity.</p><p>Truth. Belief. Intent. Execution.</p><p>Once those boundaries became explicit:</p><p>replay became easier,<br>debugging became faster,<br>autoscaling became safer,<br>policy evolution became manageable,<br>and infrastructure failures became explainable.</p><p>The most important lesson from Parjanya v2.0 is not that event-driven architectures are faster.</p><p>The deeper lesson is:</p><p>Resilient distributed systems are fundamentally reconciliation systems.</p><p>The system that survives is not necessarily the one with the fastest workers.</p><p>It is the one that can continuously reconstruct:</p><p>what is true,<br>what work should exist,<br>what execution already happened,<br>and what still needs to be reconciled.</p><p>That is what ultimately transformed Parjanya from a pipeline into a platform.</p>]]></content:encoded></item><item><title><![CDATA[Prompt Debt: How We Doubled Throughput Without Changing the Model]]></title><description><![CDATA[A Parjanya v2.0 field note on inferencing, information waste, and why deleting things sometimes creates more value than adding them]]></description><link>https://blog.phagyul.ai/p/prompt-debt-how-we-doubled-throughput</link><guid isPermaLink="false">https://blog.phagyul.ai/p/prompt-debt-how-we-doubled-throughput</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Wed, 17 Jun 2026 04:16:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!h96B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h96B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h96B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!h96B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!h96B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!h96B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h96B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_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;:1298886,&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://blog.phagyul.ai/i/202383039?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_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_!h96B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!h96B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!h96B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!h96B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3a4725-4e40-481b-bd3e-1c7c7aab5df3_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In May 2026, I found myself staring at a familiar engineering problem.</p><p>Parjanya&#8217;s Image Quality Assessment pipeline was approaching the limits of what our infrastructure could comfortably handle.</p><p>Inference workloads were growing.</p><p>Batch sizes were increasing.</p><p>Memory utilization was climbing.</p><p>And eventually, the system hit a wall.</p><p>A larger image.</p><p>A slightly bigger batch.</p><p>A little more context.</p><p>And then:</p><blockquote><p>CUDA Out of Memory.</p></blockquote><p>The obvious answer was straightforward.</p><p>Upgrade the hardware.</p><p>Move to larger GPUs.</p><p>Increase the budget.</p><p>Scale vertically.</p><p>That&#8217;s what I almost did.</p><p>Instead, I opened the prompt.</p><p>And that decision ended up saving far more money than a hardware upgrade would have.</p><div><hr></div><h2>The Assumption I Didn&#8217;t Question</h2><p>By this point in the Parjanya v2.0 journey, I had spent months thinking about infrastructure.</p><p>The previous two posts in this series covered:</p><ul><li><p>Multi-account AWS architecture</p></li><li><p>Terraform and operational discipline</p></li><li><p>CI/CD pipelines</p></li><li><p>IAM boundaries</p></li><li><p>Infrastructure scaling</p></li></ul><p>So when inference started becoming expensive, my instinct was predictable.</p><p>I looked at the hardware.</p><p>That&#8217;s what engineers do.</p><p>We assume the bottleneck lives where the graphs are red.</p><p>GPU memory usage was high.</p><p>Throughput was flattening.</p><p>Batch sizes were constrained.</p><p>The diagnosis seemed obvious.</p><p>But infrastructure metrics were only showing symptoms.</p><p>They weren&#8217;t showing the cause.</p><div><hr></div><h2>The Audit That Changed Everything</h2><p>Instead of pricing larger GPUs, I decided to audit the prompt itself.</p><p>At that point our VLM-based IQA system had evolved through multiple versions.</p><p>Each release added new capabilities:</p><ul><li><p>Better composition evaluation</p></li><li><p>Improved wildlife classification</p></li><li><p>More robust defect detection</p></li><li><p>Additional structured outputs</p></li><li><p>More nuanced confidence handling</p></li></ul><p>Every version added knowledge.</p><p>Almost nothing removed knowledge.</p><p>The prompt had become a living document.</p><p>Like most living documents, it accumulated debt.</p><p>When I finally measured it, the numbers surprised me.</p><p>The system prompt plus user context had grown to roughly:</p><p><strong>4,150 tokens</strong></p><p>Not because we needed 4,150 tokens.</p><p>Because nobody had challenged whether we still needed them.</p><div><hr></div><h2>What I Found</h2><p>The easiest way to describe it is this:</p><p>The prompt looked less like a carefully engineered system and more like a codebase that hadn&#8217;t been refactored in years.</p><p>There was useful logic.</p><p>There was historical baggage.</p><p>And there was a lot of dead code.</p><div><hr></div><h3>Unused Outputs</h3><p>One section calculated an overall quality score.</p><p>The model spent tokens reasoning about it.</p><p>The downstream system ignored it completely.</p><p>The actual acceptance and rejection decisions came from deterministic rules elsewhere in the pipeline.</p><p>The score existed because an earlier version needed it.</p><p>The current version didn&#8217;t.</p><p>Yet the prompt still carried the instructions.</p><div><hr></div><h3>Features That Never Shipped</h3><p>I found sections generating:</p><ul><li><p>search tags</p></li><li><p>mood descriptions</p></li><li><p>discovery metadata</p></li></ul><p>These outputs were originally intended for future content discovery features.</p><p>Those features never launched.</p><p>The instructions remained.</p><p>Every inference paid the cost.</p><p>Every single time.</p><div><hr></div><h3>Teaching the Model Things It Already Knew</h3><p>This was the biggest surprise.</p><p>Over time we&#8217;d added examples.</p><p>Then more examples.</p><p>Then explanations for the examples.</p><p>Then explanations explaining the explanations.</p><p>The prompt contained long sections describing:</p><ul><li><p>composition techniques</p></li><li><p>confidence scoring</p></li><li><p>framing recognition</p></li><li><p>classification behavior</p></li></ul><p>At one point those explanations were useful.</p><p>But the model wasn&#8217;t learning from scratch anymore.</p><p>The explanatory scaffolding had become informational overhead.</p><p>The rules mattered.</p><p>The essays explaining the rules did not.</p><div><hr></div><h2>I Started Thinking About It Like Technical Debt</h2><p>The moment everything clicked was when I stopped calling it prompt engineering.</p><p>This wasn&#8217;t prompt engineering.</p><p>This was refactoring.</p><p>The exact same process we apply to software.</p><p>In software we ask:</p><ul><li><p>Is this function still used?</p></li><li><p>Does this dependency still matter?</p></li><li><p>Is this abstraction providing value?</p></li><li><p>Can this code be simplified?</p></li></ul><p>I realized prompts deserve the same scrutiny.</p><p>A prompt is infrastructure.</p><p>It consumes resources.</p><p>It affects latency.</p><p>It affects throughput.</p><p>It affects cost.</p><p>And like any infrastructure, it accumulates debt.</p><p>I started calling this:</p><p><strong>Prompt Debt.</strong></p><div><hr></div><h2>What Stayed</h2><p>This is the part that surprised me most.</p><p>Almost all of the intelligence survived.</p><p>The capabilities remained intact.</p><p>The model still knew how to:</p><ul><li><p>recognize deliberate composition</p></li><li><p>distinguish artistic choices from technical defects</p></li><li><p>apply confidence-aware wildlife classification</p></li><li><p>detect focus issues</p></li><li><p>identify exposure problems</p></li><li><p>generate structured outputs</p></li><li><p>evaluate image quality</p></li></ul><p>We didn&#8217;t remove intelligence.</p><p>We removed repetition.</p><p>We removed explanation.</p><p>We removed historical residue.</p><p>The distinction matters.</p><div><hr></div><h2>The Numbers</h2><p>After the audit:</p><h3>System Prompt</h3><p>~700 tokens &#8594; ~360 tokens</p><h3>User Prompt</h3><p>~3,450 tokens &#8594; ~890 tokens</p><h3>Total Context</h3><p>~4,150 tokens &#8594; ~1,250 tokens</p><p>Approximately:</p><p><strong>70% reduction</strong></p><p>without changing:</p><ul><li><p>the model</p></li><li><p>the hardware</p></li><li><p>the infrastructure</p></li><li><p>the deployment architecture</p></li></ul><p>Only the prompt changed.</p><div><hr></div><h2>Why 70% Matters</h2><p>It&#8217;s tempting to see this as an academic optimization.</p><p>It wasn&#8217;t.</p><p>Those tokens had real operational consequences.</p><p>Every unnecessary token consumes:</p><ul><li><p>memory</p></li><li><p>compute</p></li><li><p>latency budget</p></li><li><p>throughput capacity</p></li></ul><p>On paper, a token looks small.</p><p>At scale, thousands of unnecessary tokens become infrastructure.</p><p>And infrastructure costs money.</p><p>Before the cleanup, our batching limits were constrained by context size.</p><p>After the cleanup, we could process roughly twice as many images within similar memory budgets.</p><p>The result was effectively:</p><p><strong>2x throughput without changing hardware.</strong></p><p>The kind of gain most teams expect from an expensive infrastructure project.</p><p>We got it from deleting text.</p><div><hr></div><h2>Every Token Has a Cost</h2><p>This became the biggest lesson of the entire exercise.</p><p>Engineers often think about infrastructure costs.</p><p>Few think about information costs.</p><p>Every token carries a burden.</p><p>A token occupies memory.</p><p>A token increases inference time.</p><p>A token competes for attention.</p><p>A token introduces complexity.</p><p>The question isn&#8217;t:</p><blockquote><p>&#8220;Can the model read this?&#8221;</p></blockquote><p>The question is:</p><blockquote><p>&#8220;Should the model be reading this at all?&#8221;</p></blockquote><p>Those are very different questions.</p><p>This was a practical reminder of a lesson I explored earlier in <em>Grounding Is Not a Prompt</em>. Models don&#8217;t become more faithful simply because we provide more instructions. What matters is the quality and relevance of information available at inference time. A smaller, denser prompt often outperforms a larger one filled with historical baggage and explanatory noise.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b18987ef-e1f5-4c1b-8bb3-39710cb58f7b&quot;,&quot;caption&quot;:&quot;Source: How Well Do Large Language Models Truly Ground?&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Grounding Is Not a Prompt&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-07T02:21:22.979Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!HHAz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f120e84-49db-45ec-a506-edf56f9c4e73_1536x970.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/grounding-is-not-a-prompt&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:187075330,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>The Broader Pattern</h2><p>The more I reflected on the exercise, the more it felt familiar.</p><p>This pattern appears everywhere.</p><p>Organizations accumulate meetings.</p><p>Software accumulates dependencies.</p><p>Infrastructure accumulates services.</p><p>Prompts accumulate instructions.</p><p>Over time, complexity grows through addition.</p><p>Rarely through subtraction.</p><p>Most systems become slower because nobody asks what can be removed.</p><p>Prompts are no different.</p><p>While reviewing the prompt, I kept thinking about a principle we previously discussed in <em>Databases, Caches and Queues: A Universal Rule for Distributed Systems</em>. Systems become resilient when information has clear ownership and purpose. The same principle applies to prompts. Every instruction should exist for a reason. If nobody consumes it, it becomes operational debt.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a0f2bc2c-55c1-46a1-b16b-e699ad9c583a&quot;,&quot;caption&quot;:&quot;Modern distributed systems fail not because of scale, but because of misplaced responsibility. As systems grow asynchronous, replicated, and fault-tolerant, confusion often arises over what represents reality, what represents optimization, and what represents&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Databases, Caches and Queues: A universal Rule for Distributed Systems&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-01T03:44:43.149Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!FlV_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F678c2435-563e-447a-86c3-de6ba19a0970_800x533.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/databases-caches-and-queues-a-universal&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:186410680,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:4,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>The Connection to Inferencing</h2><p>This experience fundamentally changed how I think about inference optimization.</p><p>Most conversations focus on:</p><ul><li><p>larger models</p></li><li><p>larger context windows</p></li><li><p>larger GPUs</p></li><li><p>more sophisticated hardware</p></li></ul><p>Those matter.</p><p>But they&#8217;re not always the first lever.</p><p>Sometimes the most effective optimization isn&#8217;t computational.</p><p>It&#8217;s informational.</p><p>Before changing the model, review the prompt.</p><p>Before upgrading the GPU, review the prompt.</p><p>Before increasing context windows, review the prompt.</p><p>The cheapest token is the one you never generate.</p><div><hr></div><h2>What Comes Next</h2><p>Prompt reduction was only one layer.</p><p>The next frontier involves serving optimization:</p><ul><li><p>prompt prefix caching</p></li><li><p>KV cache reuse</p></li><li><p>vLLM batching improvements</p></li><li><p>quantization strategies</p></li><li><p>memory-efficient inference</p></li></ul><p>Those areas still offer meaningful gains.</p><p>But they sit on top of a more fundamental principle.</p><p>Optimize information before optimizing infrastructure.</p><div><hr></div><h2>The Takeaway</h2><p>When the system first ran out of memory, I assumed we had a hardware problem.</p><p>What we actually had was an information problem.</p><p>The model wasn&#8217;t struggling because it lacked capacity.</p><p>It was struggling because we were making it carry unnecessary baggage.</p><p>That distinction changed how I think about AI systems.</p><p>We often assume progress requires adding something.</p><p>A larger model.</p><p>A larger GPU.</p><p>A larger context window.</p><p>A larger budget.</p><p>In this case, the breakthrough came from subtraction.</p><p>The model already knew enough.</p><p>The system simply needed less noise.</p><p>And that&#8217;s a lesson that extends far beyond prompts.</p><p>It&#8217;s a lesson about engineering itself.</p><div><hr></div><p><em>This concludes the initial Parjanya v2.0 engineering series. Across these three posts&#8212;from AWS account boundaries, to Terraform discipline, to prompt debt&#8212;the common theme has been surprisingly consistent: systems scale best when boundaries are clear, assumptions are explicit, and unnecessary complexity is removed. The challenge is rarely adding more. The challenge is knowing what to keep.</em></p><div><hr></div><h2>Further Reading</h2><p>If this article resonated with you, these related essays expand on the ideas discussed here:</p><ul><li><p><strong><a href="https://blog.phagyul.ai/p/grounding-is-not-a-prompt">Grounding Is Not a Prompt</a></strong> &#8212; Why better information retrieval often matters more than adding more instructions to a model.</p></li><li><p><strong><a href="https://blog.phagyul.ai/p/vlm-batch-inference-4-bit-quantization">VLM Batch Inference - 4 bit quantisation depth</a></strong> &#8212; The Hidden Cost of &#8220;Almost Fitting&#8221;</p></li><li><p><strong><a href="https://blog.phagyul.ai/p/context-engineering-and-context-debt">Context Engineering and Context Debt</a> &#8212; </strong><em><span data-color="rgb(54, 55, 55)" style="color: rgb(54, 55, 55);">a data investigation that revealed ~77% of my token spend was context accumulation waste, not productive reasoning. This is the framework I built to fix it &#8212; and the problem has a name: </span>Context Debt <span data-color="rgb(54, 55, 55)" style="color: rgb(54, 55, 55);">and the fix is:</span> Context Engineering <span data-color="rgb(54, 55, 55)" style="color: rgb(54, 55, 55);">.</span></em></p></li><li><p><strong><a href="https://blog.phagyul.ai/p/databases-caches-and-queues-a-universal">Databases, Caches and Queues: A Universal Rule for Distributed Systems</a></strong><a href="https://blog.phagyul.ai/p/databases-caches-and-queues-a-universal"> </a>&#8212; The Truth, Belief and Intent framework that inspired how we think about information flow across systems.</p></li><li><p><strong><a href="https://blog.phagyul.ai/p/tbie-in-practice-designing-resilient">TBIE in Practice: Designing Resilient AI Pipelines That Recover, Reconcile, and Re-run</a> - </strong>Reconciliation loop and TBIE model with case studies with Parjanya v2.0</p></li><li><p><strong><a href="https://blog.phagyul.ai/p/terraform-at-scale-what-actually">Terraform at Scale: What Actually Worked, What Didn&#8217;t, and the Cost of Trusting AI with Infrastructure</a></strong> &#8212; The previous post in this series, exploring operational discipline and infrastructure boundaries.</p></li><li><p><strong><a href="https://blog.phagyul.ai/p/why-we-use-three-aws-accounts-not">Why We Use Three AWS Accounts (Not Two) for Parjanya v2.0</a></strong><a href="https://blog.phagyul.ai/p/why-we-use-three-aws-accounts-not"> </a>&#8212; The architectural foundation that enabled the optimizations described here.</p></li></ul><div><hr></div><h2>Introducing the Inferencing Series</h2><p>This article marks the beginning of a new series exploring inferencing as a first-class engineering discipline. Much of the AI conversation today revolves around models, benchmarks, and training. Yet in production systems, the economics and behaviour of AI are often determined long after training is complete&#8212;during inference. The choices we make around prompts, context, quantization, batching, memory management, caching, retrieval, and serving architecture frequently have a greater impact on cost, latency, and reliability than changing the model itself.</p><p>Throughout this series, I&#8217;ll share lessons learned while building and operating Parjanya&#8217;s Visual Language Model (VLM) pipelines. Rather than focusing on LLM chat applications, the emphasis will be on real-world image understanding systems: image quality assessment, wildlife classification, structured extraction, multimodal reasoning, and the engineering decisions required to run them efficiently at scale. The goal is not simply to reduce costs, but to understand how information flows through an AI system and where meaningful optimization actually lives.</p><div><hr></div><h2>Why Start With Prompt Debt?</h2><p>Prompt Debt is an ideal starting point because it reveals a common misconception about AI systems: that performance improvements come primarily from adding more. More instructions. More examples. More context. More hardware. In practice, many mature VLM systems accumulate informational debt in the same way software accumulates technical debt&#8212;unused outputs, redundant instructions, abandoned features, and historical assumptions that continue consuming resources long after they stop creating value.</p><p>Future articles in the Inferencing Series will build on this foundation by exploring quantization, context engineering, grounding strategies, serving architectures, prompt caching, KV-cache optimization, batching, multimodal pipelines, and the operational realities of running VLM workloads in production. Prompt Debt is simply the first lens. The broader question&#8212;and the one that interests me most&#8212;is how to maximize signal while minimizing computational waste across the entire inferencing stack.</p><div><hr></div><p></p>]]></content:encoded></item><item><title><![CDATA[Terraform at Scale: What Actually Worked, What Didn’t, and the Cost of Trusting AI with Infrastructure]]></title><description><![CDATA[A Parjanya v2.0 field note from migrating a real platform across AWS accounts, repositories, and automation layers]]></description><link>https://blog.phagyul.ai/p/terraform-at-scale-what-actually</link><guid isPermaLink="false">https://blog.phagyul.ai/p/terraform-at-scale-what-actually</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Tue, 16 Jun 2026 04:30:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FmcI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_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_!FmcI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FmcI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!FmcI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!FmcI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!FmcI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FmcI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/981e19f5-1c53-45d1-b071-7abbe56d44bb_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;:1502563,&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://blog.phagyul.ai/i/202230143?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_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_!FmcI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!FmcI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!FmcI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!FmcI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F981e19f5-1c53-45d1-b071-7abbe56d44bb_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When people talk about Terraform, they often talk about Infrastructure as Code.</p><p>What I learned while building Parjanya v2.0 is that Terraform is really about something else:</p><p><strong>forcing operational discipline.</strong></p><p>Terraform didn&#8217;t magically simplify our infrastructure. It exposed assumptions, surfaced hidden dependencies, and forced us to formalize decisions we had previously gotten away with making informally.</p><p>As Parjanya evolved from a collection of scripts, console clicks, and one-off configurations into a multi-tenant image processing platform, Terraform became the backbone that allowed us to scale infrastructure without losing control.</p><p>It also introduced new challenges.</p><p>And when I layered AI-assisted engineering into the workflow, I discovered an entirely different category of problems worth documenting.</p><p>This post is the implementation companion to my previous article on why we chose a three-account AWS architecture for Parjanya v2.0.</p><p>That post explained the boundaries.</p><p>This one explains how we turned those boundaries into code.</p><div><hr></div><h2>The Reality of Operating Across Five Repositories</h2><p>Parjanya today spans five repositories.</p><p>Each exists for a reason.</p><ul><li><p><strong>parjanya-ml</strong> handles inference and model serving.</p></li><li><p><strong>parjanya-ops</strong> owns infrastructure and platform operations.</p></li><li><p><strong>parjanya-backend</strong> manages orchestration and APIs.</p></li><li><p><strong>parjanya-frontend</strong> serves tenant-facing experiences.</p></li><li><p><strong>parjanya-shared-libraries</strong> contains contracts and shared abstractions.</p></li></ul><p>The separation works well organizationally.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;2c65bc97-28aa-4849-96b3-84776f8019de&quot;,&quot;caption&quot;:&quot;After shipping Parjanya v1.0 through v1.3 (with 17+ patch releases), we&#8217;ve evolved from monolithic friction to a deliberate five-repository polyrepo architecture aligned with team structure and technical boundaries. This post documents our research-driven thought process, the specific tech stack (Nx frontend, FastAPI microservices, PyTorch + MIT-license&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Parjanya&#8217;s Polyrepo Architecture: Building Scalable AI/LLM Products with Organizational Autonomy (Part 1)&quot;,&quot;publishedBylines&quot;:[],&quot;post_date&quot;:&quot;2025-12-23T12:34:44.703Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!DlFL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa48be658-e370-4fcc-861a-5574afd8b22f_782x533.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/parjanyas-polyrepo-architecture-building&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:182407614,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>ML engineers don&#8217;t need to understand IAM condition keys.</p><p>Infrastructure engineers don&#8217;t need to navigate PyTorch dependencies.</p><p>Backend engineers don&#8217;t need to modify Terraform every time they ship a feature.</p><p>But Terraform exposed a challenge that few people talk about:</p><p><strong>cross-repository infrastructure dependencies.</strong></p><p>The moment one repository depends on infrastructure outputs defined in another, coordination becomes critical.</p><p>A renamed Terraform output in one repository can quietly break another repository that references it through remote state.</p><p>I&#8217;ve been bitten by this more than once.</p><p>Terraform didn&#8217;t prevent those mistakes.</p><p>What it did provide was visibility.</p><p>And visibility is often the difference between a recoverable issue and a production incident.</p><div><hr></div><h2>What Terraform Actually Improved</h2><p>A lot of Terraform discussions stay theoretical.</p><p>Here&#8217;s what it changed in practice for us.</p><h3>ECS and Warm Pools</h3><p>One of the first problems we tackled was cold-start latency.</p><p>Inference workloads running on ECS-backed EC2 instances would occasionally wait several minutes for capacity to become available.</p><p>To solve this, we implemented Auto Scaling Group warm pools.</p><p>The result wasn&#8217;t just faster startup times.</p><p>It gave us a repeatable way to define capacity behavior for different tenant tiers.</p><p>Instead of manually tuning infrastructure across environments, we could express those decisions through variables and deploy them consistently.</p><p>That may sound mundane.</p><p>But consistency becomes incredibly valuable once multiple environments, tenants, and deployment pipelines are involved.</p><div><hr></div><h3>Multi-Tenant S3 Isolation</h3><p>Parjanya is a multi-tenant platform.</p><p>Tenant isolation isn&#8217;t optional.</p><p>Terraform allowed us to codify S3 prefix-level isolation directly into IAM policies.</p><p>The most important outcome wasn&#8217;t the policy itself.</p><p>It was the reviewability.</p><p>A missing condition that could have exposed tenant object metadata became visible during code review instead of after deployment.</p><p>That&#8217;s one of Terraform&#8217;s underrated strengths:</p><p>It turns invisible infrastructure assumptions into visible diffs.</p><div><hr></div><h3>DynamoDB Tenant Boundaries</h3><p>The same pattern applied to DynamoDB.</p><p>Every tenant&#8217;s data is partitioned using tenant identifiers, with IAM enforcing access boundaries.</p><p>Could application code enforce those rules?</p><p>Yes.</p><p>Should application code be the only layer enforcing them?</p><p>Absolutely not.</p><p>Terraform helped us move those guarantees into infrastructure itself.</p><p>Even if application logic fails, IAM remains the final gatekeeper.</p><div><hr></div><h3>Event-Driven Infrastructure</h3><p>Parjanya&#8217;s processing pipeline relies heavily on EventBridge and SQS.</p><p>Before Terraform, environment drift was a recurring problem.</p><p>A queue configuration changed in Production but not Development.</p><p>An EventBridge rule existed in one environment but not another.</p><p>Over time these differences accumulate.</p><p>Terraform gave us repeatability.</p><p>The same modules, deployed consistently, dramatically reduced configuration divergence.</p><div><hr></div><h2>The Three-Account Migration</h2><p>The biggest Terraform project in Parjanya v2.0 wasn&#8217;t a service deployment.</p><p>It was infrastructure reorganization.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;78556e34-5bf1-4614-8cb0-f0c964a7944f&quot;,&quot;caption&quot;:&quot;When you&#8217;re building a startup, the default path is obvious:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Why We Use Three AWS Accounts (Not Two) for Parjanya v2.0&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-06-15T04:34:11.507Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!QEIO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c5c405-f110-4c39-aa87-4a649cc75bf0_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/why-we-use-three-aws-accounts-not&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:202074805,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>We migrated from a single AWS account into:</p><ul><li><p>Management / Tooling</p></li><li><p>Development</p></li><li><p>Production</p></li></ul><p>Terraform made that migration possible.</p><p>It did not make it easy.</p><div><hr></div><h3>Making State Account-Aware</h3><p>Our original infrastructure assumed everything lived in one account.</p><p>Provider configurations were implicit.</p><p>Cross-account roles didn&#8217;t exist.</p><p>Account boundaries didn&#8217;t exist.</p><p>The first step was making account ownership explicit.</p><p>That sounds simple until you realize every Terraform resource suddenly needs to know which AWS account it belongs to.</p><p>The work wasn&#8217;t intellectually difficult.</p><p>It was painstaking.</p><p>And this is where I learned an important lesson about AI-assisted engineering:</p><p>AI is surprisingly bad at repetitive infrastructure migrations unless it has complete context.</p><div><hr></div><h3>Migrating State Safely</h3><p>One of the most valuable Terraform commands I encountered during this process was:</p><p><code>terraform state mv</code></p><p>State migration sounds boring.</p><p>Until you realize a single mistake can cause Terraform to believe a production resource should be destroyed and recreated.</p><p>The migration process became an exercise in discipline:</p><p>Move state.</p><p>Run a plan.</p><p>Review carefully.</p><p>Repeat.</p><p>Slowly.</p><p>The temptation to batch changes is enormous.</p><p>Resisting that temptation saved us multiple times.</p><div><hr></div><h3>Cross-Account IAM</h3><p>The three-account architecture introduced a new category of complexity.</p><p>Trust relationships.</p><p>The Management account hosts shared tooling.</p><p>Development and Production need access to those resources.</p><p>Terraform became the mechanism for expressing those trust boundaries consistently.</p><p>What surprised me wasn&#8217;t the complexity of the IAM policies.</p><p>It was how much architectural thinking is required before writing any Terraform.</p><p>The tooling faithfully implements your design.</p><p>It does not validate whether the design itself is sensible.</p><div><hr></div><h3>Centralized State Management</h3><p>One decision I remain happy with is keeping Terraform state centralized within the Management account.</p><p>Development engineers can operate Development.</p><p>Production operators can manage Production.</p><p>But neither automatically gains access to every state file.</p><p>This separation aligns with the overall philosophy behind the architecture:</p><p>Boundaries first.</p><p>Convenience second.</p><div><hr></div><h2>Where AI Helped &#8212; And Where It Didn&#8217;t</h2><p>Throughout this migration I relied heavily on AI-assisted development.</p><p>Claude became part of the workflow.</p><p>Over time I learned that different models excel at very different tasks.</p><p>The results were revealing.</p><div><hr></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;172d4a1b-7754-4334-8b8f-aa5828ec4385&quot;,&quot;caption&quot;:&quot;A few months ago, I wrote about why I believed in a Haiku-first strategy: start with the cheapest and fastest model possible, then escalate only when the task genuinely becomes harder. That idea still makes sense in principle.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Sonnet 4.6 Became My New Benchmark for Building an Infra-Heavy VLM Platform&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-11T04:33:51.000Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!OkJ0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/sonnet-46-became-my-new-benchmark&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:197172333,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h3>Haiku: Fast But Dangerous for Infrastructure</h3><p>Haiku was excellent at generating boilerplate.</p><p>Variable files.</p><p>Module outputs.</p><p>Simple scaffolding.</p><p>But infrastructure isn&#8217;t just syntax.</p><p>Infrastructure is reasoning.</p><p>I repeatedly found that Haiku could generate valid Terraform that contained subtle security flaws.</p><p>The code looked correct.</p><p>The logic wasn&#8217;t.</p><p>That distinction matters.</p><p>A lot.</p><p>My conclusion became simple:</p><p><strong>Haiku should never be trusted with security-sensitive infrastructure decisions.</strong></p><div><hr></div><h3>Sonnet: The Daily Driver</h3><p>Most of our Terraform work happened with Sonnet.</p><p>For implementation tasks inside a repository, it performed extremely well.</p><p>Module structures.</p><p>Provider configurations.</p><p>Refactors.</p><p>General Terraform development.</p><p>Where it struggled was context.</p><p>A repository rename might affect multiple repositories.</p><p>A queue change might impact systems it couldn&#8217;t see.</p><p>The problem wasn&#8217;t model intelligence.</p><p>The problem was visibility.</p><p>The model can only reason about what you show it.</p><div><hr></div><h3>Opus: Better at Architecture Than Implementation</h3><p>I brought Opus into the process whenever decisions became architectural.</p><p>Questions like:</p><ul><li><p>Should this responsibility live in Management or Production?</p></li><li><p>How should artifacts flow between accounts?</p></li><li><p>What&#8217;s the cleanest trust model?</p></li></ul><p>These are trade-off questions.</p><p>Opus consistently handled them better than implementation-focused tasks.</p><p>The irony was that the more strategic the question became, the more useful the model became.</p><div><hr></div><h2>The Biggest Problem Wasn&#8217;t Terraform</h2><p>It Was Context.</p><p>This became one of the clearest lessons from Parjanya v2.0.</p><p>The hardest infrastructure problems weren&#8217;t provider bugs.</p><p>They weren&#8217;t Terraform limitations.</p><p>They weren&#8217;t AWS limitations.</p><p>They were context problems.</p><p>Infrastructure lived in one repository.</p><p>ML workloads lived in another.</p><p>Shared interfaces lived somewhere else.</p><p>Every repository understood part of the system.</p><p>No repository understood the entire system.</p><p>That&#8217;s why we started building supporting tooling and internal agents focused on context discovery and verification.</p><p>The challenge wasn&#8217;t generating code.</p><p>The challenge was understanding the system before generating code.</p><div><hr></div><h2>What Terraform Didn&#8217;t Solve</h2><p>It&#8217;s important to be honest about this.</p><p>Terraform isn&#8217;t a cure-all.</p><p>We still accumulated module sprawl.</p><p>We still dealt with drift.</p><p>We still had to manage secrets separately.</p><p>We still needed human judgment when reviewing large infrastructure changes.</p><p>Terraform gave us control.</p><p>It did not eliminate responsibility.</p><div><hr></div><h2>The Practical Lessons</h2><p>If I were starting again today, these are the lessons I&#8217;d carry forward.</p><p><strong>Use Terraform to enforce boundaries, not just provision resources.</strong></p><p><strong>Treat account architecture as an IAM problem first and a Terraform problem second.</strong></p><p><strong>Invest in cross-repository visibility before investing in more automation.</strong></p><p><strong>Choose AI models based on task type, not convenience.</strong></p><p><strong>Review infrastructure plans like code. Because they are.</strong></p><p><strong>Prioritize understanding the system before changing it.</strong></p><p>Most infrastructure failures aren&#8217;t caused by bad tooling.</p><p>They&#8217;re caused by incomplete context.</p><div><hr></div><h2>Looking Ahead</h2><p>The three-account architecture gave us the boundaries.</p><p>Terraform gave us the implementation.</p><p>But neither addressed another challenge that emerged as Parjanya&#8217;s inference workloads grew:</p><p>Cost.</p><p>Specifically, inference cost.</p><p>While we were optimizing infrastructure, another inefficiency was hiding in plain sight.</p><p>Our VLM system prompt had quietly grown to over 4,000 tokens.</p><p>Most of it wasn&#8217;t doing useful work.</p><p>Tomorrow&#8217;s post moves from infrastructure into inference engineering.</p><p>I&#8217;ll share how we reduced prompt size by nearly 70%, doubled throughput on the same hardware, and discovered that some of the most impactful optimizations don&#8217;t involve changing models at all.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;255188e9-f6ce-4a93-bb4d-47d72d38a327&quot;,&quot;caption&quot;:&quot;TL;DR: I noticed Haiku 4.5 being spawned as a subagent during an Opus 4.7 session. That observation opened a data investigation that revealed ~77% of my token spend was context accumulation waste, not productive reasoning. This is the framework I built to fix it &#8212; and the problem has a name:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Context Engineering and Context Debt&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-20T06:06:57.000Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!dA7S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/context-engineering-and-context-debt&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:198514119,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>The Takeaway</h2><p>Terraform didn&#8217;t make Parjanya v2.0 successful.</p><p>What it did was force us to be explicit.</p><p>Explicit about ownership.</p><p>Explicit about trust boundaries.</p><p>Explicit about infrastructure decisions.</p><p>And perhaps most importantly, explicit about the assumptions we were making.</p><p>That&#8217;s the real value of Infrastructure as Code.</p><p>Not automation.</p><p>Clarity.</p><p>And clarity scales far better than heroics.</p><div><hr></div><p><em>This is part of my ongoing Parjanya v2.0 field notes, documenting the architectural, operational, and engineering decisions behind building a multi-tenant AI platform. In the next post, I&#8217;ll move beyond infrastructure and into inference optimization&#8212;where a prompt review ended up delivering more value than a hardware upgrade.</em></p>]]></content:encoded></item><item><title><![CDATA[Why We Use Three AWS Accounts (Not Two) for Parjanya v2.0]]></title><description><![CDATA[The infrastructure decision most startups postpone &#8212; and the one I almost did too]]></description><link>https://blog.phagyul.ai/p/why-we-use-three-aws-accounts-not</link><guid isPermaLink="false">https://blog.phagyul.ai/p/why-we-use-three-aws-accounts-not</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Mon, 15 Jun 2026 04:34:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UKDk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When you&#8217;re building a startup, the default path is obvious:</p><p>One AWS account.</p><p>Maybe two if you&#8217;re feeling disciplined.</p><p>One for development. One for production.</p><p>It sounds clean. It sounds sufficient.</p><p>For a while, I thought so too.</p><p>As Parjanya evolved into a multi-tenant image processing platform with real workloads, real customers, and increasingly complex infrastructure, I started asking a different question:</p><p><strong>What does the minimum viable production-grade AWS architecture actually look like?</strong></p><p>The answer wasn&#8217;t one account.</p><p>It wasn&#8217;t even two.</p><p>It was three.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UKDk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UKDk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!UKDk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!UKDk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!UKDk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UKDk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a8ba4f8-7108-45e5-8859-896188a41372_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;:1357909,&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://blog.phagyul.ai/i/202074805?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_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_!UKDk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!UKDk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!UKDk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!UKDk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a8ba4f8-7108-45e5-8859-896188a41372_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Today Parjanya v2.0 runs on a three-account AWS structure:</p><ul><li><p>Management / Tooling</p></li><li><p>Development</p></li><li><p>Production</p></li></ul><p>It added complexity upfront.</p><p>It also removed entire categories of risk that I didn&#8217;t want to discover during an incident.</p><p>This post explains why I made that decision, what problems it solved, what I intentionally chose not to build yet, and how I think other SaaS teams should approach the same trade-offs.</p><div><hr></div><h2>The Setup We Started With</h2><p>Like most startups, we began with a single AWS account.</p><p>Everything lived there:</p><ul><li><p>Development resources</p></li><li><p>Production workloads</p></li><li><p>CI/CD pipelines</p></li><li><p>Container registries</p></li><li><p>Shared infrastructure</p></li></ul><p>The setup was fast.</p><p>The problem with fast is that it often hides risk.</p><p>Nothing feels wrong until the day an experiment, a permission mistake, or an infrastructure change unexpectedly affects production.</p><p>As we started formalising Parjanya v2.0, I realised I didn&#8217;t want to keep relying on discipline alone.</p><p>I wanted structural safety.</p><p>That&#8217;s when the three-account model emerged.</p><div><hr></div><h2>The Third Account Isn&#8217;t Staging</h2><p>Whenever I mention three accounts, people assume I mean:</p><ul><li><p>Dev</p></li><li><p>Staging</p></li><li><p>Prod</p></li></ul><p>That&#8217;s not what I built.</p><p>The structure is:</p><h3>Management / Tooling Account</h3><p>This account owns the operational plumbing:</p><ul><li><p>Container registry</p></li><li><p>Terraform state</p></li><li><p>CI/CD definitions</p></li><li><p>Cross-account IAM roles</p></li><li><p>Billing aggregation</p></li><li><p>Audit aggregation</p></li></ul><p>Importantly, <strong>it never runs application workloads.</strong></p><h3>Development Account</h3><p>This is where experimentation happens.</p><p>Infrastructure changes.</p><p>New features.</p><p>Testing.</p><p>Things break here by design.</p><h3>Production Account</h3><p>This runs live tenant workloads and customer-facing infrastructure.</p><p>Nothing experimental belongs here.</p><p>The critical insight is that the third account isn&#8217;t another environment.</p><p>It&#8217;s neutral territory.</p><p>It owns the things both Dev and Prod need, without forcing either environment to depend directly on the other.</p><div><hr></div><h2>The First Problem It Solves: Artifact Ownership</h2><p>Consider a simple CI/CD pipeline.</p><p>It builds a Docker image.</p><p>Where should that image live?</p><p>If the registry sits in Dev, then Production depends on Development.</p><p>If the registry sits in Prod, Development depends on Production.</p><p>Neither feels right.</p><p>The Management account solves this neatly.</p><p>CI builds once.</p><p>Pushes once.</p><p>Both Dev and Prod pull the exact same artifact.</p><p>No rebuilds.</p><p>No copies.</p><p>No divergence.</p><p>One image.</p><p>One source of truth.</p><p>Multiple promotions.</p><p>That sounds like a small detail until you&#8217;re debugging an issue and need absolute confidence that Production is running the same artifact that passed validation earlier.</p><div><hr></div><h2>The Real Reason: Blast Radius</h2><p>This is the reason that mattered most to me.</p><p>AWS accounts are the strongest isolation boundary AWS provides.</p><p>A broken IAM policy.</p><p>An accidental deletion.</p><p>A Terraform mistake.</p><p>A bad deployment.</p><p>These things cannot casually cross account boundaries.</p><p>That matters because Development should be chaotic.</p><p>People test things.</p><p>Infrastructure changes.</p><p>Experiments happen.</p><p>Failures are expected.</p><p>Production should not inherit that chaos.</p><p>With separate accounts, Dev can fail spectacularly and Prod remains untouched.</p><p>That&#8217;s a much stronger guarantee than &#8220;everyone promises to be careful.&#8221;</p><div><hr></div><h2>Credentials Become Safer by Default</h2><p>A surprisingly useful side effect is credential isolation.</p><p>When someone is working in the Dev account, their credentials only see Dev resources.</p><p>They aren&#8217;t merely discouraged from touching Production.</p><p>Production is outside their scope.</p><p>The same applies to automation.</p><p>The deployment pipeline for Dev assumes different roles than the deployment pipeline for Prod.</p><p>The separation isn&#8217;t cultural.</p><p>It&#8217;s structural.</p><p>And structural controls tend to survive stressful situations much better than process documents.</p><div><hr></div><h2>Cost Visibility Becomes Obvious</h2><p>Another benefit I underestimated was cost attribution.</p><p>Using AWS Organizations means every account naturally reports its own spending.</p><p>Development spend is visible.</p><p>Production spend is visible.</p><p>There&#8217;s no tagging strategy to maintain.</p><p>No allocation spreadsheets.</p><p>No cost archaeology.</p><p>When the AWS bill changes, I immediately know whether it was caused by:</p><ul><li><p>a production feature,</p></li><li><p>increased tenant activity,</p></li><li><p>or a development experiment that ran longer than intended.</p></li></ul><p>That clarity is surprisingly valuable.</p><div><hr></div><h2>What Lives Where</h2><p>The distribution is straightforward.</p><h3>Management Account</h3><ul><li><p>Container registry</p></li><li><p>Terraform backend</p></li><li><p>CI/CD pipelines</p></li><li><p>Cross-account IAM roles</p></li><li><p>Billing aggregation</p></li><li><p>Audit logging</p></li></ul><h3>Development Account</h3><ul><li><p>Full application stack</p></li><li><p>Synthetic tenant data</p></li><li><p>Reduced-scale services</p></li><li><p>Fast feedback loops</p></li><li><p>Manual automation triggers</p></li></ul><h3>Production Account</h3><ul><li><p>Live tenant workloads</p></li><li><p>Customer-facing services</p></li><li><p>Scheduled automation</p></li><li><p>Alerting</p></li><li><p>Full-scale infrastructure</p></li></ul><p>The key principle is simple:</p><p><strong>No application workloads run in the Management account.</strong></p><p>It exists to operate the platform, not host it.</p><div><hr></div><h2>The Deployment Flow</h2><p>The deployment path now looks like this:</p><ol><li><p>Code lands on the main branch.</p></li><li><p>CI/CD runs in the Management account.</p></li><li><p>The pipeline assumes a deployment role in Dev.</p></li><li><p>Integration tests run.</p></li><li><p>The same artifact is promoted into Prod.</p></li></ol><p>Production never builds code.</p><p>Production never owns source repositories.</p><p>Production simply runs validated artifacts.</p><p>That separation removes a surprising amount of operational risk.</p><div><hr></div><h2>What I Chose Not to Build Yet</h2><p>Architecture decisions are often more about what you don&#8217;t build than what you do.</p><h3>No Staging Environment</h3><p>Yet.</p><p>A true staging environment means maintaining a production-like replica.</p><p>That&#8217;s useful.</p><p>It&#8217;s also expensive.</p><p>At our current scale, good automated testing in Dev provides far more value than maintaining another full environment.</p><p>The architecture already supports a staging account.</p><p>I simply chose not to pay for it yet.</p><h3>No Tenant-Level VPC Isolation</h3><p>Today tenant isolation is logical rather than physical.</p><p>Data boundaries are enforced at the application and storage layers.</p><p>Per-tenant VPCs or accounts add stronger isolation, but also significant complexity.</p><p>Most SaaS companies don&#8217;t need that level of separation until enterprise customers explicitly require it.</p><p>We&#8217;re not there yet.</p><h3>No Dedicated Security Account</h3><p>AWS would ideally have:</p><ul><li><p>Management</p></li><li><p>Security</p></li><li><p>Dev</p></li><li><p>Prod</p></li></ul><p>with centralized immutable audit storage.</p><p>I agree with that architecture.</p><p>I also believe infrastructure maturity should follow business reality.</p><p>We&#8217;ll add a dedicated security account when compliance requirements justify it.</p><p>Not before.</p><div><hr></div><h2>My Rule of Thumb for Startups</h2><p>If you&#8217;re building a SaaS product and you&#8217;ve moved beyond proof-of-concept, my recommendation is straightforward:</p><h3>Start with Three Accounts</h3><p>Management.</p><p>Development.</p><p>Production.</p><p>The setup overhead is measured in hours.</p><p>The long-term safety benefits are measured in years.</p><h3>Don&#8217;t Rush Into Staging</h3><p>Build staging when your release process genuinely requires it.</p><p>Not because every architecture diagram on the internet includes one.</p><h3>Use AWS Organizations Early</h3><p>Retrofitting Organizations later is painful.</p><p>Starting with it is easy.</p><p>Future-you will be grateful.</p><h3>Treat the Management Account as Permanent Infrastructure</h3><p>Products evolve.</p><p>Tooling evolves.</p><p>The operational foundation should remain stable.</p><p>The Management account owns the plumbing, not the application.</p><div><hr></div><h2>Looking Ahead</h2><p>The current structure gives me a clear path forward.</p><p>When the platform grows, I can add:</p><ul><li><p>A staging account</p></li><li><p>A dedicated security account</p></li><li><p>Enterprise tenant accounts</p></li></ul><p>Each becomes an extension of the existing architecture rather than a redesign.</p><p>That&#8217;s exactly what I wanted.</p><div><hr></div><h2>The Takeaway</h2><p>The strongest boundary in AWS is the account boundary.</p><p>Use it deliberately.</p><p>For me, three accounts turned out to be the minimum structure that delivered:</p><ul><li><p>blast-radius isolation,</p></li><li><p>clean credential scoping,</p></li><li><p>predictable deployments,</p></li><li><p>and clear cost attribution.</p></li></ul><p>Not because it&#8217;s elegant on a diagram.</p><p>Because it makes operational mistakes dramatically less expensive.</p><p>Parjanya v2.0 is being built with longevity in mind.</p><p>The three-account architecture is one of the quiet decisions that makes everything else possible.</p><div><hr></div><p>The architecture looks clean on a diagram.</p><p>Reality was messier.</p><p>Moving Parjanya from a single AWS account to a three-account model meant refactoring Terraform state, redesigning IAM trust relationships, rebuilding deployment pipelines, and discovering that AI-generated infrastructure code is only as good as the context you give it.</p><p>Tomorrow, I&#8217;ll share the implementation story&#8212;what broke, what surprised us, and why the hardest part of infrastructure isn&#8217;t Terraform itself, but managing context across systems, repositories, and teams.</p><div><hr></div><p><em>This is part of my ongoing field notes from building Parjanya v2.0 &#8212; a multi-tenant image QA platform. I write about the architectural decisions, trade-offs, mistakes, and lessons learned while building it in public.</em></p>]]></content:encoded></item><item><title><![CDATA[Archetypes of the Southern Ocean]]></title><description><![CDATA[How the Falkland Islands, South Georgia and Antarctica Changed the Way I See Wildlife]]></description><link>https://blog.phagyul.ai/p/archetypes-of-the-southern-ocean</link><guid isPermaLink="false">https://blog.phagyul.ai/p/archetypes-of-the-southern-ocean</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Wed, 10 Jun 2026 15:55:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kI5-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.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_!kI5-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kI5-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.png 424w, https://substackcdn.com/image/fetch/$s_!kI5-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.png 848w, https://substackcdn.com/image/fetch/$s_!kI5-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!kI5-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kI5-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.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;:1921499,&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://blog.phagyul.ai/i/201469626?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.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_!kI5-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.png 424w, https://substackcdn.com/image/fetch/$s_!kI5-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.png 848w, https://substackcdn.com/image/fetch/$s_!kI5-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!kI5-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fe0392-4e38-4076-bd17-51ed46ad3c51_1535x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A few weeks ago, one of the photographs from this series, <em>Vamana</em>, was selected as a finalist in the Black &amp; White category of the <a href="https://refocus-awards.com/people-vote-award/vamana">ReFocus Awards.</a></p><p>The image sparked an unexpected response. Friends who had seen it over the past several months kept asking the same questions:</p><div class="pullquote"><p><em><strong>&#8220;How was this created?&#8221;</strong></em></p><p><em><strong>&#8220;Was it made in-camera?&#8221;</strong></em></p><p><em><strong>&#8220;What were you trying to show?&#8221;</strong></em></p><p><em><strong>&#8220;Why does it feel mythological?&#8221;</strong></em></p></div><p>I promised to write about it when I first shared the image shortly after returning from Antarctica in October 2025. Like many unfinished promises to myself, it remained buried beneath work, travel, writing and countless photographs waiting to be processed.</p><p>The ReFocus recognition felt like the right moment to finally tell the story.</p><p>Because these photographs were never planned as a project.</p><p>They emerged gradually during the journey.</p><p>And like many of my favourite images, they began with a problem.</p><div><hr></div><h2>The Problem of Scale</h2><p>Antarctica, South Georgia and the Falkland Islands repeatedly confronted me with a challenge that a single photograph struggled to solve.</p><p>Scale.</p><p>A portrait could show an individual bird.</p><p>A landscape could show the colony.</p><p>But neither could convey what it felt like to stand there.</p><p>One of the earliest moments came on Steeple Jason Island in the Falklands.</p><p>Before landing, we had been briefed that we would be visiting one of the world&#8217;s largest Black-browed Albatross colonies.</p><p>I knew the numbers.</p><p>I had seen the photographs.</p><p>But numbers and photographs do not prepare you for the experience.</p><p>As I climbed the slope and looked across the colony, thousands upon thousands of albatrosses occupied the hillsides in every direction.</p><p>My instinct was to photograph an individual bird.</p><p>My second instinct was to photograph the colony.</p><p>Neither image felt complete.</p><p>The bird lacked context.</p><p>The landscape lacked intimacy.</p><p>I wanted both.</p><p>That was the moment the experiment began.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!opmB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!opmB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!opmB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!opmB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!opmB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!opmB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg&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;:1209987,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/201469626?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!opmB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!opmB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!opmB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!opmB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6a368b4-d573-4446-82e4-5ed5d4186d98_1920x1281.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Discovering Multiple Exposure</h2><p>The Canon R5C includes an in-camera multiple exposure mode.</p><p>It is a feature that many photographers know exists but few use regularly.</p><p>I had experimented with it before, but mostly as a creative exercise.</p><p>This time it felt useful.</p><p>Instead of creating a portrait and a landscape separately, I wondered whether I could combine them into a single frame.</p><p>Not digitally.</p><p>Not later in Photoshop.</p><p>But in-camera.</p><p>The goal wasn&#8217;t artistic abstraction.</p><p>At least not initially.</p><p>The goal was documentation.</p><p>I wanted to document how the place felt.</p><p>My settings remained remarkably simple throughout the project:</p><ul><li><p>Canon R5C</p></li><li><p>RF 100-500mm lens</p></li><li><p>Multiple Exposure mode</p></li><li><p>Continuous shooting</p></li><li><p>Additive/Luminance blending</p></li><li><p>Mostly 2 exposures per image (3 exposures only for <em>Vamana)</em></p></li></ul><p>Luminance blending proved especially important.</p><p>It allowed brighter areas from one frame to merge naturally with darker regions from another, creating layered images that retained structure without becoming visually chaotic.</p><p>The process quickly became addictive.</p><p>Instead of searching for a decisive moment, I began searching for relationships between moments.</p><div><hr></div><h2>Rajahamsa</h2><p>The first successful image from the experiment became what I later titled <em><strong>Rajahamsa</strong></em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o-Oe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o-Oe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!o-Oe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!o-Oe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!o-Oe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o-Oe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg&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;:1175173,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/201469626?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!o-Oe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!o-Oe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!o-Oe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!o-Oe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F052d764e-26e6-4676-b3e2-c7ebd087756e_1920x1281.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A Black-browed Albatross emerged from within its own colony.</p><p>The bird was simultaneously an individual and a multitude.</p><p>The more I looked at the image, the less it felt like a documentary photograph.</p><p>Something symbolic had appeared.</p><p>At the time I couldn&#8217;t fully explain it.</p><p>I only knew the image felt different.</p><p>It seemed to contain an idea rather than merely a subject.</p><p>Looking back now, I realize that was the first indication that the project was heading somewhere unexpected.</p><div><hr></div><h2>From Observation to Archetype</h2><p>The transformation happened gradually.</p><p>Not during editing.</p><p>Not even during shooting.</p><p>It happened while looking.</p><p>Many of the stories we encounter in childhood never truly leave us.</p><p>They remain dormant somewhere beneath conscious thought.</p><p>Standing among vast colonies of birds and seals at the edge of the world, those stories began resurfacing.</p><p>Not literally.</p><p>Symbolically.</p><p>The animals remained animals.</p><p>But they also began to resemble archetypes.</p><p>The same way clouds occasionally resemble faces.</p><p>Or mountains resemble sleeping giants.</p><p>The photographs were becoming bridges between observation and imagination.</p><div><hr></div><h2>Vamana</h2><p>The turning point arrived with a lone penguin(A&#271;el&#233;) standing alone an ice scape and there near by an immense colony of Adele and Rockhopper (I recall!)</p><p>Unlike the other images in the series, <em>Vamana</em> required three exposures.</p><p>An individual penguin.</p><p>The colony below.</p><p>The surrounding landscape.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t4vK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t4vK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg 424w, https://substackcdn.com/image/fetch/$s_!t4vK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg 848w, https://substackcdn.com/image/fetch/$s_!t4vK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!t4vK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t4vK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1227283,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/201469626?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!t4vK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg 424w, https://substackcdn.com/image/fetch/$s_!t4vK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg 848w, https://substackcdn.com/image/fetch/$s_!t4vK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!t4vK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc47892cc-1249-40a9-bca5-7f1144ef15c7_1920x1003.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When the image appeared on the camera screen, something immediately felt familiar.</p><p>A small figure.</p><p>An immeasurable world.</p><p>A paradox of scale.</p><p>It reminded me of Vamana, the dwarf incarnation who expands beyond expectation and measures the universe itself.</p><p>The connection was not deliberate.</p><p>It emerged after the photograph existed.</p><p>The mythology wasn&#8217;t guiding the image.</p><p>The image was awakening the mythology.</p><p>For the first time I began wondering whether these photographs might belong together as a series.</p><div><hr></div><h2>Jatayu</h2><p>If there is a photograph that convinced me the project was real, it was <em>Jatayu</em>.</p><p>Captured among the king penguin colonies of South Georgia, the image combines a chick&#8217;s portrait with thousands of penguins spread across a glacial valley.</p><p>The resulting figure feels monumental.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T76a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T76a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!T76a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!T76a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!T76a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T76a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg&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;:1387963,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/201469626?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T76a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!T76a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!T76a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!T76a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d3168e-52fc-474e-8ed8-f5d25b5d2ff0_1920x1281.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Protective.</p><p>Almost watchful.</p><p>The glacier behind it only amplifies that sensation.</p><p>I remember staring at the rear LCD and immediately thinking:</p><p><strong>&#8220;That looks like Jatayu.&#8221;</strong></p><p>Not because it resembled any traditional depiction.</p><p>But because it carried the emotional weight I associated with the character.</p><p>Courage.</p><p>Guardianship.</p><p>Sacrifice.</p><p>For the first time, I stopped thinking about multiple exposure as a technique.</p><p>And started thinking about it as a language.</p><div><hr></div><h2>When Wildlife Becomes Myth</h2><p>One question I am often asked is whether these photographs were intended to illustrate Hindu mythology.</p><p>The answer is no.</p><p>At least not consciously.</p><p>I wasn&#8217;t searching for Vamana.</p><p>I wasn&#8217;t searching for Jatayu.</p><p>I wasn&#8217;t searching for Rajahamsa.</p><p>I was searching for ways to describe experiences that exceeded the limits of a single frame.</p><p>The mythology appeared later.</p><p>What fascinates me now is that this happened almost automatically.</p><p>Faced with extraordinary wildlife spectacles, my mind reached for archetypes I had inherited through stories.</p><p>Perhaps that is what myths have always done.</p><p>They give us a language for experiences that feel larger than ordinary reality.</p><div><hr></div><h2>Technical Notes</h2><p>All photographs in this series were created entirely in-camera using the Canon R5C.</p><p>No compositing was performed in post-processing.</p><p>The images rely on:</p><ul><li><p>Multiple Exposure mode</p></li><li><p>Continuous shooting</p></li><li><p>Luminance blending</p></li><li><p>Telephoto compression using the RF 100-500mm lens</p></li></ul><p>Most images use two exposures.</p><p><em>Vamana</em> uses three exposures.</p><p>What appears complex is actually the result of repeated experimentation in the field and a willingness to embrace unpredictability.</p><p>The final image often revealed itself only after the shutter sequence was complete.</p><div><hr></div><h2>Looking Back</h2><p>When I boarded the expedition vessel, I expected wildlife photography.</p><p>I did not expect a conversation with memory.</p><p>Yet that is ultimately what this project became.</p><p>The Southern Ocean presented extraordinary animals, extraordinary landscapes and extraordinary scale.</p><p>Multiple exposure allowed those experiences to coexist within a single frame.</p><p>And somewhere between observation and imagination, the birds became archetypes.</p><p>Not because they ceased being wildlife.</p><p>But because they became something more.</p><p>A reminder that every act of seeing is shaped by the stories we carry with us.</p><div><hr></div><p>more images from the series arrived unexpectedly, </p><h3>Matsya &#8594; Preservation of life</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fzMD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fzMD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fzMD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fzMD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fzMD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fzMD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg&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;:965530,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/201469626?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fzMD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fzMD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fzMD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fzMD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40da258-5c03-4e04-bd89-fdd47f8f5d33_1920x1281.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>While photographing a Gentoo penguin colony in Antarctica, I created a multiple exposure that combined the landscape, the colony, and a solitary penguin. Later, as I revisited the frame, it reminded me of <strong>Matsya</strong>, the fish incarnation of Vishnu in Hindu mythology.</p><p>In the ancient story, Matsya appears during a great deluge and guides a vessel carrying life through the flood, ensuring continuity when the world stands on the edge of destruction. In this photograph, the expedition ship (our own Ortelius MV) rests in the distant background while the penguin emerges as a quiet, symbolic guide in the foreground. The resemblance was not planned in the field, but revealed itself later&#8212;one of those moments where photography becomes less about recording what is seen and more about discovering meaning within what was witnessed.</p><p>Whether coincidence or subconscious association, the image felt like a reminder that stories often exist before we recognize them. The camera records light; imagination completes the journey.</p><h3>Varaha &#8594; Restoration of the world</h3><p>By the end of the expedition, I had stopped looking for specific characters. Instead, I simply observed and waited for forms to emerge on their own. Varaha appeared unexpectedly&#8212;in the shape of ice, snow, and a colony scattered across the shoreline. In Hindu mythology, Varaha rescues the Earth from cosmic waters and restores balance to the world. Standing in Antarctica, a place that constantly reminds us of both fragility and endurance, I found the symbolism difficult to ignore. It became a fitting final archetype: not a story of survival alone, but of renewal.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1owV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1owV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1owV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1owV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1owV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1owV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg&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;:1093809,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/201469626?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1owV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1owV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1owV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1owV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6aca099-1339-472c-956c-e4b72e522df0_1920x1281.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>I will be Continuing the search for new archetypes in new landscapes in the future</strong></p><div><hr></div><p>What began as an experiment has quietly become an ongoing creative pursuit. I now find myself actively searching for new characters and visual metaphors wherever I travel. They may emerge from different landscapes, different species, and different cultures, but the underlying idea remains the same: finding stories that exist somewhere between reality and imagination. More than anything, this project reminded me how much joy there is in playful exploration. I had an incredible amount of fun creating these images, and I look forward to discovering where the next character appears. You can follow my work <a href="https://www.instagram.com/jagadeeshrampam/">here</a> </p><div><hr></div><p></p>]]></content:encoded></item><item><title><![CDATA[Building a Second Brain]]></title><description><![CDATA[Why memory, context and accumulated knowledge may matter more than bigger models.]]></description><link>https://blog.phagyul.ai/p/building-a-second-brain</link><guid isPermaLink="false">https://blog.phagyul.ai/p/building-a-second-brain</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Sun, 07 Jun 2026 03:51:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JmrH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Over the years, I&#8217;ve accumulated thousands of notes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JmrH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JmrH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!JmrH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!JmrH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!JmrH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JmrH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_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;:1900925,&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://blog.phagyul.ai/i/200964585?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_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_!JmrH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!JmrH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!JmrH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!JmrH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7e86d4-2dfd-4b80-bc74-f997eb2a05da_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The challenge was never collecting information.</p><p>The challenge was remembering it, connecting it and turning it into something useful.</p><p>Modern AI is remarkably capable.</p><p>Yet most systems remain surprisingly forgetful.</p><p>Every conversation begins from scratch.</p><p>Every project requires context to be reintroduced.</p><p>Every insight risks being lost in another folder, notebook or document.</p><p>The more I worked across research, photography, software, storytelling and archival work, the more obvious the problem became:</p><p><strong>Knowledge was accumulating faster than understanding.</strong></p><p>Instead of building another assistant, I started exploring a different idea.</p><p>What would a genuine second brain look like?</p><p>Not a chatbot.</p><p>Not a search engine.</p><p>Not a note-taking application.</p><p>A system that could:</p><p><strong>Observe &#8594; Remember &#8594; Understand &#8594; Create &#8594; Preserve</strong></p><p>A system capable of connecting ideas across years rather than conversations.</p><p>A system that becomes more valuable as its memory grows.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0729728d-6b46-4c80-9cbf-808dec6605ae&quot;,&quot;caption&quot;:&quot;Source: How Well Do Large Language Models Truly Ground?&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Grounding Is Not a Prompt&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-07T02:21:22.979Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!HHAz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f120e84-49db-45ec-a506-edf56f9c4e73_1536x970.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/grounding-is-not-a-prompt&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:187075330,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>From Information to Understanding</h2><p>Most AI systems operate on prompts.</p><p>A second brain should operate on context.</p><p>Every note should strengthen understanding.</p><p>Every project should enrich memory.</p><p>Every experiment should improve future decisions.</p><p>The objective is not simply to retrieve information.</p><p>The objective is to build accumulated intelligence.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;46b420b4-892c-4a6e-bda7-aacc59164cc1&quot;,&quot;caption&quot;:&quot;Most teams deploy AI as a single endpoint.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Intelligent Model Orchestration for AI Agent Systems&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-12T06:05:38.014Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!X5Qv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb19fe57-9a3a-4370-bf3d-334da29e3c91_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/intelligent-model-orchestration-for&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:187683979,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>The Emergence of Smriti</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iABO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d92d9b-829d-4905-bb20-7d985a5df33f_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iABO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d92d9b-829d-4905-bb20-7d985a5df33f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!iABO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d92d9b-829d-4905-bb20-7d985a5df33f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!iABO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d92d9b-829d-4905-bb20-7d985a5df33f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!iABO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d92d9b-829d-4905-bb20-7d985a5df33f_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iABO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d92d9b-829d-4905-bb20-7d985a5df33f_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55d92d9b-829d-4905-bb20-7d985a5df33f_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;:1466499,&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://blog.phagyul.ai/i/200964585?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d92d9b-829d-4905-bb20-7d985a5df33f_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_!iABO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d92d9b-829d-4905-bb20-7d985a5df33f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!iABO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d92d9b-829d-4905-bb20-7d985a5df33f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!iABO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d92d9b-829d-4905-bb20-7d985a5df33f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!iABO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d92d9b-829d-4905-bb20-7d985a5df33f_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This thinking eventually evolved into a concept I now call:</p><p><strong>Parjanya&#8217;s Second Brain</strong></p><p>At its core sits <strong>Smriti</strong>.</p><p>Smriti is not simply another product.</p><p>It is the memory and intelligence layer that connects everything else.</p><p>A system designed to preserve context, connect knowledge and build long-term understanding.</p><p>Around this core are four complementary domains:</p><h3>Parjanya</h3><p>Visual Intelligence</p><p>Image quality assessment, visual understanding, benchmarking and insight generation.</p><h3>WilderhoodTV</h3><p>Creative Intelligence</p><p>Storytelling, production workflows, media creation and distribution.</p><h3>Smriti</h3><p>Rooted Intelligence</p><p>Memory, context, reflection and accumulated knowledge.</p><h3>Prakriti</h3><p>Archival Intelligence</p><p>Documenting and preserving wildlife, nature, heritage and field knowledge.</p><p>Together they form a connected intelligence ecosystem rather than a collection of independent products.</p><div><hr></div><h2>Why Context Matters</h2><p>The AI industry is understandably focused on models.</p><p>Bigger models.</p><p>Smarter models.</p><p>Faster models.</p><p>But I increasingly believe the next frontier may be something else.</p><p><strong>Context.</strong></p><p>Models will continue to improve.</p><p>What remains unique is the context we accumulate.</p><p>Our notes.</p><p>Our observations.</p><p>Our projects.</p><p>Our experiences.</p><p>Our decisions.</p><p>Our understanding of the world.</p><p>Without context, intelligence becomes generic.</p><p>With context, intelligence becomes personal.</p><div><hr></div><h2>Looking Ahead</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LiwH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LiwH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!LiwH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!LiwH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!LiwH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LiwH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1596533,&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://blog.phagyul.ai/i/200964585?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.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_!LiwH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!LiwH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!LiwH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!LiwH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58623d1c-e36b-4606-b1c6-4e80e9ce9229_1024x1536.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is still an evolving idea.</p><p>The architecture will change.</p><p>The tools will change.</p><p>The models will change.</p><p>What remains constant is the underlying belief:</p><p><strong>Knowledge should not disappear. It should compound.</strong></p><p>The goal is not to automate thought.</p><p>The goal is to augment it.</p><p>To build a system that helps transform information into understanding, understanding into wisdom and wisdom into meaningful work.</p><div><hr></div><h3>Guiding Principle</h3><p><strong>Observe &#8594; Remember &#8594; Understand &#8594; Create &#8594; Preserve.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8eky!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33ab7cb3-aee2-4839-af72-32d47e792ea4_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8eky!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33ab7cb3-aee2-4839-af72-32d47e792ea4_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!8eky!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33ab7cb3-aee2-4839-af72-32d47e792ea4_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!8eky!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33ab7cb3-aee2-4839-af72-32d47e792ea4_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!8eky!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33ab7cb3-aee2-4839-af72-32d47e792ea4_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8eky!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33ab7cb3-aee2-4839-af72-32d47e792ea4_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/33ab7cb3-aee2-4839-af72-32d47e792ea4_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;:1332917,&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://blog.phagyul.ai/i/200964585?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33ab7cb3-aee2-4839-af72-32d47e792ea4_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_!8eky!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33ab7cb3-aee2-4839-af72-32d47e792ea4_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!8eky!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33ab7cb3-aee2-4839-af72-32d47e792ea4_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!8eky!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33ab7cb3-aee2-4839-af72-32d47e792ea4_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!8eky!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33ab7cb3-aee2-4839-af72-32d47e792ea4_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div>]]></content:encoded></item><item><title><![CDATA[Valuing an Indian Octopus: Info Edge Through Damodaran’s Lens]]></title><description><![CDATA[Two engines. One balance sheet. A sum-of-the-parts valuation.]]></description><link>https://blog.phagyul.ai/p/valuing-an-indian-octopus-info-edge</link><guid isPermaLink="false">https://blog.phagyul.ai/p/valuing-an-indian-octopus-info-edge</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Fri, 05 Jun 2026 03:20:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YTxS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="pullquote"><p style="text-align: center;"><em><strong>DISCLAIMER: This article is part of my personal learning journey and is meant purely for educational and informational purposes. I have drawn insights from Prof. Aswath Damodaran&#8217;s publicly available teachings and financial information available in the public domain.</strong></em></p><p style="text-align: center;"><em><strong>While preparing this write-up, I referred to platforms such as Screener and AI-based study tools to better understand the concepts and validate publicly available data such as company filings and information available for investors from the company domain. The interpretations and conclusions shared here are entirely my own, and any errors or misunderstandings are solely my responsibility.</strong></em></p><p style="text-align: center;"><em><strong>This is not investment advice or a recommendation to buy, sell, or hold any securities. I encourage readers to do their own research and consult a SEBI-registered investment advisor before making any investment decisions.</strong></em></p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YTxS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YTxS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!YTxS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!YTxS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!YTxS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YTxS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c2f4773-364b-41d3-bff0-d5e495f6faed_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;:1486727,&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://blog.phagyul.ai/i/200706956?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_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_!YTxS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!YTxS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!YTxS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!YTxS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c2f4773-364b-41d3-bff0-d5e495f6faed_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><h2>Key Takeaways</h2><ul><li><p>Info Edge is best understood as two businesses under one roof: a dominant internet classifieds franchise and a highly successful venture investment engine.</p></li><li><p>Traditional valuation multiples can be misleading because a significant portion of the company&#8217;s value comes from listed and unlisted investments.</p></li><li><p>A sum-of-the-parts framework, inspired by Aswath Damodaran&#8217;s valuation approach, is the most appropriate way to analyze the company.</p></li><li><p>The core operating business appears to be a high-quality, cash-generative franchise with strong margins and durable competitive advantages.</p></li><li><p>At current prices, the stock appears to be trading around fair value rather than at a significant discount.</p></li><li><p>Future returns will likely depend on both the continued strength of the Naukri ecosystem and the success of the next generation of startup investments.</p></li></ul><div><hr></div><p>When I look at Info Edge, I do not see a normal listed company. I see two businesses stitched together: a dominant, cash-generating internet classifieds franchise led by Naukri, and a venture-style investment engine that has produced extraordinary value through stakes such as Eternal and PB Fintech.</p><p><strong>That is exactly why I think Info Edge is one of the best Indian case studies for applying Professor Aswath Damodaran's framework. Damodaran has repeatedly argued that cash, cross-holdings, and other non-operating assets should be valued separately from the operating business. In his discussions on holding companies and cross-holdings, he notes that the "sum of the parts" can often be greater than the whole when these assets are not properly accounted for. For a company like Info Edge, where listed and unlisted investments contribute materially to shareholder value, a sum-of-the-parts approach is not optional&#8212;it is essential.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></strong></p><p>In Info Edge&#8217;s case, that distinction is not academic. As of June 2026, the company itself had a market capitalization of roughly &#8377;65,000 crore, while a substantial part of its value sat in listed investments and a startup portfolio that management valued at nearly &#8377;37,000 crore.</p><blockquote><p><strong>So the right question is not, &#8220;Is Naukri expensive on earnings?&#8221;</strong></p></blockquote><p>The right question is:</p><blockquote><p><strong>How much am I paying for the core franchise after adjusting for Eternal, PB Fintech, and the next cohort of private investments?</strong></p></blockquote><div><hr></div><h2>Why Info Edge Is a Perfect case study for understanding Prof. Damodaran&#8217;s lens</h2><p>Damodaran&#8217;s valuation philosophy begins with a story and then forces the numbers to be consistent with that story.</p><p>My story for Info Edge is simple.</p><p>The first engine is a high-quality operating business with a durable moat in recruitment classifieds, strong operating leverage, and real free-cash-flow discipline.</p><p>The second engine is a capital allocator with a demonstrated ability to identify, back, and hold asymmetric winners for long periods.</p><p>That combination makes Info Edge unusual.</p><p>Many companies are either operating businesses or investment vehicles.</p><p><strong>Info Edge is both.</strong></p><blockquote><p>Naukri remains the core cash machine, but the market&#8217;s view of the company is also shaped by what happened with Zomato&#8212;now Eternal&#8212;and with Policybazaar through PB Fintech.</p></blockquote><p>This also explains why plain P/E ratios can mislead. Reported earnings often include large amounts of investment-related income and mark-to-market effects, creating accounting noise that distorts headline valuation multiples.</p><div><hr></div><h2>The Operating Story I Am Telling Myself</h2><p>When I strip away the investment book, I am left with a business that is significantly better than a typical Indian internet company.</p><p>FY25 standalone revenue was approximately &#8377;2,654 crore, operating profit was around &#8377;973 crore, and the starting EBIT margin in my model was roughly 36.7%.</p><p>That is not what a fragile, capital-hungry internet business looks like.</p><p>It looks like a platform business with real pricing power and low incremental capital intensity.</p><p>Info Edge&#8217;s own disclosures increasingly describe Naukri as evolving from a traditional job-search platform into a broader talent ecosystem. That matters because deeper workflow relevance typically strengthens both customer stickiness and monetization potential.</p><p>The cash-flow quality is equally important.</p><p>Free-cash-flow conversion remains strong, and cash generation has consistently supported both internal reinvestment and external venture investments.</p><p>That cash discipline sits at the center of my thesis.</p><p>In a Damodaran framework, earnings are only useful if they can be converted into cash and distributed or reinvested intelligently.</p><p>Info Edge passes that test far better than many businesses trading on technology narratives.</p><div><hr></div><h2>The Second Engine: Capital Allocation</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4SYu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234b5880-a671-48a7-9aa2-3f81038eea1d_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4SYu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234b5880-a671-48a7-9aa2-3f81038eea1d_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!4SYu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234b5880-a671-48a7-9aa2-3f81038eea1d_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!4SYu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234b5880-a671-48a7-9aa2-3f81038eea1d_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!4SYu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234b5880-a671-48a7-9aa2-3f81038eea1d_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4SYu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234b5880-a671-48a7-9aa2-3f81038eea1d_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/234b5880-a671-48a7-9aa2-3f81038eea1d_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;:1728259,&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://blog.phagyul.ai/i/200706956?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234b5880-a671-48a7-9aa2-3f81038eea1d_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_!4SYu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234b5880-a671-48a7-9aa2-3f81038eea1d_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!4SYu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234b5880-a671-48a7-9aa2-3f81038eea1d_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!4SYu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234b5880-a671-48a7-9aa2-3f81038eea1d_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!4SYu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234b5880-a671-48a7-9aa2-3f81038eea1d_1536x1024.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><p>The other half of the story is where Info Edge becomes truly distinctive.</p><p>Management disclosed that total invested capital across its startup platform stood at roughly &#8377;4,000 crore, while the fair market value of those investments approached &#8377;37,000 crore.</p><p>Those are extraordinary numbers.</p><p>More importantly, they fundamentally change how I think about the balance sheet.</p><p>This is not idle treasury cash.</p><p>This is a portfolio that has already produced two listed winners and still carries meaningful optionality from the rest of the investment book.</p><p>The listed winners are the easiest to value.</p><p>Using June 2026 market values, Info Edge&#8217;s stakes in Eternal and PB Fintech together were worth approximately &#8377;39,500 crore.</p><p>That single number explains why this company must be valued in pieces.</p><p>If the market capitalization is roughly &#8377;65,000 crore and the two listed holdings alone are worth nearly &#8377;40,000 crore, then the market is implicitly assigning the remaining value to the core operating franchises plus the unlisted portfolio.</p><div><hr></div><h2>How I Split the Business</h2><p>Damodaran&#8217;s treatment of cash and cross-holdings provides the right starting point.</p><p>First, value the parent company&#8217;s operating assets.</p><p>Second, value the holdings separately.</p><p>Third, decide whether those holdings deserve to be added at full value or at a discount because of taxes, opacity, or governance considerations.</p><p>For Info Edge, I split the company into three buckets:</p><ul><li><p>The core operating business: Naukri, 99acres, Jeevansathi, Shiksha, and other controlled operating assets.</p></li><li><p>The listed investment book: Eternal and PB Fintech.</p></li><li><p>The private portfolio: the broader startup portfolio, valued through probability-weighted assumptions and appropriate haircuts.</p></li></ul><p>Once I do that, the valuation becomes much clearer.</p><p>I no longer have to force one multiple to explain two fundamentally different economic engines.</p><div><hr></div><h2>My Core-Business DCF</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Noi3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce65570-e5fa-42fc-8931-5213c48f06f3_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Noi3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce65570-e5fa-42fc-8931-5213c48f06f3_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Noi3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce65570-e5fa-42fc-8931-5213c48f06f3_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Noi3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce65570-e5fa-42fc-8931-5213c48f06f3_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Noi3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce65570-e5fa-42fc-8931-5213c48f06f3_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Noi3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce65570-e5fa-42fc-8931-5213c48f06f3_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ce65570-e5fa-42fc-8931-5213c48f06f3_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;:1290281,&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://blog.phagyul.ai/i/200706956?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce65570-e5fa-42fc-8931-5213c48f06f3_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_!Noi3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce65570-e5fa-42fc-8931-5213c48f06f3_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Noi3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce65570-e5fa-42fc-8931-5213c48f06f3_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Noi3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce65570-e5fa-42fc-8931-5213c48f06f3_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Noi3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce65570-e5fa-42fc-8931-5213c48f06f3_1536x1024.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><p>I built three versions of the core-business valuation.</p><p>The first was a conventional FCFF model.</p><p>The second was a stricter Damodaran-style build with a higher cost of capital and explicit return-on-capital fade.</p><p>The third was an owner-earnings model that treats Info Edge more like a high-ROIC platform business with low maintenance reinvestment requirements.</p><p>The conventional FCFF model produced an intrinsic value range of:</p><p>&#8377;805.83 to &#8377;1,173.05 based on Bear to Bull scenario</p><p>The stricter Damodaran build produced:</p><p>&#8377;624.07-&#8377;675.71-&#8377;722.74(Bear-Base-Bull)</p><p>The owner-earnings model produced:</p><p>Bear&#8377;856.76, Base&#8377;978.00, Bull&#8377;1,150.75</p><p>I do not treat any one of these as the truth.</p><p>I treat them as a range generated by different but intellectually honest stories about the business.</p><p><strong>That is very much in the spirit of Damodaran: valuation is a disciplined conversation between narrative and numbers, not a hunt for a fake precision point estimate.</strong></p><div><hr></div><h2>What the Three Models Are Really Saying</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!avW1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!avW1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!avW1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!avW1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!avW1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!avW1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1290071,&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://blog.phagyul.ai/i/200706956?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.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_!avW1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!avW1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!avW1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!avW1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26450a9e-e5a6-424d-9d5f-df0966ec01b5_1024x1536.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><p>Taken together, these models say something simple.</p><p>Info Edge is not obviously cheap.</p><p>But it is also not wildly expensive if I believe the core operating franchise deserves a premium for moat, cash conversion, and capital allocation quality.</p><p>The overlap zone between my more realistic base cases falls roughly between &#8377;950 and &#8377;1,000 per share.</p><p>That sits remarkably close to where the market currently values the stock.</p><p>My conclusion is not that the stock is a bargain.</p><p>My conclusion is that the stock is trading around intrinsic value, with modest upside or downside depending on how optimistic I choose to be about the operating business and how much of the private investment book I am willing to recognize.</p><div><hr></div><h2>Why the Private Portfolio Cannot Be Ignored</h2><p>A lot of investors stop after marking Eternal and PB Fintech.</p><p>I think that is incomplete.</p><p>It is easy to value listed stakes and pretend the rest of the startup book is noise.</p><p>Management&#8217;s disclosures suggest otherwise.</p><p>At the same time, I do not want to value the private portfolio lazily.</p><p>For early-stage companies, the right framework resembles venture-capital valuation rather than traditional DCF analysis.</p><p>Estimate a plausible exit value.</p><p>Assign a probability of success.</p><p>Adjust for dilution.</p><p>Discount back at a sufficiently high required return.</p><p>That is why, in my own sum-of-the-parts framework, I do not add the startup portfolio at full value by default.</p><p>I use scenario-based weights and meaningful haircuts rather than assuming every fair-value mark will eventually translate into realized gains.</p><div><hr></div><h2>Promoter Skin, Moat, and Cash Discipline</h2><p>My three favourite lenses for evaluating businesses are:</p><ol><li><p>Moat</p></li><li><p>Promoter skin in the game</p></li><li><p>Free-cash-flow discipline</p></li></ol><p>Info Edge scores well on all three.</p><p>Promoter ownership remains meaningful at approximately 37.5%, with founder Sanjeev Bikhchandani individually holding about 24% of the company. This level of ownership creates strong alignment between management and minority shareholders, particularly in a business where long-term capital allocation is a major driver of value creation.</p><p>When founders continue to own a meaningful portion of the business after decades of operation, I generally have greater confidence that capital allocation decisions are being made with a long-term mindset.</p><p>On moat, the easiest evidence is visible in the economics of the core business.</p><p>A business generating EBIT margins north of 35%, producing strong free cash flow, and maintaining leadership in a category for years is rarely doing so by accident.</p><p>Those economics are often downstream manifestations of:</p><ul><li><p>Brand strength</p></li><li><p>Network effects</p></li><li><p>Embedded workflows</p></li><li><p>Customer inertia</p></li><li><p>Rational competition</p></li></ul><p>Naukri benefits from several of these simultaneously.</p><p>Employers want access to the largest candidate pool.</p><p>Candidates want access to the largest number of recruiters.</p><p>That creates a reinforcing flywheel that becomes increasingly difficult for competitors to replicate.</p><p>On cash-flow discipline, the story becomes even stronger.</p><p>The company has remained largely debt free while continuing to:</p><ul><li><p>Fund organic growth</p></li><li><p>Invest in adjacent businesses</p></li><li><p>Build a venture portfolio</p></li><li><p>Maintain balance-sheet flexibility</p></li></ul><p>That combination is surprisingly rare.</p><p>Many firms with venture portfolios lack a strong operating engine.</p><p>Many cash-generative firms struggle to identify high-return external investments.</p><p>Info Edge has demonstrated an ability to do both.</p><div><hr></div><h2>The Buy-Below Levels I Would Use</h2><p>Because the stock appears to be trading around fair value, I think price discipline matters more than enthusiasm.</p><p>Valuation should influence position sizing.</p><p>Quality tells me <em>what</em> to buy.</p><p>Valuation tells me <em>when</em> to buy.</p><p>My framework currently looks like this:</p><p>ZoneInterpretationBelow &#8377;850Strong Buy&#8377;850&#8211;&#8377;930Buy&#8377;930&#8211;&#8377;1,030Hold / WatchAbove &#8377;1,100Avoid aggressive additions</p><h3>Below &#8377;850</h3><p>At these levels, even relatively conservative valuation frameworks begin to show a meaningful margin of safety.</p><p>The investment case becomes less dependent on perfect execution and more dependent on simply avoiding major mistakes.</p><p>That is usually where I prefer to deploy capital.</p><h3>&#8377;850&#8211;&#8377;930</h3><p>The valuation starts tilting in my favor while still allowing room for execution risk.</p><p>The core franchise remains attractive and the optionality from investments is available at a more reasonable price.</p><h3>&#8377;930&#8211;&#8377;1,030</h3><p>This is approximately fair-value territory.</p><p>At these levels I would be comfortable holding existing positions but would not feel a strong urge to increase exposure.</p><h3>Above &#8377;1,100</h3><p>At these valuations, I would need a substantially more optimistic view regarding:</p><ul><li><p>Core business growth</p></li><li><p>Margin expansion</p></li><li><p>The next generation of startup winners</p></li><li><p>Long-term value creation from the investment portfolio</p></li></ul><p>Without that conviction, future returns become increasingly dependent on continued multiple expansion rather than fundamental value creation.</p><div><hr></div><h2>What Could Break My Thesis</h2><p>No valuation is complete without understanding what can go wrong.</p><p>There are four developments that would make me materially less constructive on Info Edge.</p><h3>1. Naukri Loses Pricing Power</h3><p>Naukri remains the economic anchor of the entire group.</p><p>If recruiters begin reducing spend, switching platforms, or finding better alternatives, the valuation of the entire business changes.</p><p>The investment portfolio may be exciting, but the operating franchise pays the bills.</p><p>A weakening recruitment moat would force me to revisit almost every assumption in my model.</p><h3>2. Adjacent Businesses Fail to Improve Economics</h3><p>The long-term narrative depends on businesses such as 99acres and other operating segments continuing to improve efficiency and monetization.</p><p>If these businesses fail to progress toward stronger economics, some of the optionality embedded in my valuation disappears.</p><p>The result would be lower growth assumptions and reduced confidence in margin expansion.</p><h3>3. Capital Allocation Discipline Deteriorates</h3><p>One of the biggest strengths of Info Edge has been its investment discipline.</p><p>Successful startup investors often face a dangerous temptation after early wins.</p><p>Past success can encourage larger bets, weaker underwriting standards, or excessive optimism.</p><p>If management begins prioritizing valuation marks over governance and business quality, I would immediately apply a larger discount to the investment portfolio.</p><p>The track record has earned credibility.</p><p>But credibility must continually be re-earned.</p><h3>4. A Prolonged Decline in Eternal or PB Fintech</h3><p>The market currently recognizes Info Edge not only as an operating company but also as a successful allocator of capital.</p><p>If Eternal and PB Fintech experience significant and prolonged declines, investors may stop assigning value to that allocator identity.</p><p>In that scenario, the market could increasingly focus only on the operating business while assigning lower value to the investment portfolio.</p><p>That would compress valuation multiples even if the underlying businesses remain fundamentally sound.</p><div><hr></div><h2>The Bigger Lesson</h2><p>One reason I enjoy studying Info Edge is that it demonstrates how valuation is often more about structure than forecasting.</p><p>Most investors spend their time debating whether revenue growth will be 12% or 15%.</p><p>In many situations, that is not where the real insight lies.</p><p>The real insight is understanding what exactly you are valuing.</p><p>Info Edge forces that discipline.</p><p>You cannot treat it as a simple internet stock.</p><p>You cannot treat it as a venture capital fund.</p><p>You cannot treat it as a holding company.</p><p>It is all three at the same time.</p><p>And that complexity creates both confusion and opportunity.</p><p>This is precisely the type of situation where Damodaran&#8217;s framework shines.</p><p>Separate the pieces.</p><p>Value each piece independently.</p><p>Then bring them back together.</p><p>Simple in principle.</p><p>Difficult in practice.</p><div><hr></div><h2>My Final Verdict</h2><p>When I put everything together, I keep arriving at the same conclusion.</p><p>Info Edge is a high-quality business with:</p><ul><li><p>A genuine moat</p></li><li><p>Meaningful promoter alignment</p></li><li><p>Strong free-cash-flow generation</p></li><li><p>Exceptional capital-allocation history</p></li><li><p>Significant optionality through its startup portfolio</p></li></ul><p>Those are characteristics I actively seek in long-term compounders.</p><p>However, quality alone does not make something cheap.</p><p>At roughly &#8377;1,010 per share, I believe the market already recognizes much of what makes Info Edge special.</p><blockquote><p>The Naukri franchise is appreciated.</p><p>The Eternal success story is appreciated.</p><p>The PB Fintech investment is appreciated.</p></blockquote><p><strong>A significant portion of the optionality is already reflected in the price.</strong></p><p>That leaves me with a conclusion that may sound less exciting but is probably more useful:</p><p><strong>Info Edge is not a deep-value opportunity today.</strong></p><p><strong>It is a high-quality business trading around intrinsic value.</strong></p><blockquote><p>Would I own it?</p></blockquote><p>Yes.</p><blockquote><p>Would I chase it aggressively?</p></blockquote><p>Probably not.</p><blockquote><p>Would I become significantly more interested if the market offered it closer to &#8377;850&#8211;&#8377;900?</p></blockquote><p>Absolutely.</p><p>If I were forced to summarize my view in a single sentence, it would be this:</p><blockquote><p><strong>Info Edge is one of the clearest examples in India of how Aswath Damodaran&#8217;s framework helps separate a great operating business from a great capital allocator living inside the same stock.</strong></p></blockquote><p>And that is precisely what makes it such a fascinating company to study.</p><div><hr></div><h3>Disclosure</h3><p>This article is intended solely for educational and research purposes and should not be construed as investment advice. The valuation frameworks, assumptions, and conclusions presented here reflect my personal analysis and may prove incorrect. Investors should conduct their own due diligence and consider their risk tolerance before making any investment decisions.</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><a href="https://aswathdamodaran.blogspot.com/2013/06/a-tangled-web-of-values-enterprise.html">https://aswathdamodaran.blogspot.com/2013/06/a-tangled-web-of-values-enterprise.html</a></p><div id="youtube2-R5vaEkbXgDs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;R5vaEkbXgDs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/R5vaEkbXgDs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1><strong>DISCLAIMER</strong></h1><blockquote><blockquote><p>The content published in this post is intended <strong>solely for educational and informational purposes</strong>. I am <strong>not registered with SEBI</strong> as an investment advisor, research analyst, broker, or financial influencer, and nothing in this post should be construed as investment advice, stock recommendations, or solicitation to buy, sell, or hold any securities.</p></blockquote><blockquote><p>This analysis is part of my <strong>personal learning journey in finance and valuation</strong>, heavily influenced by academic frameworks and publicly available material from <strong>Aswath Damodaran</strong>, particularly his work on <strong>Cash, crossholdings, and others.</strong><br><br>The post reflects my own interpretation and application of these concepts as a finance student and practitioner, and any errors or assumptions are entirely my own.</p></blockquote><blockquote><p>The valuation models, assumptions, scenarios, and conclusions presented here are <strong>illustrative learning exercises</strong>, not predictions. They do not account for individual financial circumstances, risk tolerance, tax considerations, or investment objectives.</p></blockquote><blockquote><p>Readers are strongly encouraged to perform <strong>independent due diligence</strong> and/or consult a <strong>SEBI-registered financial professional</strong> before making any investment decisions. I shall not be responsible for any financial losses or outcomes resulting from reliance on this content.</p></blockquote></blockquote><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[Traditional Japan (Monochrome)]]></title><description><![CDATA[When I first arrived in Hokkaido, I was captivated by colour.]]></description><link>https://blog.phagyul.ai/p/traditional-japan-monochrome</link><guid isPermaLink="false">https://blog.phagyul.ai/p/traditional-japan-monochrome</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Mon, 01 Jun 2026 05:22:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GRC8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first arrived in Hokkaido, I was captivated by colour.</p><p>The crimson crowns of cranes against fresh snow. The blue hues of winter mornings. The warm glow of sunrise spilling across frozen landscapes.</p><p>Naturally, those scenes became the foundation of C1 &#8212; <em>Vibrant Hokkaido</em>.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;319cdc4e-6162-4579-a7c5-4869eafc3965&quot;,&quot;caption&quot;:&quot;Several months before travelling to Hokkaido, I found myself doing something I had not originally planned.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Vibrant Hokkaido&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Phagyul AI Systems Pvt Ltd&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69779d00-e8d0-4783-8d18-6eefd0dd0a36_82x82.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-31T02:39:22.000Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!yFHV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.phagyul.ai/p/vibrant-hokkaido&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:199934487,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7361555,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>But as the journey unfolded, I found myself increasingly drawn to something else.</p><p>Not colour.</p><p>Time.</p><p>The more I travelled through Hokkaido, the more I felt that many of its landscapes, traditions, and wildlife existed outside the rhythm of the modern world. A crane standing motionless in the snow, a sea eagle gliding across a winter valley, steam rising through an outdoor onsen&#8212;these scenes felt as though they could belong to today, fifty years ago, or perhaps even longer.</p><p>That feeling became the inspiration for C2.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GRC8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GRC8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!GRC8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!GRC8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!GRC8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GRC8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b628b9cc-1106-44b7-a65b-be5d13591569_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;:2603084,&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://blog.phagyul.ai/i/200075615?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_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_!GRC8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!GRC8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!GRC8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!GRC8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb628b9cc-1106-44b7-a65b-be5d13591569_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Why Monochrome?</h2><p>For me, monochrome was never about removing colour.</p><p>It was about removing time.</p><p>Colour often anchors a photograph to a specific moment. We recognise the palette of a season, the look of a particular era, or the visual characteristics of modern life.</p><p>Monochrome strips away those references.</p><p>What remains are the essential elements of a photograph:</p><ul><li><p>Light</p></li><li><p>Form</p></li><li><p>Texture</p></li><li><p>Atmosphere</p></li><li><p>Emotion</p></li></ul><p>More importantly, it allows a scene to feel timeless.</p><p>In Hokkaido, monochrome became the most natural way to express what I was experiencing. The enduring elegance of Japanese culture, the quiet beauty of winter landscapes, and the sense that many traditions continue largely unchanged despite the rapid pace of the world around them.</p><p>Rather than documenting Japan as it appeared before me, I wanted to create images that felt suspended between past and present.</p><div><hr></div><h2>Building C2</h2><p>The objective was not to create dramatic black-and-white photographs.</p><p>Instead, I wanted to create images that felt calm, restrained, and enduring.</p><p>The settings were designed to emphasize tonal separation rather than contrast alone. Snow remained soft and luminous. Shadows retained detail. Blacks provided structure without overwhelming the frame.</p><p>The result was a visual language inspired less by spectacle and more by permanence.</p><p>A crane became a silhouette against endless snow.</p><p>An eagle became a dark brushstroke against mountain ridges.</p><p>Steam transformed a crowded onsen into something almost dreamlike.</p><p>The photographs began to feel less like records of a journey and more like fragments of memory.</p><div><hr></div><h2>What I Found</h2><p>The most unexpected outcome was how much attention shifted from the subject to the feeling of the scene.</p><p>Without colour competing for attention, subtle details became more important:</p><p>The curve of a crane&#8217;s neck.</p><p>The delicate footprints pressed into fresh snow.</p><p>The layers of mist drifting through an onsen.</p><p>The patterns of winter forests beneath a soaring eagle.</p><p>Many photographs became simpler, yet somehow more evocative.</p><p>The absence of colour encouraged me to focus on what initially drew me to the frame rather than what made it visually striking.</p><div><hr></div><h2>The Images</h2><p>The red-crowned cranes became symbols of grace rather than colour.</p><p>Against the snow, they appeared almost sculptural&#8212;reduced to elegant lines, shapes, and movement.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IloJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IloJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IloJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IloJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IloJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IloJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg" width="1281" height="1920" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1920,&quot;width&quot;:1281,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:158529,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/200075615?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IloJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IloJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IloJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IloJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3e1b52-f26a-48c8-93b5-ba8c1668ad97_1281x1920.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The sea eagle soaring across Hokkaido&#8217;s mountains felt timeless, its silhouette echoing the rugged landscape beneath it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Ate!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Ate!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-Ate!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-Ate!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-Ate!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Ate!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg&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;:711627,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/200075615?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-Ate!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-Ate!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-Ate!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-Ate!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384411bd-d294-4ece-baa0-c64a76408e0e_1920x1281.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The onsen scene revealed a different side of Japan. Visitors gathered quietly in rising steam while nature enveloped the entire experience, blurring the distinction between people and place.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JIyH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JIyH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JIyH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JIyH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JIyH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JIyH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg" width="1281" height="1920" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1920,&quot;width&quot;:1281,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:416314,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/200075615?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JIyH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JIyH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JIyH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JIyH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d7f60c3-03f6-4aa9-b7d8-631c9587ee34_1281x1920.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Even moments of intentional blur and abstraction began to feel more meaningful in monochrome, emphasizing atmosphere over description.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V7M6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49782b78-6f32-44dd-90cc-a1980b9f1874_1920x1016.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V7M6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49782b78-6f32-44dd-90cc-a1980b9f1874_1920x1016.jpeg 424w, https://substackcdn.com/image/fetch/$s_!V7M6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49782b78-6f32-44dd-90cc-a1980b9f1874_1920x1016.jpeg 848w, https://substackcdn.com/image/fetch/$s_!V7M6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49782b78-6f32-44dd-90cc-a1980b9f1874_1920x1016.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!V7M6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49782b78-6f32-44dd-90cc-a1980b9f1874_1920x1016.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V7M6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49782b78-6f32-44dd-90cc-a1980b9f1874_1920x1016.jpeg" width="1920" height="1016" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49782b78-6f32-44dd-90cc-a1980b9f1874_1920x1016.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1016,&quot;width&quot;:1920,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:45630,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/200075615?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab7f6809-ed11-4501-9062-78c5667c7b5f_1920x1280.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!V7M6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49782b78-6f32-44dd-90cc-a1980b9f1874_1920x1016.jpeg 424w, https://substackcdn.com/image/fetch/$s_!V7M6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49782b78-6f32-44dd-90cc-a1980b9f1874_1920x1016.jpeg 848w, https://substackcdn.com/image/fetch/$s_!V7M6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49782b78-6f32-44dd-90cc-a1980b9f1874_1920x1016.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!V7M6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49782b78-6f32-44dd-90cc-a1980b9f1874_1920x1016.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Each image seemed less concerned with documenting what was there and more interested in conveying what it felt like to stand there.</p><div><hr></div><h2>What C2 Taught Me</h2><p>Photography often encourages us to capture moments.</p><p>Monochrome encouraged me to capture permanence.</p><p>It reminded me that some places possess a character that transcends a single season, a single journey, or even a single generation.</p><p>Hokkaido&#8217;s wildlife, landscapes, and traditions carry that quality.</p><p>By removing colour, I wasn&#8217;t simplifying the story.</p><p>I was revealing the part of it that felt enduring.</p><div><hr></div><p><strong>C2 &#8212; Traditional Japan (Monochrome)</strong> is my attempt to explore the timeless side of Hokkaido&#8212;a visual journey through landscapes, wildlife, and traditions that feel as relevant today as they might have decades ago, expressed through a monochrome palette that celebrates simplicity, atmosphere, and the enduring beauty of Japan.</p>]]></content:encoded></item><item><title><![CDATA[Vibrant Hokkaido]]></title><description><![CDATA[Several months before travelling to Hokkaido, I found myself doing something I had not originally planned.]]></description><link>https://blog.phagyul.ai/p/vibrant-hokkaido</link><guid isPermaLink="false">https://blog.phagyul.ai/p/vibrant-hokkaido</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Sun, 31 May 2026 02:39:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yFHV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Several months before travelling to Hokkaido, I found myself doing something I had not originally planned.</p><p>I wasn&#8217;t researching locations.</p><p>I wasn&#8217;t building shot lists.</p><p>I wasn&#8217;t even looking at wildlife photography.</p><p>Instead, I was revisiting old Japanese films and spending far too much time pausing anime scenes.</p><p>As someone who grew up watching anime, I had always been fascinated by how Japanese artists treated landscapes. Snow felt different. Forests felt different. Even ordinary roads seemed to carry a sense of atmosphere that was difficult to describe but immediately recognizable.</p><p>The colours were often richer than reality, yet never felt artificial.</p><p>The landscapes felt vibrant, but never loud.</p><p>Somewhere between memory and observation, a distinct visual language emerged.</p><p>Without realizing it, I had already started naming it in my head.</p><p><strong>Vibrant Hokkaido.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yFHV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yFHV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!yFHV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!yFHV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!yFHV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yFHV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0427a49-7fc7-4368-a6d1-4513021ddccf_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;:2722916,&quot;alt&quot;:&quot;&quot;,&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://blog.phagyul.ai/i/199934487?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!yFHV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!yFHV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!yFHV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!yFHV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0427a49-7fc7-4368-a6d1-4513021ddccf_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At the time, I thought it was a colour problem.</p><p>By the end of the trip, I realized it was a luminance problem.</p><p>And that distinction changed everything.</p><h2>Designing Hokkaido Before Seeing Hokkaido</h2><p>Long before boarding a flight to Japan, I started building two custom shooting profiles on my Canon EOS R5 Mark II.</p><p>The first became <strong>C1: Vibrant Hokkaido</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lu7J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0d2304-c8f7-41dc-9e98-d240ba503364_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lu7J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0d2304-c8f7-41dc-9e98-d240ba503364_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Lu7J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0d2304-c8f7-41dc-9e98-d240ba503364_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Lu7J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0d2304-c8f7-41dc-9e98-d240ba503364_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Lu7J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0d2304-c8f7-41dc-9e98-d240ba503364_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lu7J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0d2304-c8f7-41dc-9e98-d240ba503364_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb0d2304-c8f7-41dc-9e98-d240ba503364_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;:2031280,&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://blog.phagyul.ai/i/199934487?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0d2304-c8f7-41dc-9e98-d240ba503364_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_!Lu7J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0d2304-c8f7-41dc-9e98-d240ba503364_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Lu7J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0d2304-c8f7-41dc-9e98-d240ba503364_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Lu7J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0d2304-c8f7-41dc-9e98-d240ba503364_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Lu7J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0d2304-c8f7-41dc-9e98-d240ba503364_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The second became <strong>C2: Traditional Japan</strong>.</p><p>The intention behind C1 was relatively straightforward. I wanted a profile that embraced the visual qualities I associated with modern Japanese landscape art and anime backgrounds&#8212;strong colour separation, rich blues, warm wildlife subjects and an overall sense of atmosphere.</p><p>The foundation was Canon&#8217;s Landscape Picture Style, but pushed further through additional contrast, saturation and colour tuning.</p><div class="pullquote"><p>The goal wasn&#8217;t realism.</p><p><strong>The goal was emotional realism.</strong></p></div><p>I wasn&#8217;t trying to reproduce exactly what I saw.</p><p>I was trying to reproduce what Hokkaido felt like in my imagination after years of consuming Japanese visual culture.</p><p>C2 was built for a completely different reason and deserves its own article, but in short, it was inspired by older Japanese cinema, monochrome photography and traditional aesthetics where form, shape and negative space matter more than colour.</p><p>At the time, both profiles felt complete.</p><p>I thought I had already solved the problem.</p><p>Hokkaido had other plans.</p><h2>The Surprise Waiting in the Snow</h2><p>One of the assumptions I carried into the trip was that colour would be the defining characteristic of the landscape.</p><p>After all, C1 was built around colour.</p><p>Yet once I started photographing winter scenes, I noticed something unexpected.</p><p>The strongest images weren&#8217;t necessarily the most colourful ones.</p><p>In fact, many of them contained remarkably little colour.</p><p>The fox crossing an icy road became one of those moments.</p><p>Initially, what attracted me to the scene was obvious.</p><p>A warm-toned fox against a cold blue landscape.</p><p>Classic colour contrast.</p><p>The kind of scene that fits perfectly within the original idea of Vibrant Hokkaido.</p><p>But as I reviewed the images later, I found myself paying less attention to the fox and more attention to the snow.</p><p>The snow wasn&#8217;t acting as background.</p><p>It was acting as structure.</p><p>The wind patterns across the frozen surface were creating visual pathways.</p><p>The lighter areas pulled the eye forward.</p><p>The darker areas acted as leading lines.</p><p>The fox wasn&#8217;t creating the composition.</p><p>The snow already had.</p><p>The fox was simply completing it.</p><p>That realization became one of the most important lessons of the trip.</p><h2>Snow Isn&#8217;t White</h2><p>Photographers often talk about exposing snow correctly.</p><p>What I discovered in Hokkaido was slightly different.</p><p>The challenge wasn&#8217;t exposure.</p><p>The challenge was preserving luminance relationships.</p><p>When we think about snow, we instinctively think about whiteness.</p><p>But Hokkaido snow rarely appears truly white.</p><p>It contains subtle blues.</p><p>Grey tones.</p><p>Cyan shifts.</p><p>Tiny variations that create depth and dimension.</p><p>Push everything toward pure white and the landscape becomes flatter.</p><p>Neutralize the colour too aggressively and winter loses its atmosphere.</p><p>The more I photographed, the more I realized that the visual identity of Hokkaido wasn&#8217;t being created by colour alone.</p><p>It was being created by the way snow carries light.</p><p>That became the foundation of what I eventually started calling <strong>Snow Luminance Control</strong>.</p><p>Not as a formal technique.</p><p>Not as a preset.</p><p>Simply as a way of seeing.</p><p>The objective became preserving those tonal transitions so that the snow itself could guide the viewer through the frame.</p><p>The fox remained important.</p><p>But the snow became the protagonist.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AwyP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AwyP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AwyP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AwyP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AwyP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AwyP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/abb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg&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;:1613127,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/199934487?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AwyP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AwyP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AwyP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AwyP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabb68a72-1201-4e6f-ab18-ddea3c86791f_1920x1281.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The Lightroom Problem</h2><p>Ironically, the next lesson arrived after I returned from the field.</p><p>Opening the RAW files inside Lightroom was a shock.</p><p>The images didn&#8217;t look anything like what I had seen on the back of the camera.</p><p>The carefully tuned colours from C1 seemed to disappear.</p><p>The atmosphere felt different.</p><p>The tonal relationships felt different.</p><p>For a while, I assumed the profile simply wasn&#8217;t working as intended.</p><p>That confusion continued until a conversation with Rahul Sachdev.</p><p>Rahul, a Canon Ambassador and someone whose field experience I deeply respect, pointed me toward something surprisingly simple.</p><p><strong>Match Camera.</strong></p><p>Once Lightroom and Photoshop were instructed to honour the in-camera rendering through Canon&#8217;s camera-matching profiles, the images immediately started resembling what I had designed and seen in the field.</p><p>It was one of those moments that seems obvious in hindsight.</p><p>I had spent months creating a visual language inside the camera, only to discover that my software workflow was quietly replacing it.</p><p>That lesson alone probably saved me countless hours of unnecessary editing.</p><div><hr></div><h2>The Limitations of Custom Modes</h2><p>As useful as the C1 and C2 workflow became, the trip also exposed some practical limitations.</p><p>One of the biggest frustrations involved crop settings.</p><p>Certain shooting configurations&#8212;particularly 1.6x crop workflows that proved useful for wildlife&#8212;did not always behave the way I expected once stored inside the custom modes.</p><p>Moving between C1, C2 and C3 often required additional verification to ensure the camera was actually operating the way I intended.</p><p>It wasn&#8217;t a deal-breaker.</p><p>But it was a reminder that custom modes are powerful shortcuts rather than perfect state-management systems.</p><p>The creative intent remains consistent.</p><p>The technical details still need supervision.</p><h2>Looking Back</h2><p>What started as an attempt to recreate a visual style inspired by anime eventually became something far more interesting.</p><p>I arrived in Hokkaido thinking about colour.</p><p>I left thinking about luminance.</p><p>The preset I designed before the trip survived.</p><p>But the reasoning behind it evolved.</p><p>Vibrant Hokkaido was never really about making colours stronger.</p><p>It was about allowing winter to remain expressive.</p><p>About preserving the subtle pathways hidden inside snow.</p><p>About understanding that a landscape can lead the eye long before a wildlife subject enters the frame.</p><p>The fox helped me recognize that.</p><p>The snow taught me why.</p><p>In the next post, I&#8217;ll explore the other half of this experiment&#8212;<strong>C2: Traditional Japan</strong>&#8212;a profile inspired not by modern anime aesthetics, but by older Japanese cinema, monochrome photography and the idea that sometimes removing colour reveals more than adding it ever could.</p>]]></content:encoded></item><item><title><![CDATA[Silence in Three Movements]]></title><description><![CDATA[I headed to Hokkaido, Japan, in February 2026 with two visual themes already shaping the journey in my mind: Vibrant Hokkaido and Traditional Japan. (post upcomingon Traditional Japan)]]></description><link>https://blog.phagyul.ai/p/silence-in-three-movements</link><guid isPermaLink="false">https://blog.phagyul.ai/p/silence-in-three-movements</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Fri, 29 May 2026 05:29:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vDQY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I headed to Hokkaido, Japan, in February 2026 with two visual themes already shaping the journey in my mind: <em>Vibrant Hokkaido</em> and <em>Traditional Japan</em>. (post upcomingon Traditional Japan)</p><p>I was drawn to the contrast between Hokkaido&#8217;s vivid winter character &#8212; cranes, foxes, snowfields, isolated color, landscapes &#8212; and the quieter monochromatic side of Japan that emerges through mist, overcast skies, bare forests, and restrained tonal palettes.</p><p>What I did not anticipate was discovering an entirely different visual phenomenon altogether: what I now think of as <em>layered winter landscapes</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vDQY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vDQY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.png 424w, https://substackcdn.com/image/fetch/$s_!vDQY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.png 848w, https://substackcdn.com/image/fetch/$s_!vDQY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!vDQY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vDQY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.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;:2652741,&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://blog.phagyul.ai/i/199695112?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.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_!vDQY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.png 424w, https://substackcdn.com/image/fetch/$s_!vDQY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.png 848w, https://substackcdn.com/image/fetch/$s_!vDQY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!vDQY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950ff4b1-5138-4652-91d6-e864e88bdf34_1535x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Somewhere during the trip, while photographing frozen wetlands and distant forests through a telephoto lens, I began noticing that the landscape no longer behaved as a single continuous scene. Instead, it appeared to separate itself into distinct visual planes &#8212; snowfields, reed belts, dense trunks, atmospheric canopy &#8212; each carrying its own tonal identity.</p><p>The effect was subtle in reality but became remarkably pronounced through the viewfinder.</p><p>That discovery was unexpected.</p><p>I had travelled searching for color and monochrome as emotional themes, but Hokkaido quietly revealed a third visual language to me &#8212; one built not around color, but around compression, atmosphere, tonal separation, and layered perception.</p><p>The more time I spent with these scenes, the more they began feeling less like traditional wildlife photographs and more like studies in visual structure.</p><div class="pullquote"><p>The snowfields simplified the foreground into negative space.<br>The narrow reed belts became transitional bands of muted color.<br>The forests compressed into repeating vertical rhythm.<br>The distant canopy dissolved softly into atmosphere.</p></div><p>What fascinated me most was that this separation only became obvious through the camera itself.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X_Tl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X_Tl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!X_Tl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!X_Tl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!X_Tl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X_Tl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg" width="1281" height="1920" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1920,&quot;width&quot;:1281,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:926077,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/199695112?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X_Tl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!X_Tl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!X_Tl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!X_Tl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b9a43e9-b6e6-430f-98bf-613a3d006261_1281x1920.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Standing in the landscape, I did not experience the scene as strongly layered in this way. But once framed through a long lens, the environment transformed. The world flattened, distance compressed, and the landscape started behaving almost like a composed arrangement rather than a naturally receding space.</p><p>It was as though the camera was not only recording the landscape &#8212; but reorganizing it.</p><div><hr></div><h2>Understanding the Layers</h2><p>The more I photographed these scenes, the more I realized that several visual ideas were quietly working together inside the frame.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cu2X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cu2X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!cu2X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!cu2X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!cu2X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cu2X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg" width="1281" height="1920" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1920,&quot;width&quot;:1281,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:727885,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/199695112?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cu2X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!cu2X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!cu2X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!cu2X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f34e748-718d-4cfd-9fef-459cc15bb4c9_1281x1920.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Telephoto compression</strong> was one of them. Long focal lengths visually compress distance, making separate parts of the landscape appear stacked closer together. Instead of feeling deep and continuous, the world begins separating into flatter layers.</p><p>There was also an element of <strong>Gestalt perception</strong> at play. Human vision naturally groups similar tones, textures, and patterns together. Snowfields, reed belts, forests, and mist each become their own visual regions, which is why a single photograph can sometimes feel like multiple images stacked together.</p><p>And finally, there is <strong>visual rhythm</strong> &#8212; the repetition of trunks, rocks, reeds, and negative space across the frame. Winter simplifies the landscape enough for these repeating forms to become more noticeable, almost musical in their spacing and flow.</p><p>Individually, these ideas are subtle. But together, they create the layered winter landscapes I unexpectedly found myself drawn toward in Hokkaido.</p><div><hr></div><h2>Searching for a Visual Parallel</h2><p>Interestingly, none of this was intentional.</p><p>I did not travel to Hokkaido inspired by any particular art movement or visual tradition. The connection appeared only later, after returning from the trip and trying to understand why these images felt so visually separated and structured.</p><p>That curiosity eventually led me toward ukiyo-e.</p><p>While researching whether similar spatial phenomena had existed in historical art, I found myself repeatedly drawn to Japanese landscape prints &#8212; particularly the quieter atmospheric works of Utagawa Hiroshige.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U14M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U14M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!U14M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!U14M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!U14M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U14M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2685635,&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://blog.phagyul.ai/i/199695112?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.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_!U14M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!U14M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!U14M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!U14M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129a9a22-e1a8-472b-9bb2-358c558d554f_1774x887.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>What resonated was not necessarily the subject matter, but the way space behaved within those images.</p><p>Many ukiyo-e landscapes organize the frame through layers and intervals rather than strong linear depth. Snow, water, mist, forests, and sky often exist as separate visual regions while still remaining part of a unified composition. The eye drifts across the scene rather than moving directly into it.</p><p>That sensation felt remarkably close to what I had been experiencing through the viewfinder in Hokkaido.</p><p>The similarity was especially striking in winter-oriented prints where forests compress into texture, snow becomes open negative space, and atmosphere quietly separates one plane from another.</p><p>What fascinated me was that photography and ukiyo-e arrive at this layered perception through entirely different means.</p><p>Ukiyo-e achieved it through artistic interpretation and compositional stylization.</p><p>The photographs achieve it through:</p><ul><li><p>optical compression,</p></li><li><p>atmospheric flattening,</p></li><li><p>tonal simplification,</p></li><li><p>and perceptual grouping.</p></li></ul><p>The overlap, therefore, is not imitation.</p><p>It is convergence.</p><p>Different mediums.<br>Different centuries.<br>Yet arriving at a strangely similar way of organizing space.</p><p>That realization changed how I began thinking about these images. I stopped seeing them purely as wildlife or winter photographs and started viewing them as studies in perception &#8212; moments where optics quietly transform reality into layered abstraction.</p><div><hr></div><h2>Winter as an Abstraction Engine</h2><p>I suspect winter may be uniquely suited for this kind of visual experience.</p><p>Snow removes clutter.</p><blockquote><p>Color palettes collapse into restraint.<br>Foreground distractions disappear.<br>Shadows soften beneath overcast skies.<br>The world simplifies itself into line, tone, rhythm, and silence.</p></blockquote><p>Under those conditions, landscapes stop behaving purely as physical environments and begin functioning almost like visual structures.</p><p>The camera intensifies this transformation further.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pG-p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pG-p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pG-p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pG-p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pG-p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pG-p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg&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;:1100472,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/199695112?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pG-p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pG-p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pG-p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pG-p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48cebb95-2eaa-45ed-ab4a-99fba71d8458_1920x1281.jpeg 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The moment the frame edges isolate the scene, the eye stops navigating physical space and instead begins reading intervals:<br>foreground,<br>transition,<br>structure,<br>atmosphere.</p><p>That was the most unexpected lesson Hokkaido offered me.</p><p>I arrived searching for vibrant winter and monochrome quietness.<br>I left discovering layered perception.</p><div><hr></div><h2>Looking Ahead</h2><p>What began as a winter wildlife trip has quietly reshaped how I now look at landscapes.</p><p>I am increasingly interested in searching for places where this phenomenon might emerge again &#8212; environments where atmosphere, distance, weather, and optics work together to create layered spatial separation.</p><p>Not necessarily dramatic landscapes.<br>Not necessarily famous locations.</p><p>Just places where the world simplifies enough for its internal structure to reveal itself.</p><div class="pullquote"><p><strong>Hokkaido happened to offer those conditions naturally:</strong><br>snow, mist, telephoto distance, muted tonality, and silence.</p><p>But I suspect this visual language exists elsewhere too, waiting quietly in landscapes that reward slower observation.</p></div><p>Perhaps that is what photography continues to teach me most:<br>sometimes the camera does not merely document a place.</p><p>Sometimes it changes the way we perceive space itself.</p>]]></content:encoded></item><item><title><![CDATA[The ARM Wheel Problem: What's Actually Standing Between You and Graviton's 34% Cost Savings ]]></title><description><![CDATA[AWS will tell you Graviton Lambda delivers up to 34% better price-performance over x86.]]></description><link>https://blog.phagyul.ai/p/the-arm-wheel-problem-whats-actually</link><guid isPermaLink="false">https://blog.phagyul.ai/p/the-arm-wheel-problem-whats-actually</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Wed, 27 May 2026 05:12:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PPpf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AWS will tell you Graviton Lambda delivers up to <strong>34% better price-performance</strong> over x86. That number is not wrong. But it also is not the number that matters when you are trying to migrate a real system.</p><p>The number that matters is this one: <strong>how many of your Lambda functions can actually run on ARM64 today</strong> &#8212; not in theory, not on a clean greenfield stack, but with your actual dependencies, your actual Python version, and your actual C extensions.</p><p>For Parjanya, an ML-powered image quality pipeline, the answer started at 1 out of 4. That gap &#8212; between what Graviton promises and what your stack allows &#8212; is almost entirely explained by a single, under appreciated concept: the <strong>ARM wheel</strong>.</p><p>This article explains what ARM wheels are, why they are the gatekeeper to Graviton savings, how the Parjanya re-architecture navigated them, and how to build a framework for evaluating Graviton readiness in any product.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PPpf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PPpf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!PPpf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!PPpf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!PPpf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PPpf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1342571,&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://blog.phagyul.ai/i/199420348?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.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_!PPpf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!PPpf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!PPpf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!PPpf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ec36df4-b62e-4000-a45e-a906ab92a62c_1774x887.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>First, an Honest Framing of the 34% Number</h2><p>AWS&#8217;s stated price-performance advantage for Graviton Lambda comes from two compounding factors:</p><p><strong>Pricing</strong>: ARM64 Lambda is priced approximately <strong>20% lower</strong> per GB-second than equivalent x86 Lambda. This is a direct line-item discount.</p><p><strong>Performance</strong>: For SIMD-heavy workloads &#8212; image processing, compression, media encoding &#8212; ARM NEON instruction sets often complete work faster than x86 AVX-512 for the same memory allocation, which effectively reduces billed duration.</p><p>In Parjanya&#8217;s $10 POC (running PIL-based image processing against Graviton4 and Intel x86), the empirical result was a <strong>24% cost delta</strong> &#8212; Intel x86 cost 24% more for identical or worse performance. AWS&#8217;s 34% claim holds at the higher end because it accounts for the full price-performance package including EC2 and container workloads.</p><p>The savings are real. The caveat is that they only materialise if your software stack is compatible.</p><div class="pullquote"><p><strong>And this is almost entirely an AWS-specific story.</strong> Other cloud providers have ARM compute (Azure&#8217;s Ampere A1, GCP&#8217;s Tau T2A), but the degree of ecosystem investment &#8212; SDK support, Lambda ARM64 availability, Graviton-specific tuning, managed service integration &#8212; is significantly deeper on AWS. If you are evaluating Graviton for cost optimisation, that analysis does not port cleanly to other clouds without re-running the entire readiness assessment from scratch.</p></div><h2>What Is an ARM Wheel?</h2><p>Before evaluating Graviton readiness, you need to understand what a Python wheel is and why the ARM variant specifically matters.</p><p>A <strong>wheel</strong> (<code>.whl</code>) is a pre-built binary distribution of a Python package. When you run <code>pip install numpy</code>, pip looks for a wheel that matches your platform. If it finds one, it downloads and installs it directly &#8212; no compilation required. If it does not, pip falls back to downloading source code and compiling it locally.</p><p>For pure Python packages, this distinction is irrelevant. The bytecode runs anywhere.</p><p>For packages with native C/C++ extensions &#8212; NumPy, Pillow, OpenCV, PyTorch, SciPy, and most of the ML ecosystem &#8212; a wheel is architecture-specific. A wheel built for <code>x86_64</code> will not install on <code>aarch64</code>. The package must publish a separate wheel for ARM64.</p><p>The naming convention tells you exactly what architecture a wheel targets:</p><pre><code>numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl   # x86
numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl  # ARM64</code></pre><p>The <code>aarch64</code> suffix is what you are looking for. If it exists, installation is clean. If it does not, you are in source-build territory &#8212; and source builds in Lambda container images introduce a layer of complexity that breaks most &#8220;just change the architecture flag&#8221; migration plans.</p><h3>The Four States of a Dependency</h3><p>When evaluating a Python service for ARM64 migration, every dependency falls into one of four categories:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lsKp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc4146e-39da-4be6-badd-4be1992127e9_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lsKp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc4146e-39da-4be6-badd-4be1992127e9_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!lsKp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc4146e-39da-4be6-badd-4be1992127e9_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!lsKp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc4146e-39da-4be6-badd-4be1992127e9_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!lsKp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc4146e-39da-4be6-badd-4be1992127e9_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lsKp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc4146e-39da-4be6-badd-4be1992127e9_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9bc4146e-39da-4be6-badd-4be1992127e9_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;:1400983,&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://blog.phagyul.ai/i/199420348?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc4146e-39da-4be6-badd-4be1992127e9_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_!lsKp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc4146e-39da-4be6-badd-4be1992127e9_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!lsKp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc4146e-39da-4be6-badd-4be1992127e9_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!lsKp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc4146e-39da-4be6-badd-4be1992127e9_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!lsKp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc4146e-39da-4be6-badd-4be1992127e9_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This matrix is the actual output of a Graviton readiness assessment. Not a benchmark. Not a cost model. The wheel matrix.</p><div><hr></div><h2>The Parjanya Case Study: From 1/4 to 3/4</h2><p>Parjanya&#8217;s pipeline had four compute stages, each containerised and isolated. When the first Graviton migration attempt was made, only one &#8212; the deduplication stage &#8212; made it onto ARM64. The other three were blocked.</p><p>Here is what happened at each stage:</p><h3>Stage 1: RAW Processing (Blocked &#8594; Eventually Bypassed)</h3><p>Camera RAW files require binary parsing to extract embedded JPEGs. The dependency chain pulled in native image parsers without clean <code>aarch64</code> wheels. Compilation from source failed or produced unstable binaries in the Lambda container environment.</p><p><strong>Resolution</strong>: The stage architecture changed. Rather than fight a fragile native dependency chain, the pipeline design shifted to extract JPEG previews at ingest &#8212; earlier in the flow &#8212; reducing the surface area where native RAW parsing was required.</p><h3>Stage 2: CLIP-IQA Scoring (Blocked &#8594; Replaced)</h3><p><strong>CLIP-IQA</strong> was being used for visual quality scoring. It had two problems:</p><ol><li><p><strong>Wheel problem</strong>: The ARM64 wheel chain for its dependencies was incomplete. Installing it in a Graviton Lambda container was unreliable.</p></li><li><p><strong>Model problem</strong>: CLIP-IQA was trained on stock photos, not professional RAW captures. It accepted only ~1% of professional images, making it useless for the actual curation use case.</p></li></ol><blockquote><p><strong>Resolution: </strong><em>The entire stage was replaced with a rule-based technical validator &#8212; exposure clipping detection, blur scoring, sharpness scoring, and perceptual hashing. No ML forward pass. No compiled extensions in the hot path. The new validator ran in pure Python, deployed cleanly on ARM64, and executed in under 100ms per image.</em></p></blockquote><p>This is the single most important insight from the Parjanya migration:</p><blockquote><p><strong>The fastest path to ARM64 is sometimes not to migrate the workload. It is to replace the workload.</strong></p></blockquote><p>The new <code>parjanya-technical_validator</code> runs on <code>arm64</code> with Python 3.12 and 512 MB memory. It is not a compromise &#8212; it is measurably better: faster, cheaper, more correct, and production-verified.</p><h3>Stage 3: GPU Inference (Intentional Hard Boundary)</h3><p>The VLM inference stage runs <code>Qwen3-VL-8B-Instruct</code> and requires CUDA. CUDA is the hard architectural boundary.</p><p>CUDA is NVIDIA&#8217;s parallel computing platform. It runs on NVIDIA GPUs, which are paired with x86_64 hosts in most production setups including AWS g5 instances. There is no ARM64 CUDA story in Lambda.</p><p><strong>Resolution</strong>: The GPU inference stage was <strong>not</strong> migrated. Instead, the control plane was separated from execution:</p><ul><li><p>A lightweight Lambda &#8212; ARM64 &#8212; handles scheduling logic: when to scale the GPU fleet, when to drain it</p></li><li><p>The actual VLM inference runs on EC2 g5 instances in an Auto Scaling Group</p></li><li><p>The Lambda no longer needs ML libraries, so it migrated to Graviton without any dependency issues</p></li></ul><p>This is architectural isolation &#8212; moving the ARM64-compatible logic (scheduling, orchestration) onto Graviton and leaving the ARM64-incompatible logic (GPU inference) exactly where it belongs.</p><h3>Stage 4: Deduplication (Original Success)</h3><p>Small, CPU-bound, dependency-light. Perceptual hashing with no native C extensions in the hot path. This was the function that migrated cleanly from day one, and it remains the model for what &#8220;Graviton-ready&#8221; looks like: pure logic, minimal native dependencies, well-supported Python ecosystem.</p><h3>The Current State</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RVAv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b92b44-d06a-4a1a-8f60-a12892b3c4fb_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RVAv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b92b44-d06a-4a1a-8f60-a12892b3c4fb_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!RVAv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b92b44-d06a-4a1a-8f60-a12892b3c4fb_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!RVAv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b92b44-d06a-4a1a-8f60-a12892b3c4fb_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!RVAv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b92b44-d06a-4a1a-8f60-a12892b3c4fb_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RVAv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b92b44-d06a-4a1a-8f60-a12892b3c4fb_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82b92b44-d06a-4a1a-8f60-a12892b3c4fb_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;:1268097,&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://blog.phagyul.ai/i/199420348?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b92b44-d06a-4a1a-8f60-a12892b3c4fb_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_!RVAv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b92b44-d06a-4a1a-8f60-a12892b3c4fb_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!RVAv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b92b44-d06a-4a1a-8f60-a12892b3c4fb_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!RVAv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b92b44-d06a-4a1a-8f60-a12892b3c4fb_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!RVAv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82b92b44-d06a-4a1a-8f60-a12892b3c4fb_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Three of four Lambda functions on Graviton (+1 scheduler). The remaining x86 workload is the one that genuinely belongs there.</p><div><hr></div><h2>Why ARM Wheels Fail: The Root Causes</h2><p>Understanding why a package lacks an ARM64 wheel helps you predict and resolve failures faster.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tAxd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tAxd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!tAxd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!tAxd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!tAxd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tAxd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1108106,&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://blog.phagyul.ai/i/199420348?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.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_!tAxd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!tAxd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!tAxd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!tAxd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026f3ec8-c1ad-46be-ac11-db38ad8c53af_1672x941.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>1. The package maintainer hasn&#8217;t built it yet</h3><p>Many packages added <code>aarch64</code> wheel support in 2022&#8211;2024 as AWS Graviton gained adoption. Packages that haven&#8217;t been updated since then may still not publish ARM64 wheels. This is solvable by checking the current release on PyPI &#8212; support often appears in later versions.</p><h3>2. GLIBC version mismatch</h3><p>Lambda&#8217;s ARM64 runtime uses Amazon Linux 2023. A wheel built against an older GLIBC version (<code>manylinux2014</code>) may not install cleanly in that environment. When you see installation errors that reference GLIBC, this is the cause. The fix is to build your container image from the correct ARM64 base image and verify wheel compatibility inside it &#8212; not on your development machine.</p><h3>3. Transitive dependencies break the chain</h3><p>Even if the top-level package publishes an ARM64 wheel, its transitive dependencies may not. OpenCV is a canonical example: <code>opencv-python</code> may install, but a transitive dependency on a specific image codec library may not have an ARM64 wheel. The failure surface is the entire dependency tree, not just the packages you explicitly listed.</p><h3>4. ABI incompatibility</h3><p>Some packages have version-specific ABI contracts. A package pinned to an older version may have published an x86_64 wheel for that version but not an ARM64 one. When you pin for stability and the pinned version predates ARM64 support, you are stuck &#8212; until you unpin.</p><h3>5. Build-time assumptions in C extensions</h3><p>Some C extensions were written with x86 assumptions baked into SIMD code paths, memory alignment behaviour, or endianness handling. These may compile on ARM64 but behave incorrectly at runtime. This is rare but dangerous &#8212; it is the category where correctness testing matters most.</p><div><hr></div><h2>A Practical Evaluation Framework for Any Product</h2><p>The following process translates the Parjanya experience into a repeatable assessment for any Lambda-based system.</p><h3>Phase 1: Dependency Audit (Before Touching Infrastructure)</h3><p>For every Lambda or containerised service, generate the full dependency tree including transitive dependencies:</p><pre><code>pip install pipdeptree
pipdeptree --warn silence</code></pre><p>Then, for every package with a native C extension (you can identify these by checking if the installed package contains <code>.so</code> files):</p><pre><code>find /path/to/site-packages -name "*.so" | sort</code></pre><p>Classify each package against the four-state matrix above. The output is your wheel matrix &#8212; one row per native dependency, one column per state.</p><h3>Phase 2: Build Environment Test (Before Assuming Local Results)</h3><p>Do not test ARM64 compatibility on your development machine. Build inside an ARM64 environment:</p><pre><code># Docker on an Apple Silicon Mac or a Graviton EC2 instance
docker build --platform linux/arm64 -f Dockerfile.arm64 .</code></pre><p>The Lambda execution environment is Amazon Linux 2023 on <code>aarch64</code>. Your build environment should match this exactly. A dependency that installs cleanly in a generic ARM64 Docker image may still fail in the Lambda runtime &#8212; validate inside the correct base image.</p><h3>Phase 3: Runtime Validation (Beyond Installation)</h3><p>Successful installation is not the same as correct runtime behaviour. For packages that made it through the build:</p><ul><li><p>Run your actual workload, not a smoke test</p></li><li><p>Measure latency and memory usage under ARM64 &#8212; they may differ from x86 even when the package installs cleanly</p></li><li><p>For any package in the &#8220;source build required&#8221; category, verify that the compiled binary links against the correct system libraries at runtime</p></li></ul><h3>Phase 4: The Three-Question Decision Gate</h3><p>For each service in your stack, answer these three questions:</p><ol><li><p><strong>Does every native dependency have an ARM64 wheel for my Python version and target runtime?</strong></p><ul><li><p>If yes: proceed to migration</p></li><li><p>If no: go to question 2</p></li></ul></li><li><p><strong>Can I build from source reliably in CI, in the correct ARM64 environment, with the correct GLIBC version?</strong></p><ul><li><p>If yes: proceed with source-build path; add a CI gate that fails if compilation regresses</p></li><li><p>If no: go to question 3</p></li></ul></li><li><p><strong>Can I replace the dependency or the entire stage with something ARM64-compatible?</strong></p><ul><li><p>If yes: replace it &#8212; this is often the better outcome anyway</p></li><li><p>If no: this stage stays on x86; isolate it intentionally rather than blocking the rest of the migration</p></li></ul></li></ol><p>This decision tree is what the Parjanya migration followed, even if it was not formalised until the second iteration.</p><h3>Phase 5: Architectural Boundary Declaration</h3><p>For every stage that cannot move to ARM64, declare the boundary explicitly in your architecture documentation:</p><ul><li><p>What is the technical reason it stays on x86 (CUDA dependency, missing wheel, untested behaviour)?</p></li><li><p>What would need to change for it to become migratable?</p></li><li><p>Is the x86 stage fully isolated so that the ARM64 migration of other stages is not blocked by it?</p></li></ul><p>The goal is intentional architecture, not incomplete migration. A GPU inference stage that stays on x86 by design is not a failure. It is a correct architectural boundary.</p><div><hr></div><h2>What This Means for New Products: Building for ARM Portability</h2><p>If you are building a new product and want to default to Graviton for cost efficiency, the considerations are different from migration. The choices you make at the start of your architecture will determine how much of the system can run on ARM64.</p><h3>Choose dependency-light stages where possible</h3><p>The deduplication stage in Parjanya worked on Graviton from day one because it had minimal native dependencies. When designing a new service, ask whether a pure-Python or well-supported-wheel implementation can solve the problem before reaching for a heavier ML or native library.</p><h3>Treat CUDA as a hard architectural boundary from the start</h3><p>If a stage requires GPU inference, isolate it behind a clean interface from day one. The scheduling logic, the orchestration, the result handling &#8212; all of that can run on ARM64. Only the GPU execution itself needs x86. Design for that split explicitly rather than letting the GPU requirement contaminate surrounding stages.</p><h3>Version-pin with ARM64 wheel availability in mind</h3><p>When locking dependency versions for reproducibility, verify that your pinned versions ship <code>manylinux_aarch64</code> wheels. A version that was pinned for stability before the package added ARM64 support will block migration silently &#8212; you will not know until you try to build.</p><h3>Build in CI on ARM64 from day one</h3><p>Adding ARM64 build validation to your CI pipeline when you start a project costs almost nothing. Adding it after 18 months of x86-first development costs weeks of debugging. Many packages add and remove ARM64 wheel support across versions; having a CI gate that verifies ARM64 builds on every dependency update catches regressions immediately.</p><h3>Use the 20% Lambda pricing delta as a design signal</h3><p>AWS prices ARM64 Lambda at approximately 20% less than x86. That is not just an operational saving &#8212; it is a signal about where to route compute. If a function is trivially portable (pure Python, well-supported wheels), choosing x86 without evaluating ARM64 first is a deliberate decision to pay a 20% premium for no benefit.</p><div><hr></div><h2>The AWS-Specific Caveat</h2><p>Everything in this post is calibrated to AWS. The cost numbers, the Lambda architecture flag, the Graviton family of processors, the <code>manylinux_aarch64</code> wheel availability for AWS runtimes &#8212; these are AWS-specific.</p><p>Other cloud providers offer ARM compute. Azure has Ampere A1-based VMs. GCP has Tau T2A. But:</p><ul><li><p>Serverless ARM support (equivalent to Lambda arm64) is not uniformly available or mature across providers</p></li><li><p>The degree of AWS-specific optimisation in the Python scientific and ML ecosystem &#8212; particularly for Graviton NEON instructions &#8212; is not replicated elsewhere</p></li><li><p>Cost structures differ; the 20% pricing delta is an AWS Lambda figure and does not translate directly to other billing models</p></li></ul><p>If you are building a multi-cloud or cloud-agnostic system, treat Graviton optimisation as an AWS-specific tuning layer rather than a foundational architectural decision. The portability of your ARM64-compatible stages will transfer. The AWS-specific performance characteristics will not.</p><div><hr></div><h2>The Real Cost Model</h2><p>The standard framing of Graviton savings is &#8220;20% cheaper Lambda.&#8221; That is accurate but incomplete. The full savings model for an architecture like Parjanya&#8217;s has four components:</p><ol><li><p><strong>Lower per-invocation Lambda cost</strong> on ARM64 (~20% pricing delta, compounding with every invocation)</p></li><li><p><strong>Avoided NAT data-path spend</strong> &#8212; VPC gateway endpoints route S3 and DynamoDB traffic without NAT tax; this is infrastructure rather than ARM64, but it compounds with the migration</p></li><li><p><strong>Reduced ML over-processing</strong> &#8212; a rule-based pre-filter like <code>parjanya-technical_validator</code> rejects bad images before they reach the GPU queue; every rejected frame is a GPU invocation that never happens</p></li><li><p><strong>Lower operational overhead</strong> &#8212; fragile native builds create deployment failures, cold start issues, and CI complexity; removing them reduces engineering time</p></li></ol><p>For a high-volume pipeline, component 3 often dominates. The ARM64 savings from the validator are real. But the savings from not running expensive GPU inference on images that would have been rejected anyway are an order of magnitude larger.</p><p>This is the correct way to think about Graviton adoption: not as a compute cost reduction in isolation, but as an opportunity to reconsider stage design, dependency choices, and processing flow in ways that compound the savings.</p><div><hr></div><h2>Summary</h2><p>The ARM wheel is the gatekeeper to Graviton savings. Not the hardware, not AWS support, not your application code. The compiled binary distribution of your Python dependencies &#8212; and whether it exists for <code>aarch64</code> &#8212; is what determines whether a given Lambda function can run on Graviton.</p><p>The practical conclusions from Parjanya&#8217;s full migration arc:</p><ul><li><p><strong>Audit your wheel matrix before you plan your migration.</strong> The output tells you which functions migrate, which need source builds, and which need architectural changes.</p></li><li><p><strong>Build in an ARM64 environment that matches your Lambda runtime.</strong> Local results on x86 do not predict ARM64 install success.</p></li><li><p><strong>Replacement is often faster than migration.</strong> A fragile ML stage replaced by a dependency-light rule-based implementation solves the ARM64 problem, the reliability problem, and often the correctness problem simultaneously.</p></li><li><p><strong>Isolate x86 hard boundaries explicitly.</strong> CUDA is the cleanest example &#8212; design around it rather than pretending it is temporary.</p></li><li><p><strong>Partial adoption is architecture, not failure.</strong> Running 3 of 4 Lambda functions on Graviton with an intentional x86 boundary at the GPU stage is a correct outcome.</p></li></ul><p>Graviton adoption is not a hardware decision. The hardware is already ready. It is an ecosystem decision &#8212; and the ARM wheel matrix is where that decision lives.</p><div><hr></div><h2>Further Reading</h2><ul><li><p><a href="https://github.com/aws/aws-graviton-getting-started/blob/main/python.md">AWS Graviton Getting Started &#8211; Python</a> &#8212; The canonical reference for why Python version and GLIBC version matter for wheel compatibility</p></li><li><p><a href="https://aws.amazon.com/blogs/compute/migrating-aws-lambda-functions-to-arm-based-aws-graviton2-processors/">Migrating AWS Lambda functions to ARM-based Graviton2</a> &#8212; AWS&#8217;s official guide; read between the lines for what is assumed about dependency simplicity</p></li><li><p><a href="https://aws.github.io/graviton/">AWS Graviton Technical Guide</a> &#8212; Deep reference on runtime support and ecosystem maturity by language</p></li><li><p><a href="https://blog.phagyul.ai/p/why-we-could-only-use-aws-graviton">Why We Could Only Use AWS Graviton for 1 of Our 4 ML Lambdas</a> &#8212; First Parjanya post: the ecosystem reality check</p></li><li><p><a href="https://blog.phagyul.ai/p/from-14-to-34-re-architecting-an">From 1/4 to 3/4: Re-architecting an ML Pipeline for Graviton</a> &#8212; Second Parjanya post: the re-architecture and cost analysis</p></li><li><p><a href="https://blog.phagyul.ai/p/aws-graviton4-vs-intel-x86-from-10">AWS Graviton4 vs Intel x86: From $10 POC to Production Validation</a> &#8212; The original POC that established the cost and performance baseline</p></li></ul>]]></content:encoded></item><item><title><![CDATA[TBIE in Practice: Designing Resilient AI Pipelines That Recover, Reconcile, and Re-run]]></title><description><![CDATA[Abstract]]></description><link>https://blog.phagyul.ai/p/tbie-in-practice-designing-resilient</link><guid isPermaLink="false">https://blog.phagyul.ai/p/tbie-in-practice-designing-resilient</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Mon, 25 May 2026 05:36:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ok-g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.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_!ok-g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ok-g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png 424w, https://substackcdn.com/image/fetch/$s_!ok-g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png 848w, https://substackcdn.com/image/fetch/$s_!ok-g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png 1272w, https://substackcdn.com/image/fetch/$s_!ok-g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ok-g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png" width="1456" height="799" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:799,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1376345,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.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_!ok-g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png 424w, https://substackcdn.com/image/fetch/$s_!ok-g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png 848w, https://substackcdn.com/image/fetch/$s_!ok-g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png 1272w, https://substackcdn.com/image/fetch/$s_!ok-g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbe12bff-5e6a-4f47-92ca-1f9569ff933d_1692x929.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Abstract</h2><p>Resilient AI infrastructure is not defined only by model quality, throughput, or scaling efficiency. In production, the harder problem is <strong>reconciliation: keeping durable state, requested work, and actual execution aligned when workers fail, queues drift, storage paths change, policies evolve, and control planes become blind.</strong> Let me present TBIE, a practical operating model for distributed systems: <strong>Truth, Belief, Intent, and Execution</strong>. TBIE separates the authoritative record of what is true from the operational view of what seems to be happening, the replayable journal of work that should occur, and the stateless workers that realize side effects.</p><p>I have used Parjanya v2.0, an image ingestion and GPU-based visual scoring platform, as a detailed case study. Parjanya&#8217;s architecture spans immutable uploads, DynamoDB workflow state, SQS-based intent, event-driven replay, GPU autoscaling, browser-side uploads, policy regrading, and infrastructure drift. Across these layers, TBIE proved useful not as a slogan but as a diagnostic and design framework. It clarified why transient worker failure should not destroy replayable work, why pending state without corresponding intent is a reconciliation gap, why wrong-bucket routing can be deterministically wrong, why policy changes should be handled as controlled replay, and why control-plane blindness is more dangerous than isolated worker failure.</p><p>The central claim of this is that resilient AI platforms should be designed as reconciliation systems rather than one-way pipelines. A pipeline moves data forward. A reconciliation system continuously repairs the alignment between truth and work until intended outcomes are actually realized. That distinction changes how we design queues, retries, autoscaling, observability, IAM boundaries, tenant onboarding, model packaging, browser uploads, and recovery runbooks.</p><h2>1. Introduction</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZgMA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a31422-9968-48dd-b72d-ee0b3228e5b0_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZgMA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a31422-9968-48dd-b72d-ee0b3228e5b0_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ZgMA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a31422-9968-48dd-b72d-ee0b3228e5b0_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ZgMA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a31422-9968-48dd-b72d-ee0b3228e5b0_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ZgMA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a31422-9968-48dd-b72d-ee0b3228e5b0_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZgMA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a31422-9968-48dd-b72d-ee0b3228e5b0_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70a31422-9968-48dd-b72d-ee0b3228e5b0_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;:1412263,&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;:false,&quot;internalRedirect&quot;:&quot;https://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a31422-9968-48dd-b72d-ee0b3228e5b0_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_!ZgMA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a31422-9968-48dd-b72d-ee0b3228e5b0_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ZgMA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a31422-9968-48dd-b72d-ee0b3228e5b0_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ZgMA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a31422-9968-48dd-b72d-ee0b3228e5b0_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ZgMA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70a31422-9968-48dd-b72d-ee0b3228e5b0_1536x1024.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Modern AI systems are often described in terms of model choice, hardware selection, vector stores, and inference efficiency. Those concerns are important, but they are not usually what breaks production systems. In practice, systems fail because they lose work, duplicate work, misroute work, or misinterpret what is actually happening. A queue may look healthy while the underlying work has already vanished. A worker may crash without leaving a replayable record. A browser upload may fail after the backend has already committed a pending state. An autoscaling group may be configured correctly while the reconciliation control plane that should activate it is blind.</p><p>These failures are not unusual edge cases. They are the normal shape of distributed systems under stress. The question, then, is not whether a system will experience drift between state and execution, but whether the architecture is built to detect, explain, and repair that drift. TBIE was developed as a response to that question.</p><p>TBIE stands for Truth, Belief, Intent, and Execution. It is a practical decomposition of distributed systems that helps separate durable facts from operational signals, requested work from realized work, and recoverable failures from terminal ones. The model is especially useful in asynchronous AI pipelines, where storage, metadata, queues, workers, and control planes all operate independently and can fail independently.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DI0j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75e66e9-1015-4732-95e4-6352de5005e5_1717x916.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DI0j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75e66e9-1015-4732-95e4-6352de5005e5_1717x916.png 424w, https://substackcdn.com/image/fetch/$s_!DI0j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75e66e9-1015-4732-95e4-6352de5005e5_1717x916.png 848w, https://substackcdn.com/image/fetch/$s_!DI0j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75e66e9-1015-4732-95e4-6352de5005e5_1717x916.png 1272w, https://substackcdn.com/image/fetch/$s_!DI0j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75e66e9-1015-4732-95e4-6352de5005e5_1717x916.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DI0j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75e66e9-1015-4732-95e4-6352de5005e5_1717x916.png" width="1456" height="777" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f75e66e9-1015-4732-95e4-6352de5005e5_1717x916.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:777,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1531637,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75e66e9-1015-4732-95e4-6352de5005e5_1717x916.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_!DI0j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75e66e9-1015-4732-95e4-6352de5005e5_1717x916.png 424w, https://substackcdn.com/image/fetch/$s_!DI0j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75e66e9-1015-4732-95e4-6352de5005e5_1717x916.png 848w, https://substackcdn.com/image/fetch/$s_!DI0j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75e66e9-1015-4732-95e4-6352de5005e5_1717x916.png 1272w, https://substackcdn.com/image/fetch/$s_!DI0j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff75e66e9-1015-4732-95e4-6352de5005e5_1717x916.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Parjanya v2.0 is an ideal case study because it combines all of those surfaces in a single system. Images are uploaded to S3. Metadata is written to DynamoDB. GPU work is performed asynchronously through SQS. Lambda functions handle technical validation and replay orchestration. GPU workers consume intent, perform visual-language inference, and write enriched truth back to the database. Autoscaling responds to queue depth. Browser uploads interact with tenant-specific buckets and CORS policies. Policy changes require historical reprocessing. Infrastructure drift can occur in launch templates, AMIs, model packages, and endpoint configuration.</p><p>Let&#8217;s deep dive how TBIE behaves in practice.</p><h2>2. The TBIE Model</h2><p>TBIE divides a distributed system into four layers that must remain conceptually distinct.</p><h3>2.1 Truth</h3><p>Truth is the durable record of what is actually true. It should survive worker restarts, deploys, transient outages, and runtime drift. In Parjanya, Truth lives in immutable S3 objects, DynamoDB workflow rows, hashes, status fields, curation metadata, and derived state that has been durably committed. Truth answers questions such as: What object exists? What stage of the workflow is this image in? What has already been computed? What is the authoritative record of the tenant, batch, or image?</p><h3>2.2 Belief</h3><p>Belief is the operational view of reality. It is derived from Truth and current signals, but it may lag, be partial, or be noisy. In Parjanya, Belief includes queue depth, in-flight message counts, worker health, GPU availability, desired ASG capacity, scaling activity, and alarm state. Belief is what operators see first, but it must not be confused with source-of-record truth.</p><h3>2.3 Intent</h3><p>Intent is the durable record of work that has been requested. It is the journal of &#8220;please do this work.&#8221; In Parjanya, SQS messages represent Intent. Replay jobs, regrade jobs, and retry workflows are all forms of Intent. The critical property of Intent is replayability. If Intent can be lost too early, then transient failures become permanent failures and manual rescue becomes necessary.</p><h3>2.4 Execution</h3><p>Execution is the stateless work that turns Intent into side effects and updated Truth. In Parjanya, Execution includes Graviton Lambdas for EXIF extraction and technical validation, GPU workers for VLM inferencing and image quality analysis, replay jobs that reconstruct missing Intent, and autoscaling actions that wake the worker fleet when work appears. Execution is where work happens, but in a resilient system it must never be allowed to erase the record of what was supposed to happen.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oksd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oksd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!oksd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!oksd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!oksd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oksd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1272750,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.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_!oksd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!oksd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!oksd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!oksd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F692ac6c4-2bbd-4cf4-918c-231d79c3515a_1024x1536.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>3. Why Reconciliation Matters</h2><p>The key insight behind TBIE is that a distributed system is not healthy merely because its components are running. Health depends on reconciliation. A system can be superficially alive while still being functionally stuck. A database row may say <code>pending_vlm_enrichment</code> while no SQS message exists. A queue may be empty while worker work is still pending in truth. A control plane may be scheduled while unable to read the signals it needs to act.</p><p>Reconciliation is the process of bringing Truth, Intent, and Execution back into alignment. In the TBIE model, reconciliation is not a background nicety; it is the core operating principle. Systems should not rely on humans noticing a stale queue and manually fixing it. They should be able to repair the missing relationship between truth and work on their own.</p><p>This is why the distinction between a pipeline and a reconciliation system matters. A pipeline assumes a mostly linear progression from input to output. A reconciliation system assumes that progression can be interrupted, delayed, partially completed, or invalidated by failure. It therefore builds explicit mechanisms to recover the intended outcome rather than merely continue from the last known step.</p><h2>4. Event-Driven Reconciliation in Parjanya v2.0</h2><p>Parjanya initially used a scheduled polling model. A timer would wake the replay Lambda periodically, the Lambda would scan for pending work, and if appropriate it would emit SQS messages and trigger GPU autoscaling. This worked, but it introduced avoidable latency, wasted invocations, and operational ambiguity. The system could not react immediately when Truth changed, and operators had to reason about whether the queue was empty because the system had genuinely caught up or because the next poll had not yet occurred.</p><p>The move to DynamoDB Streams changed that architecture fundamentally. Now, when a workflow row reaches <code>pending_vlm_enrichment</code>, the stream emits an event immediately. An event source mapping filters for relevant writes, batches records briefly, and invokes the replay Lambda. The Lambda discovers missing or retriable work, emits Intent into SQS, and kicks the GPU ASG when necessary. This turns reconciliation from periodic discovery into event-driven reaction.</p><p>The result is a lower-latency, more honest architecture. Truth changes, the control plane notices, Intent is created, and Execution follows. The system no longer waits for a timer to rediscover what should already be known.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UytF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UytF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!UytF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!UytF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!UytF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UytF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_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;:1350557,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_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_!UytF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!UytF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!UytF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!UytF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f1559a0-6e4c-4e90-8de3-5c9c2ab3dc0c_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>5. Parjanya v2.0 as a TBIE Case Study</h2><p>Parjanya&#8217;s architecture maps neatly onto TBIE. S3 holds immutable uploads and preview artifacts. DynamoDB holds workflow state, curation metadata, and hashes. SQS holds replayable intent. Lambdas handle validation, replay, and orchestration. GPU workers perform inference and write enriched state back to DynamoDB. Autoscaling follows queue pressure and worker demand.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MUPC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd48945-f4e0-4744-b065-a4ffd041a8e4_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MUPC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd48945-f4e0-4744-b065-a4ffd041a8e4_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!MUPC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd48945-f4e0-4744-b065-a4ffd041a8e4_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!MUPC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd48945-f4e0-4744-b065-a4ffd041a8e4_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!MUPC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd48945-f4e0-4744-b065-a4ffd041a8e4_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MUPC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd48945-f4e0-4744-b065-a4ffd041a8e4_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1bd48945-f4e0-4744-b065-a4ffd041a8e4_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;:1380189,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd48945-f4e0-4744-b065-a4ffd041a8e4_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_!MUPC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd48945-f4e0-4744-b065-a4ffd041a8e4_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!MUPC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd48945-f4e0-4744-b065-a4ffd041a8e4_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!MUPC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd48945-f4e0-4744-b065-a4ffd041a8e4_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!MUPC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd48945-f4e0-4744-b065-a4ffd041a8e4_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>What makes the case study valuable is not the existence of those components, but the failure modes they exposed. Parjanya demonstrated that many production issues are really reconciliation issues in disguise. Some failures were caused by deleting intent too early. Others were caused by truth existing without intent. Some were caused by the wrong bucket being referenced correctly. Others were caused by the control plane being unable to read queue state. Still others came from stale image tags, missing model files, CORS misconfiguration, or API schema drift. TBIE made those failures legible.</p><h3>5.1 Transient GPU failure should not destroy Intent</h3><p>One of the earliest and most important incidents involved GPU workers deleting SQS messages before the retry window had been exhausted. A worker could encounter a temporary S3 download failure or an out-of-memory condition, write a failure state, and still remove the only replayable message. At that point, Truth said the work had failed, but Intent no longer existed and the system had no automatic path to try again.</p><p>TBIE made the problem obvious. Execution had destroyed Intent prematurely. The fix was to return explicit execution outcomes: <code>retry</code>, <code>terminal_failure</code>, or <code>completed</code>. A retry preserves the message and lets visibility timeout and receive count determine whether the work should be attempted again. A terminal failure writes durable failed truth and then deletes the message. Success writes final truth and deletes the message. That separation preserves replayability while still allowing durable failure when necessary.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Give!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175efbd2-4697-4ac2-adf5-2aa487057cdd_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Give!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175efbd2-4697-4ac2-adf5-2aa487057cdd_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Give!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175efbd2-4697-4ac2-adf5-2aa487057cdd_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Give!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175efbd2-4697-4ac2-adf5-2aa487057cdd_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Give!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175efbd2-4697-4ac2-adf5-2aa487057cdd_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Give!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175efbd2-4697-4ac2-adf5-2aa487057cdd_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/175efbd2-4697-4ac2-adf5-2aa487057cdd_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;:1280351,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175efbd2-4697-4ac2-adf5-2aa487057cdd_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_!Give!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175efbd2-4697-4ac2-adf5-2aa487057cdd_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Give!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175efbd2-4697-4ac2-adf5-2aa487057cdd_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Give!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175efbd2-4697-4ac2-adf5-2aa487057cdd_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Give!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175efbd2-4697-4ac2-adf5-2aa487057cdd_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>5.2 Truth can be pending while Intent never existed</h3><p>Another recurring failure mode was the mirror image of the first. Rows in DynamoDB would remain in a pending VLM state, but no corresponding queue message had been created. Queue depth fell to zero and the system appeared idle, yet the backlog still existed in Truth.</p><p>This is a reconciliation gap, not a worker bug. The response was to introduce replay mechanisms that scan for pending rows without Intent, regenerate queue messages, and kick the GPU fleet when work is emitted. In other words, the platform needed a control plane that could restore missing Intent from Truth automatically.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OvxU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bc444-cc09-431d-b543-564a70f69bce_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OvxU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bc444-cc09-431d-b543-564a70f69bce_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!OvxU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bc444-cc09-431d-b543-564a70f69bce_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!OvxU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bc444-cc09-431d-b543-564a70f69bce_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!OvxU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bc444-cc09-431d-b543-564a70f69bce_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OvxU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bc444-cc09-431d-b543-564a70f69bce_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/392bc444-cc09-431d-b543-564a70f69bce_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;:1258474,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bc444-cc09-431d-b543-564a70f69bce_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_!OvxU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bc444-cc09-431d-b543-564a70f69bce_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!OvxU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bc444-cc09-431d-b543-564a70f69bce_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!OvxU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bc444-cc09-431d-b543-564a70f69bce_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!OvxU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F392bc444-cc09-431d-b543-564a70f69bce_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>5.3 Replaying retryable failures requires resetting Truth deliberately</h3><p>Not every failure should be treated as terminal. Some failures, such as S3 download errors or temporary GPU OOM events, are retryable if the underlying condition is corrected. But a simple re-enqueue is not enough when the workflow row itself still contains partial or stale derived fields.</p><p>TBIE clarifies the difference between retry and replay. A retry is another attempt at the same execution. A replay is a deliberate reset to a pre-execution boundary, removal of stale derived state, and emission of fresh Intent. This distinction matters because the second form is a controlled reconstruction of the workflow, not merely another attempt on top of corrupted state.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wfgU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70de2d-fe49-4f50-8342-44dcc1e7ea35_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wfgU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70de2d-fe49-4f50-8342-44dcc1e7ea35_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!wfgU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70de2d-fe49-4f50-8342-44dcc1e7ea35_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!wfgU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70de2d-fe49-4f50-8342-44dcc1e7ea35_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!wfgU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70de2d-fe49-4f50-8342-44dcc1e7ea35_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wfgU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70de2d-fe49-4f50-8342-44dcc1e7ea35_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a70de2d-fe49-4f50-8342-44dcc1e7ea35_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;:1351019,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70de2d-fe49-4f50-8342-44dcc1e7ea35_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_!wfgU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70de2d-fe49-4f50-8342-44dcc1e7ea35_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!wfgU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70de2d-fe49-4f50-8342-44dcc1e7ea35_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!wfgU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70de2d-fe49-4f50-8342-44dcc1e7ea35_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!wfgU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a70de2d-fe49-4f50-8342-44dcc1e7ea35_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>5.4 Wrong bucket, right key</h3><p>One of the most instructive incidents involved an SQS payload that pointed to a valid preview key but the wrong bucket. The worker repeatedly failed with S3 download errors, even though the preview existed. The issue was not flaky execution. It was deterministic misrouting.</p><p>This is a classic distributed systems failure: the object key is correct, but the address is wrong. TBIE makes that failure visible because Intent is not just &#8220;some work exists.&#8221; Intent must encode the correct target. The fix was to force preview keys to use the uploads bucket as the source of truth and to tighten eligibility so only objects suitable for GPU work are enqueued.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mtk_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mtk_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Mtk_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Mtk_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Mtk_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mtk_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_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;:1292711,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_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_!Mtk_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Mtk_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Mtk_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Mtk_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f60d8d7-6784-41d7-88f8-90d8e26ce0bd_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>5.5 Policy changes should be handled as replay, not patching</h3><p>When the content policy changed to more strictly reject non-photographic content such as screenshots, banners, infographics, social cards, slides, illustrations, and mockups, the platform needed to reprocess historical images under the new rules. TBIE made the solution obvious: reset the affected Truth fields to a pre-VLM boundary, set the rows back to pending, and emit new Intent so GPU workers can re-grade under the revised policy.</p><p>This is one of the most powerful properties of replay-native systems. They allow policy evolution without manual data surgery. A change in judgment does not require a one-off correction script. It becomes a controlled reprocessing event with clear before-and-after semantics.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RabB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f06ffab-14ca-4963-b48f-640ec28db035_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RabB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f06ffab-14ca-4963-b48f-640ec28db035_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!RabB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f06ffab-14ca-4963-b48f-640ec28db035_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!RabB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f06ffab-14ca-4963-b48f-640ec28db035_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!RabB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f06ffab-14ca-4963-b48f-640ec28db035_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RabB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f06ffab-14ca-4963-b48f-640ec28db035_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f06ffab-14ca-4963-b48f-640ec28db035_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;:1332578,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f06ffab-14ca-4963-b48f-640ec28db035_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_!RabB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f06ffab-14ca-4963-b48f-640ec28db035_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!RabB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f06ffab-14ca-4963-b48f-640ec28db035_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!RabB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f06ffab-14ca-4963-b48f-640ec28db035_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!RabB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f06ffab-14ca-4963-b48f-640ec28db035_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>5.6 Execution drift can occur below the application layer</h3><p>Parjanya also surfaced failures where the application code was correct but the execution environment was stale. One launch template continued to point to an old image tag. Cloud-init failed while pulling the nonexistent container image, and the GPU instance came up without ever starting the worker.</p><p>A separate incident involved an AMI missing the Python files required by a model that relied on remote code. The container started, but the model loader crashed because the local artifact was incomplete. These are both Execution-layer failures, but they occur at different depths: one at instance boot, the other at model runtime. TBIE is useful because it keeps both cases in the same conceptual category: the execution environment drifted away from the declared source of truth.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vLkz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcadebad4-114d-4157-b1f7-68197a4557c6_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vLkz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcadebad4-114d-4157-b1f7-68197a4557c6_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!vLkz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcadebad4-114d-4157-b1f7-68197a4557c6_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!vLkz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcadebad4-114d-4157-b1f7-68197a4557c6_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!vLkz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcadebad4-114d-4157-b1f7-68197a4557c6_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vLkz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcadebad4-114d-4157-b1f7-68197a4557c6_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cadebad4-114d-4157-b1f7-68197a4557c6_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;:1390122,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcadebad4-114d-4157-b1f7-68197a4557c6_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_!vLkz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcadebad4-114d-4157-b1f7-68197a4557c6_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!vLkz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcadebad4-114d-4157-b1f7-68197a4557c6_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!vLkz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcadebad4-114d-4157-b1f7-68197a4557c6_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!vLkz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcadebad4-114d-4157-b1f7-68197a4557c6_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>5.7 CORS and browser execution are part of the resilience story</h3><p>The ingestion path introduced another class of split-state failure. The backend could write a pending upload record and generate a presigned URL, but the browser&#8217;s PUT could still fail because the bucket CORS policy or endpoint routing was incorrect. In that case, Truth at the API layer looked correct while Execution at the browser layer never completed.</p><p>Later investigations revealed that multiple independent layers could be wrong at once. A bucket might reject wildcard origins under restricted public bucket settings while the client simultaneously used a global S3 endpoint that returned a redirect browsers would not follow on OPTIONS preflight. TBIE helps here by forcing the diagnostic question: is Intent missing, or is Execution unable to realize it? In this case, Intent existed. Execution was blocked by infrastructure and configuration drift.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j8uE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dfb5140-43a7-455a-9ad6-78206dd2cf54_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j8uE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dfb5140-43a7-455a-9ad6-78206dd2cf54_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!j8uE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dfb5140-43a7-455a-9ad6-78206dd2cf54_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!j8uE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dfb5140-43a7-455a-9ad6-78206dd2cf54_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!j8uE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dfb5140-43a7-455a-9ad6-78206dd2cf54_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j8uE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dfb5140-43a7-455a-9ad6-78206dd2cf54_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6dfb5140-43a7-455a-9ad6-78206dd2cf54_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;:1385293,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dfb5140-43a7-455a-9ad6-78206dd2cf54_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_!j8uE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dfb5140-43a7-455a-9ad6-78206dd2cf54_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!j8uE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dfb5140-43a7-455a-9ad6-78206dd2cf54_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!j8uE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dfb5140-43a7-455a-9ad6-78206dd2cf54_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!j8uE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dfb5140-43a7-455a-9ad6-78206dd2cf54_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>5.8 The control plane itself can fail silently</h3><p>One of the most dangerous incidents in the system occurred when the replay Lambda lacked the permission it needed to read queue attributes. The function was still scheduled and invoked, but it could not inspect Belief and therefore crashed before it could emit Intent or kick the GPU ASG. From the outside, everything looked enabled. In reality, the control plane had gone blind.</p><p>This is a crucial TBIE lesson. The component that repairs work is itself a first-class reliability surface. If the control plane silently fails, then every other safety net becomes weaker. That is why control-plane observability must be stronger than ordinary worker observability.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NBZf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44fce6c3-6eed-41d7-8d38-952c19b4f570_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NBZf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44fce6c3-6eed-41d7-8d38-952c19b4f570_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!NBZf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44fce6c3-6eed-41d7-8d38-952c19b4f570_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!NBZf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44fce6c3-6eed-41d7-8d38-952c19b4f570_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!NBZf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44fce6c3-6eed-41d7-8d38-952c19b4f570_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NBZf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44fce6c3-6eed-41d7-8d38-952c19b4f570_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44fce6c3-6eed-41d7-8d38-952c19b4f570_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;:1352658,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44fce6c3-6eed-41d7-8d38-952c19b4f570_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_!NBZf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44fce6c3-6eed-41d7-8d38-952c19b4f570_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!NBZf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44fce6c3-6eed-41d7-8d38-952c19b4f570_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!NBZf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44fce6c3-6eed-41d7-8d38-952c19b4f570_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!NBZf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44fce6c3-6eed-41d7-8d38-952c19b4f570_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>5.9 Dynamic tenant discovery and queue retention are part of reconciliation</h3><p>As the platform grew, static tenant lists became a bottleneck. Reconciliation could not depend on manually editing Terraform every time a new tenant was onboarded. The control plane therefore moved toward dynamic tenant discovery from DynamoDB, with tenant registry markers written by the upload path and discovered by the replay Lambda at runtime.</p><p>Queue retention was another important operational detail. If the GPU fleet is scaled to zero for cost savings, Intent must survive long enough for work to be processed after a weekend or holiday gap. Retention policy is therefore part of resilience design, not a generic queue setting.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hek4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c618b31-0389-4543-9035-c9ada6781450_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hek4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c618b31-0389-4543-9035-c9ada6781450_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Hek4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c618b31-0389-4543-9035-c9ada6781450_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Hek4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c618b31-0389-4543-9035-c9ada6781450_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Hek4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c618b31-0389-4543-9035-c9ada6781450_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hek4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c618b31-0389-4543-9035-c9ada6781450_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c618b31-0389-4543-9035-c9ada6781450_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;:1417519,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c618b31-0389-4543-9035-c9ada6781450_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_!Hek4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c618b31-0389-4543-9035-c9ada6781450_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Hek4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c618b31-0389-4543-9035-c9ada6781450_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Hek4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c618b31-0389-4543-9035-c9ada6781450_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Hek4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c618b31-0389-4543-9035-c9ada6781450_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>6. Operational Model and Runbook Thinking</h2><p>TBIE becomes truly useful only when it changes how incidents are diagnosed.</p><p>By the time Parjanya matured into an event-driven reconciliation system, the debugging approach itself had changed. Operators no longer began by asking whether &#8220;the queue is healthy&#8221; or whether &#8220;the GPU workers are running.&#8221; Those signals mattered, but they were no longer treated as authoritative.</p><p>Instead, every investigation began with a simpler and much more precise question:</p><p>Is the system waiting because Intent is missing, or is Intent present but Execution cannot realize it?</p><p>That distinction dramatically narrowed the search space during incidents.</p><p>If Truth showed a growing backlog while Intent remained near zero, the issue was usually in reconciliation: replay Lambda failure, queue emission failure, stale tenant discovery, or control-plane blindness.</p><p>If Intent existed but Execution failed repeatedly, the problem shifted toward realization: bucket routing, IAM permissions, runtime drift, stale launch templates, model incompatibility, or endpoint mismatch.</p><p>The architecture became easier to reason about because TBIE transformed debugging from improvisation into classification.</p><h2>7. Guardrails and Maintenance as Part of the Architecture</h2><p>Parjanya&#8217;s history shows that resilient systems are built by converting incidents into guardrails. Transient worker failures should not destroy intent. Replay logic should reset truth cleanly before re-emitting work. Dependency drift should be prevented with lockfiles and build assertions. CORS origin drift should be rejected at plan time. Tenant discovery should be dynamic rather than manually maintained. Launch templates should refresh when image tags change. Model artifacts and container versions should be treated as a compatibility pair. API contracts and frontend types should not be allowed to drift silently. Queue retention should match the actual outage window, not an idealized one.</p><p>This is the practical meaning of reliability engineering. Incidents become permanent controls. The architecture evolves by accumulating constraints, validations, and replay paths that encode what the system has already learned.</p><h2>8. Implications for AI Platform Design</h2><p>TBIE generalizes beyond Parjanya. Any AI platform that spans storage, metadata, asynchronous work, GPU execution, and policy evolution can benefit from the same model. The key is to stop thinking of the system as a one-way pipeline and instead treat it as a reconciliation loop that continuously restores alignment between durable truth and intended work.</p><p>That shift affects architecture choices. Queues become journals of intent rather than temporary transport. Replay becomes a first-class product capability rather than an ops workaround. Autoscaling becomes a consequence of work existing, not a heuristic guess. Model packaging becomes part of execution correctness. Browser upload behavior becomes part of the end-to-end reliability model. And policy change becomes a replay event rather than a manual repair task.</p><h1>When the System Hangs at 02:00 AM</h1><p>At 02:00 AM, the queue may look empty while customers are still waiting for images to process. GPU instances may exist while no workers are actually running. A replay Lambda may still appear scheduled while silently crashing on every invocation. Dashboards may continue showing green infrastructure while the control plane itself has already gone blind.</p><p>This is where TBIE stopped being an architectural abstraction and became an operational model.</p><p>The first step was no longer restarting workers or increasing autoscaling limits. The first step became identifying which reconciliation boundary had failed.</p><p>The investigation usually began with Truth.</p><p>Was DynamoDB accumulating rows in <code>pending_vlm_enrichment</code>? If so, the platform still believed work should exist, regardless of what the queue appeared to show. Truth backlog became the first signal because Truth is the authoritative record of unfinished work.</p><p>The next step was Intent.</p><p>Did SQS actually contain replayable work items? A high Truth backlog combined with near-zero queue depth usually indicated a reconciliation failure rather than an execution failure. In those cases, the replay Lambda itself became suspect. Either the control plane had stopped emitting Intent, or it had lost the ability to discover the work that needed to exist.</p><p>That distinction mattered enormously because the operational response changed completely depending on the answer.</p><p>If Intent existed but the backlog still did not move, attention shifted toward Execution health. GPU worker logs became critical. Sometimes the workers were healthy but repeatedly failing with deterministic download errors caused by bucket routing drift. Sometimes GPU instances launched successfully while containers never started because a stale launch template pointed to a nonexistent image tag. In other cases, the instance booted correctly but the model loader crashed because required runtime artifacts were missing from the AMI.</p><p>One of the most revealing operational signals turned out to be complete silence.</p><p>An empty GPU log group was rarely a good sign. More often, it meant execution had failed before the application layer even started. Cloud-init failures, image pull failures, IAM denial during bootstrap, or launch-template drift frequently surfaced first as absence rather than explicit failure.</p><p>The replay Lambda introduced another category of silence.</p><p>If queue visibility remained unchanged while pending Truth continued growing, the control plane itself became the focus. One of the most dangerous incidents in the system occurred when the replay Lambda lost permission to read queue attributes. The function was still scheduled. It was still being invoked. But it crashed before emitting Intent or triggering autoscaling. From the outside, everything looked operational while reconciliation had effectively stopped.</p><p>That incident permanently changed the operational philosophy of the platform.</p><p>Worker failures became treated as recoverable noise.</p><p>Control-plane blindness became treated as a systemic risk.</p><p>Eventually, the debugging process itself evolved into a TBIE classification exercise:</p><ul><li><p>Truth backlog revealed whether unfinished work existed.</p></li><li><p>Intent backlog revealed whether reconciliation was functioning.</p></li><li><p>Queue visibility revealed whether work was flowing.</p></li><li><p>GPU log silence revealed bootstrap or execution drift.</p></li><li><p>Replay Lambda silence revealed control-plane failure.</p></li><li><p>IAM checks validated whether orchestration still had authority to act.</p></li><li><p>Launch-template validation confirmed whether execution environments still matched declared infrastructure state.</p></li></ul><p>The system stopped being debugged as &#8220;a pipeline.&#8221;</p><p>It began being debugged as a continuously reconciling distributed system.</p><p>That distinction changed how incidents were understood, how recovery was automated, and ultimately how the platform itself evolved.</p><h2>9. Conclusion</h2><p>Parjanya v2.0 demonstrates that resilient AI infrastructure depends on more than good models or fast workers. It depends on a clear model for distinguishing what is true, what is believed, what work is intended, and what execution can actually accomplish. TBIE provides that model.</p><p>The value of TBIE is not just conceptual. It changes how systems are built, how retries are designed, how control planes are monitored, how infrastructure drift is prevented, and how policy changes are reapplied. Most importantly, it turns production failure from a confusing mystery into a structured reconciliation problem.</p><p>That is why the right mental model for modern AI infrastructure is not merely &#8220;build a pipeline.&#8221; It is &#8220;build a system that can continuously reconcile truth and intent until intended work is actually realized.&#8221;</p><h2>Appendix A. Maintenance Checklist</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i9vf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82143e30-f210-459b-91b3-8475d948ce8f_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i9vf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82143e30-f210-459b-91b3-8475d948ce8f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!i9vf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82143e30-f210-459b-91b3-8475d948ce8f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!i9vf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82143e30-f210-459b-91b3-8475d948ce8f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!i9vf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82143e30-f210-459b-91b3-8475d948ce8f_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i9vf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82143e30-f210-459b-91b3-8475d948ce8f_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82143e30-f210-459b-91b3-8475d948ce8f_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;:1561610,&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://blog.phagyul.ai/i/199145206?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82143e30-f210-459b-91b3-8475d948ce8f_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_!i9vf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82143e30-f210-459b-91b3-8475d948ce8f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!i9vf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82143e30-f210-459b-91b3-8475d948ce8f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!i9vf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82143e30-f210-459b-91b3-8475d948ce8f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!i9vf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82143e30-f210-459b-91b3-8475d948ce8f_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That checklist is not a substitute for architecture. It is how architecture remains trustworthy over time.</p><h2></h2>]]></content:encoded></item><item><title><![CDATA[Context Engineering and Context Debt]]></title><description><![CDATA[TL;DR: I noticed Haiku 4.5 being spawned as a subagent during an Opus 4.7 session.]]></description><link>https://blog.phagyul.ai/p/context-engineering-and-context-debt</link><guid isPermaLink="false">https://blog.phagyul.ai/p/context-engineering-and-context-debt</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Wed, 20 May 2026 06:06:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dA7S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.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_!dA7S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dA7S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!dA7S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!dA7S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!dA7S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dA7S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1687837,&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://jagadeeshrampam.substack.com/i/198514119?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.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_!dA7S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!dA7S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!dA7S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!dA7S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcea4dfbb-67e2-4a62-af94-c33dac8db92a_1774x887.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="pullquote"><p><strong>TL;DR:</strong> I noticed Haiku 4.5 being spawned as a subagent during an Opus 4.7 session. That observation opened a data investigation that revealed ~77% of my token spend was context accumulation waste, not productive reasoning. This is the framework I built to fix it &#8212; and the problem has a name: <strong>Context Debt </strong>and the fix is:<strong> Context Engineering </strong>.</p></div><h2>1. The Observation That Started This</h2><p>A few weeks ago I noticed something in my Claude Code session trace: Haiku 4.5 was being invoked as a subagent while my main session was running on Opus 4.7.</p><p><strong>My first instinct was: </strong><em><strong>is this personalisation? Has Claude learned my patterns? Is this a new adaptive router?</strong></em></p><p>It was none of those things. But chasing the answer led me into a deep audit of my actual usage data &#8212; and what I found changed how I think about AI session economics entirely.</p><p>The short answer: Claude Code has a built-in subagent architecture where the main orchestrator (Opus 4.7 in my case) delegates read-only codebase work to the <strong>Explore subagent</strong>, which runs on Haiku 4.5 by default. It is deterministic product behaviour, not personalisation. The model matching is happening at the subagent dispatch boundary, not through learned routing.</p><p>But the longer answer &#8212; what I found when I actually pulled my usage data &#8212; is the more important story.</p><div><hr></div><h2>2. What the Data Actually Showed</h2><p>Running <code>/cost</code> in my Claude Code terminal revealed the real picture, however it is only 3% of usage, 33 sessions, complete details are found using <code>ccusage</code>, still showing the important metrics:</p><pre><code>Favorite model:  Opus 4.7        Total tokens: 22.0M
Sessions: 33                     Longest session: 7d 2h 33m

&#9679; Opus 4.7  (53.3%)   In: 118.2k  &#183; Out: 11.6M
&#9679; Opus 4.6  (18.2%)   In: 118.3k  &#183; Out: 3.9M
&#9679; Haiku 4.5 (20.6%)   In: 363.5k  &#183; Out: 4.2M
&#9679; Sonnet 4.6  (7.9%)  In:  63.0k  &#183; Out: 1.7M</code></pre><p>Combined Opus usage: <strong>71.5%</strong> of all tokens.</p><p>Sonnet &#8212; the model I publicly advocated as the benchmark &#8212; was only <strong>7.9%</strong> of my actual usage.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:197172333,&quot;url&quot;:&quot;https://jagadeeshrampam.substack.com/p/sonnet-46-became-my-new-benchmark&quot;,&quot;publication_id&quot;:7361555,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:null,&quot;title&quot;:&quot;Sonnet 4.6 Became My New Benchmark for Building an Infra-Heavy VLM Platform&quot;,&quot;truncated_body_text&quot;:&quot;A few months ago, I wrote about why I believed in a Haiku-first strategy: start with the cheapest and fastest model possible, then escalate only when the task genuinely becomes harder. That idea still makes sense in principle.&quot;,&quot;date&quot;:&quot;2026-05-11T04:33:51.017Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;handle&quot;:&quot;jagadeeshrampam&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fbd24c4-e9ca-4d07-9320-d1c105eb38c8_1085x1085.jpeg&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;profile_set_up_at&quot;:&quot;2023-11-17T15:21:07.496Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-11-16T16:33:25.907Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:7512312,&quot;user_id&quot;:12091074,&quot;publication_id&quot;:7361555,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:7361555,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;subdomain&quot;:&quot;jagadeeshrampam&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Techie, explorer and photographer &quot;,&quot;logo_url&quot;:null,&quot;author_id&quot;:12091074,&quot;primary_user_id&quot;:12091074,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2025-12-23T11:09:54.434Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Jagadeesh Rampam&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[10845],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://jagadeeshrampam.substack.com/p/sonnet-46-became-my-new-benchmark?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><span></span><span class="embedded-post-publication-name">Jagadeesh Rampam</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Sonnet 4.6 Became My New Benchmark for Building an Infra-Heavy VLM Platform</div></div><div class="embedded-post-body">A few months ago, I wrote about why I believed in a Haiku-first strategy: start with the cheapest and fastest model possible, then escalate only when the task genuinely becomes harder. That idea still makes sense in principle&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 months ago &#183; Jagadeesh Rampam</div></a></div><p>Running <code>ccusage session</code> revealed the concentration problem:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xN3S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xN3S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!xN3S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!xN3S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!xN3S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xN3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1458269,&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://jagadeeshrampam.substack.com/i/198514119?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.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_!xN3S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!xN3S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!xN3S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!xN3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9d90ab-331a-4391-af4c-9801d50fad77_1774x887.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Two sessions accounted for 50.9% of all costs.</strong></p><p>The small sessions with $0.16&#8211;0.22/M cost-per-token are my manual Haiku sessions &#8212; git commits, README updates, simple lookups. Haiku routing was working correctly there.</p><p>The two expensive sessions are a different story entirely. And the cost-per-million ratio is the key signal: at $0.53&#8211;0.63/M blended, those sessions were Opus-orchestrated with some subagent delegation, but the token volume itself was the problem &#8212; not the model choice.</p><div><hr></div><h2>3. Naming the Problem: Context Debt</h2><p>Before getting to solutions, I want to name what I observed, because it needs a name.</p><p><strong>Context Debt</strong> is the accumulation of tokens in a session that compound the cost of every future turn without adding proportional value to the reasoning quality of those turns.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:185498867,&quot;url&quot;:&quot;https://jagadeeshrampam.substack.com/p/from-diagnosing-ai-debt-to-durable&quot;,&quot;publication_id&quot;:7361555,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:null,&quot;title&quot;:&quot;From diagnosing AI debt to durable fixes (Part-3)&quot;,&quot;truncated_body_text&quot;:&quot;This is Part 3 of the series on getting the best from Claude code. Part 1 on Why you should chose Haiku as Default model and escalate if needed; Part 2 introduced three practical practices &#8212; repo/component Claude.md files, prompt caching, and context engineering&quot;,&quot;date&quot;:&quot;2026-01-23T04:19:00.975Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;handle&quot;:&quot;jagadeeshrampam&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fbd24c4-e9ca-4d07-9320-d1c105eb38c8_1085x1085.jpeg&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;profile_set_up_at&quot;:&quot;2023-11-17T15:21:07.496Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-11-16T16:33:25.907Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:7512312,&quot;user_id&quot;:12091074,&quot;publication_id&quot;:7361555,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:7361555,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;subdomain&quot;:&quot;jagadeeshrampam&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Techie, explorer and photographer &quot;,&quot;logo_url&quot;:null,&quot;author_id&quot;:12091074,&quot;primary_user_id&quot;:12091074,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2025-12-23T11:09:54.434Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Jagadeesh Rampam&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[10845],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://jagadeeshrampam.substack.com/p/from-diagnosing-ai-debt-to-durable?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><span></span><span class="embedded-post-publication-name">Jagadeesh Rampam</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">From diagnosing AI debt to durable fixes (Part-3)</div></div><div class="embedded-post-body">This is Part 3 of the series on getting the best from Claude code. Part 1 on Why you should chose Haiku as Default model and escalate if needed; Part 2 introduced three practical practices &#8212; repo/component Claude.md files, prompt caching, and context engineering&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">6 months ago &#183; Jagadeesh Rampam</div></a></div><p>It behaves like technical debt in one critical way: it is invisible when it is forming, and expensive when you finally notice it. Unlike technical debt, it has an <strong>immediate dollar cost</strong> that compounds within the same session.</p><p>Here is the mechanics:</p><pre><code>Turn 1:   Opus reads inference_config.yaml    &#8594; context: 3k tokens
Turn 10:  Opus reads vlm_pipeline.py          &#8594; context: 40k tokens
Turn 30:  Opus reads cuda_kernels/, manifests  &#8594; context: 180k tokens
Turn 50+: Every API call sends 180k input     &#8594; paying full price
          even if your prompt is 50 words</code></pre><p>At Opus pricing (~$15/M input tokens), 200 subsequent turns &#215; 180k context = 36M input tokens = <strong>$540 in input alone</strong>, before a single output token is generated.</p><p>This is what those two sessions were doing. It was not that Opus was the wrong model. It was that the session carried everything it had ever read into every subsequent turn &#8212; and paid Opus prices for all of it, repeatedly.</p><p>Three forces compound context debt:</p><p><strong>Prompt cache expiry.</strong> Claude caches the static prefix of your context for 5 minutes (up to 1 hour for some configurations). In a session spanning hours or days, that cache expired repeatedly. Each expiry means paying full Opus input price for the entire accumulated context again. My 7-day session paid full price for a 400k+ context many times over.</p><p><strong>Compaction tax.</strong> When context compacts (the default fires at ~95% capacity), Claude writes a summary and prepends it to all future turns. In a very long session with multiple compactions, those summaries stack &#8212; each subsequent turn carries all of them as mandatory context.</p><p><strong>Speculative file reads.</strong> Opus tends to read files &#8220;to understand the broader context&#8221; before answering, even when the current task doesn&#8217;t require them. In an ML infrastructure repo, this means model configs, environment files, pipeline definitions, deployment scripts, and CUDA configurations all end up in context &#8212; and stay there.</p><div><hr></div><h2>4. The Constraint I Cannot Engineer Away</h2><p>Before presenting the framework, an honest acknowledgment of constraints.</p><p>My primary workload is <strong>VLM (Vision-Language Model) inferencing, infra-heavy automation, and ML optimisation pipelines</strong>. For this work:</p><ul><li><p><strong>Minimum viable context is ~300k tokens</strong>. Multiple model configs, inference scripts, pipeline definitions, and infrastructure manifests need to be simultaneously present for coherent cross-file reasoning.</p></li><li><p>Sonnet 4.6 has only recently gained a 1M context window (now GA, worth testing for execution phases). But adaptive thinking &#8212; structurally required for deep VLM reasoning &#8212; was absent from Sonnet until recently and is still maturing.</p></li><li><p>For the reasoning-heavy phases of this work, <strong>Opus 4.7 at 1M context is the correct model</strong>. This is a technical requirement, not a preference.</p></li></ul><p>The insight that changes everything: <strong>the model being correct does not mean the context footprint needs to be what it currently is.</strong></p><p>Opus 4.7 is the right reasoning engine. Sending it 400k tokens of raw source code when it only needs 40k tokens of structured summaries is waste. That is the distinction the framework targets.</p><div><hr></div><h2>5. Context Engineering: The Framework</h2><p>Context Engineering is the practice of deliberately managing what enters an AI session&#8217;s context window, when it enters, and in what form &#8212; to maximise reasoning quality per token rather than total tokens.</p><p>It has four mechanisms.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BIAH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926e27c3-ae8d-4942-bbfb-331d860110fc_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BIAH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926e27c3-ae8d-4942-bbfb-331d860110fc_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!BIAH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926e27c3-ae8d-4942-bbfb-331d860110fc_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!BIAH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926e27c3-ae8d-4942-bbfb-331d860110fc_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!BIAH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926e27c3-ae8d-4942-bbfb-331d860110fc_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BIAH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926e27c3-ae8d-4942-bbfb-331d860110fc_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/926e27c3-ae8d-4942-bbfb-331d860110fc_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;:1682280,&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://jagadeeshrampam.substack.com/i/198514119?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926e27c3-ae8d-4942-bbfb-331d860110fc_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_!BIAH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926e27c3-ae8d-4942-bbfb-331d860110fc_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!BIAH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926e27c3-ae8d-4942-bbfb-331d860110fc_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!BIAH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926e27c3-ae8d-4942-bbfb-331d860110fc_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!BIAH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F926e27c3-ae8d-4942-bbfb-331d860110fc_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>Mechanism 1: Pre-Summarisation (Haiku as Reader)</h3><p>The default pattern:</p><pre><code>Opus opens session
Opus reads 30 files to orient itself
All 30 files sit in context for the rest of the session
Cost: 150k input tokens &#215; every subsequent turn</code></pre><p>The engineered pattern:</p><pre><code>Before session opens:
  @ml-context-loader reads all 30 files (Haiku, separate context)
  Returns: 12k token structured dependency map

Opus main session receives:
  The 12k map, not the 150k raw files
  Opus never directly holds the source files
Cost: 12k input tokens &#215; every subsequent turn</code></pre><p>The work output is identical. The context footprint is ~12x smaller.</p><p><strong>Subagent configuration</strong> (<code>~/.claude/agents/ml-context-loader.md</code>):</p><pre><code>---
name: ml-context-loader
description: Pre-read ML pipeline files, model configs, inference scripts,
  and VLM configurations before complex optimisation work. Returns a
  structured dependency map for the main session. Invoke this BEFORE
  starting any ML or infra work in the main session.
model: haiku
tools: Read, Grep, Glob
---
You read ML infrastructure files and produce a structured summary covering:

1. Model architecture and config paths
2. Inference pipeline entry points and key functions
3. CUDA/GPU configuration and memory constraints
4. Cross-file dependencies relevant to the stated task
5. Files that need to change to accomplish the goal

Return a structured map. Do not return raw file contents.
Maximum output: 15k tokens. Be precise and omit irrelevant files.</code></pre><p><strong>Paired subagent for infrastructure</strong> (<code>~/.claude/agents/infra-scanner.md</code>):</p><pre><code>---
name: infra-scanner
description: Scan infrastructure configs, Terraform files, CI/CD pipelines,
  deployment manifests, and environment configs before optimisation work.
  Returns dependency map and change surface for the stated task.
model: haiku
tools: Read, Grep, Glob, Bash
---
Read infra files and return:
- Resource dependencies and environment configs
- Critical paths that affect the stated task
- Files that need to change
- Current state of relevant resources

Compact output only. Omit files irrelevant to the task.</code></pre><div><hr></div><h3>Mechanism 2: Targeted Loading via CLAUDE.md</h3><p>Even with pre-summarisation, Opus will add raw files to context during execution if not explicitly instructed otherwise. CLAUDE.md is the right place to install session-level context discipline.</p><p><strong>Project-level </strong><code>.claude/CLAUDE.md</code><strong> additions:</strong></p><pre><code>## Context Discipline

Before reading any file, state why it is needed for the current task.
Never read files speculatively to "understand the broader context."

Use @ml-context-loader before starting any ML or infra work.
Use @infra-scanner before starting any infrastructure work.
Use @explorer for any file discovery or codebase search.

If a file has been summarised by a subagent this session, 
use that summary rather than re-reading the raw file.

Maximum 5 files in direct context at any point during implementation.
For architecture decisions, request a structured summary first.

When asked to fix a bug, read only the file containing the bug
and its direct imports. Do not read the broader codebase unless
the fix requires understanding something not in those files.</code></pre><p>This changes Opus&#8217;s default behaviour from breadth-first file reading to targeted loading. In practice, this alone reduces speculative reads by 50&#8211;60% in long sessions.</p><div><hr></div><h3>Mechanism 3: Session Chunking by Reasoning Type</h3><p>The most expensive sessions &#8212; the two that consumed 50.9% of total costs &#8212; mixed two fundamentally different cognitive modes in a single long-running context:</p><ul><li><p><strong>Reasoning mode</strong>: Architecture decisions, bottleneck analysis, choosing optimisation strategies. Needs Opus depth. Short turns, modest context.</p></li><li><p><strong>Execution mode</strong>: Implementing the decided approach across many files. Needs large context. Lighter per-turn reasoning.</p></li></ul><p>When mixed, the session context grows to serve both needs simultaneously &#8212; and every turn pays the full cost of the combined footprint.</p><p><strong>Separated:</strong></p><pre><code># Session 1: Architecture planning
# Opus, focused context (summary only), ~15&#8211;20 turns
claude --model opus
# Prompt: "Given this summary [paste ml-context-loader output],
#   design the memory optimisation strategy for the VLM dataloader.
#   Output a structured implementation plan."
# &#8594; Session ends with a plan document. Context: ~30k tokens throughout.

# Session 2: Implementation
# Sonnet 4.6 at 1M (or Opus if VLM-specific reasoning needed)
# Longer, but following a decided plan &#8212; execution, not discovery
claude --model sonnet
# Prompt: "Implement this plan [paste plan].
#   Start with [specific file]. Read only the files listed in the plan."
# &#8594; Context grows with implementation files, but no re-discovery overhead.
</code></pre><p>The Opus session stays short because it worked from a summary, not raw files. The implementation session can run on Sonnet 4.6 at 1M context if the per-turn reasoning does not require Opus depth &#8212; which it often does not, once the architecture decision is made.</p><p><strong>The practical test for session split:</strong> If your current turn is <em>deciding something</em>, you are in reasoning mode. If your current turn is <em>doing something already decided</em>, you are in execution mode. Different sessions.</p><div><hr></div><h3>Mechanism 4: Cache Warming on Re-entry</h3><p>The single most expensive moment in a long session is returning after a break.</p><p>Prompt cache TTL is 5 minutes by default for most Claude Code request types (up to 1 hour in some configurations). When you step away for 30 minutes and return to a 300k-token context, the first turn back pays full Opus input price for all 300k tokens. If your session had 20 such re-entries across a workday, you paid for that 300k context twenty times.</p><p><strong>Before taking any break longer than a few minutes:</strong></p><pre><code>/compact</code></pre><p>This forces a clean compaction summary before the cache goes cold. The next turn back pays for a 5&#8211;10k summary re-warm, not a 300k context re-warm.</p><p><strong>Prevent the problem structurally</strong> by setting aggressive autocompaction:</p><p>In <code>.claude/settings.json</code>:</p><pre><code>{
  "env": {
    "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "60"
  }
}</code></pre><p>Compacting at 60% context capacity means the session never accumulates a context large enough to be expensive to re-warm. The compaction summary costs a few thousand tokens once. The alternative is paying full input price for a massive context every time the cache expires.</p><div><hr></div><h2>6. The Escalation Model</h2><p>With context engineering in place, the tier routing becomes:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kf33!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kf33!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.png 424w, https://substackcdn.com/image/fetch/$s_!kf33!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.png 848w, https://substackcdn.com/image/fetch/$s_!kf33!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.png 1272w, https://substackcdn.com/image/fetch/$s_!kf33!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kf33!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.png" width="1456" height="801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/edcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1388322,&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://jagadeeshrampam.substack.com/i/198514119?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.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_!kf33!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.png 424w, https://substackcdn.com/image/fetch/$s_!kf33!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.png 848w, https://substackcdn.com/image/fetch/$s_!kf33!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.png 1272w, https://substackcdn.com/image/fetch/$s_!kf33!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedcd0a13-7a1f-4148-98ec-f2ee9babb65a_1691x930.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>The key principle:</strong> Tier selection is determined by reasoning depth required per turn, not by task complexity overall. A complex ML task still has Haiku turns (reading files), Sonnet turns (writing implementations), and Opus turns (designing the approach). The same task should not require every turn to be Opus.</p><p><strong>Environment defaults</strong> that enforce this without manual switching:</p><pre><code># In ~/.zshrc or ~/.bashrc

# Subagents default to Sonnet, not parent model
export CLAUDE_CODE_SUBAGENT_MODEL="claude-sonnet-4-6"

# Haiku slot pinned explicitly
export ANTHROPIC_DEFAULT_HAIKU_MODEL="claude-haiku-4-5-20251001"</code></pre><div><hr></div><h2>7. Complete Subagent Stack</h2><p>For teams adopting this framework, the full subagent configuration:</p><p><code>~/.claude/agents/explorer.md</code> &#8212; Universal read-only search</p><pre><code>---
name: explorer
description: Search files, grep for symbols, read code structure, find
  usages, locate definitions. Use for any read-only investigation
  before editing. Never use for file modification.
model: haiku
tools: Read, Grep, Glob, Bash
---
You are a fast read-only code explorer. Search thoroughly and return
a concise structured summary. Never modify files. Optimise for finding
the minimum set of files relevant to the stated question.</code></pre><p><code>~/.claude/agents/git-helper.md</code> &#8212; Repository operations</p><pre><code>---
name: git-helper
description: Handle git commits, branch management, README updates,
  changelog entries, and documentation formatting. Use for all
  repository hygiene tasks.
model: haiku
tools: Bash, Read, Write
---
You handle git operations and documentation updates efficiently.
Use conventional commits format. Commit messages: type(scope): description.</code></pre><p><code>~/.claude/agents/code-writer.md</code> &#8212; Standard implementation</p><pre><code>---
name: code-writer
description: Implement features, write new functions, refactor existing
  code, add tests. Use for code generation and editing tasks that
  do not require architectural reasoning.
model: sonnet
tools: Read, Write, Edit, Bash, Glob, Grep
---
You are a focused implementation engineer. Read the minimum required
files before editing. Make one logical change per invocation.
Follow the plan provided; do not redesign unless asked.</code></pre><p><code>~/.claude/agents/ml-context-loader.md</code> &#8212; ML pre-summarisation <em>(See Mechanism 1 above)</em></p><p><code>~/.claude/agents/infra-scanner.md</code> &#8212; Infrastructure pre-summarisation <em>(See Mechanism 1 above)</em></p><p><code>~/.claude/agents/architect.md</code> &#8212; High-stakes reasoning only</p><pre><code>---
name: architect
description: Design system architecture, resolve complex multi-file bugs,
  make technology decisions, plan major refactors requiring cross-system
  understanding. Only invoke when deep reasoning is genuinely required.
  Receives summaries, not raw files.
model: opus
tools: Read, Grep, Glob
---
You make high-level decisions from structured summaries.
Think deeply before proposing changes.
Output a structured plan that code-writer can execute step by step.
Request specific raw files only when the summary is insufficient.</code></pre><div><hr></div><h2>8. Before and After: The Numbers</h2><p>Based on actual session data from this audit:</p><p><strong>The two expensive sessions ($625.72 combined API equivalent):</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ElK9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ElK9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.png 424w, https://substackcdn.com/image/fetch/$s_!ElK9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.png 848w, https://substackcdn.com/image/fetch/$s_!ElK9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.png 1272w, https://substackcdn.com/image/fetch/$s_!ElK9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ElK9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.png" width="1456" height="792" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:792,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1012020,&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://jagadeeshrampam.substack.com/i/198514119?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.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_!ElK9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.png 424w, https://substackcdn.com/image/fetch/$s_!ElK9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.png 848w, https://substackcdn.com/image/fetch/$s_!ElK9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.png 1272w, https://substackcdn.com/image/fetch/$s_!ElK9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55ba8ec3-4625-4c53-a194-a62d1a3465bf_1700x925.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Output tokens are unchanged because the actual work product &#8212; the code written, the analysis produced &#8212; is identical. The saving is entirely in the context overhead that was being sent to the Opus API on every turn without contributing to reasoning quality.</p><p><strong>Across all sessions:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jxSv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05baa4d-c6ef-4ab7-a67f-46f822d25a9e_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jxSv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05baa4d-c6ef-4ab7-a67f-46f822d25a9e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!jxSv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05baa4d-c6ef-4ab7-a67f-46f822d25a9e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!jxSv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05baa4d-c6ef-4ab7-a67f-46f822d25a9e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!jxSv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05baa4d-c6ef-4ab7-a67f-46f822d25a9e_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jxSv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05baa4d-c6ef-4ab7-a67f-46f822d25a9e_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b05baa4d-c6ef-4ab7-a67f-46f822d25a9e_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;:1185778,&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://jagadeeshrampam.substack.com/i/198514119?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05baa4d-c6ef-4ab7-a67f-46f822d25a9e_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_!jxSv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05baa4d-c6ef-4ab7-a67f-46f822d25a9e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!jxSv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05baa4d-c6ef-4ab7-a67f-46f822d25a9e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!jxSv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05baa4d-c6ef-4ab7-a67f-46f822d25a9e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!jxSv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05baa4d-c6ef-4ab7-a67f-46f822d25a9e_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>9. What Is Still Missing (Community Ask)</h2><p>This framework works within current Claude Code capabilities, but several gaps remain that limit how far it can go without manual configuration:</p><p><strong><a href="https://github.com/anthropics/claude-code/issues/44976">GitHub #44976 &#8212; Auto model routing by task type</a>.</strong> Currently, there is no native content-aware router in the main session. The routing that exists (Explore &#8594; Haiku) operates at the subagent dispatch boundary only. Automatic routing based on turn type &#8212; planning turns to Opus, execution turns to Sonnet &#8212; requires manual setup or explicit model switching. This feature request, if shipped, would make context engineering automatic rather than configured.</p><p><strong><a href="https://github.com/anthropics/claude-code/issues/43869">GitHub #43869 &#8212; Subagent model routing bugs</a>.</strong> On some Max plan configurations, subagents silently run on the parent session&#8217;s model despite explicit per-agent configuration. If your Haiku-configured subagents appear to cost Opus rates, this ticket is the reference. Check <code>env | grep CLAUDE_CODE_SUBAGENT_MODEL</code> and verify Haiku is actually firing.</p><p><strong>JSONL token counts are unreliable.</strong> The <code>ccusage</code> tool reads from JSONL files where input tokens are undercounted by 100&#8211;174x due to a streaming placeholder issue. For accurate token accounting, use <code>/cost</code> inside Claude Code (reads from the statusbar, which is accurate) and treat <code>ccusage</code> cost estimates as relative comparisons only.</p><p><strong>Sonnet 4.6 at 1M + adaptive thinking.</strong> Both are now GA but recently so. For workloads requiring 300k+ context but not frontier VLM reasoning, Sonnet 4.6 at 1M is worth testing as a drop-in replacement for Opus in execution sessions. One session test against a known task will answer whether the quality holds for your specific workload.</p><div><hr></div><h2>10. Best Practices Summary</h2><p><strong>Before starting any ML or infra session:</strong></p><ul><li><p>Run <code>@ml-context-loader</code> or <code>@infra-scanner</code> first</p></li><li><p>Start with the plan document from a prior architecture session, not a blank slate</p></li><li><p>Launch on Sonnet unless you know the first turn needs Opus-depth reasoning</p></li></ul><p><strong>During a session:</strong></p><ul><li><p><code>/compact</code> before any break longer than 5 minutes</p></li><li><p>Never read files speculatively &#8212; enforce this in CLAUDE.md</p></li><li><p>Split sessions when you shift from designing to implementing</p></li></ul><p><strong>For VLM and large-context ML work specifically:</strong></p><ul><li><p>Opus 4.7 at 1M is still the correct model for reasoning-heavy phases</p></li><li><p>The saving is in context footprint, not model choice</p></li><li><p>Pre-summarise with Haiku; Opus only sees the structured output</p></li></ul><p><strong>On model selection:</strong></p><ul><li><p>Default: Sonnet 4.6 (set <code>CLAUDE_CODE_SUBAGENT_MODEL="claude-sonnet-4-6"</code>)</p></li><li><p>Start sessions with <code>claude --model sonnet</code> unless the first task earns Opus</p></li><li><p>Use <code>opusplan</code> for sessions that need Opus for planning and Sonnet for execution</p></li></ul><p><strong>On measuring progress:</strong></p><ul><li><p>Use <code>/cost</code> for accurate token and model-split data</p></li><li><p>Use <code>ccusage session --breakdown</code> to track model mix per session over time</p></li><li><p>Watch cost-per-million-tokens ratio: $0.20/M = healthy Haiku/cache mix, $1.00+/M = context debt accumulating</p></li></ul><div><hr></div><h2>Closing Thought</h2><p>The observation that started this &#8212; Haiku 4.5 being spawned during an Opus 4.7 session &#8212; turned out to be Anthropic&#8217;s own answer to the problem I had been creating. The built-in subagent architecture already encodes the right instinct: read cheap, reason expensive, never conflate the two.</p><p>Context Debt is what happens when that separation breaks down at the session level. Context Engineering is the practice of maintaining it deliberately.</p><p>The framework is not about using cheaper models. It is about using the right model for each cognitive operation &#8212; and never making the expensive model carry the weight of the cheap one&#8217;s job.</p><div class="pullquote"><p><em>Data sourced from personal Claude Code usage: 33 sessions, 22M tokens, May 2026 audit.</em> <em>All </em><code>ccusage</code><em> costs are API-equivalent estimates; actual charges reflect flat Max subscription pricing.</em> <em>GitHub issues referenced: <a href="https://github.com/anthropics/claude-code/issues/43869">#43869</a>, <a href="https://github.com/anthropics/claude-code/issues/44976">#44976</a>, <a href="https://github.com/anthropics/claude-code/issues/10993">#10993</a>, <a href="https://github.com/anthropics/claude-code/issues/43083">#43083</a>.</em></p></div><p><strong>Related posts:</strong></p><ul><li><p><a href="https://jagadeeshrampam.substack.com/p/the-hidden-runtime-failure-behind">The Hidden Runtime Failure Behind Claude&#8217;s Recent Regression</a></p></li><li><p><a href="https://jagadeeshrampam.substack.com/p/when-adaptive-thinking-goes-off-the">When Adaptive Thinking Goes Off the Rails</a></p></li><li><p><a href="https://substack.com/home/post/p-197172333">Sonnet Becomes My New Benchmark</a></p></li><li><p><a href="https://substack.com/home/post/p-183758575">Why you should chose Haiku as Default model and escalate if needed</a></p></li><li><p><a href="https://substack.com/home/post/p-193306186">Building with Opus 4.6</a></p></li></ul><p><strong>Additional references</strong>:</p><ul><li><p><a href="https://github.com/anthropics/claude-code/issues/27665?utm_source=chatgpt.com">GitHub #27665 &#8212; Intelligent model routing / 93.8% Opus usage issue</a></p></li><li><p><a href="https://github.com/anthropics/claude-code/issues/43326?utm_source=chatgpt.com">GitHub #43326 &#8212; Auto-select model and effort level based on task complexity</a></p></li><li><p><a href="https://github.com/anthropics/claude-code/issues/44077?utm_source=chatgpt.com">GitHub #44077 &#8212; Skill model field not propagated to Agent sub-invocations</a></p></li><li><p><a href="https://github.com/anthropics/claude-code/issues/45228?utm_source=chatgpt.com">GitHub #45228 &#8212; SendMessage ignores model specified at Agent creation</a></p></li><li><p><a href="https://github.com/anthropics/claude-code/issues/50574?utm_source=chatgpt.com">GitHub #50574 &#8212; Auto model switch</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[From Score Engine to Rule Engine: Why I Rebuilt the Decision Layer]]></title><description><![CDATA[I did not set out to replace a scoring engine with a rule engine.]]></description><link>https://blog.phagyul.ai/p/from-score-engine-to-rule-engine</link><guid isPermaLink="false">https://blog.phagyul.ai/p/from-score-engine-to-rule-engine</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Thu, 14 May 2026 11:27:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UKjF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_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_!UKjF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UKjF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!UKjF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!UKjF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!UKjF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UKjF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_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;:1399582,&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://jagadeeshrampam.substack.com/i/197643272?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_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_!UKjF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!UKjF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!UKjF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!UKjF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df5ef7-0eb5-4b90-88c2-f0f4439a82d6_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I did not set out to replace a scoring engine with a rule engine. I set out to make the system cheaper, easier to explain, and less fragile as I was not keen on moving to g5.xlarge or g6.xlarge due to prompt sizes increased and would be lot of churn in terms of architectural and infra changes, comes with re testing every functionality and the increase in the costs both the dev costs as well as instances cost even more if non-availability of spot and on-demand, currently using 75/25 for spot and OD for g4.mdn.xlarge (and 2xlarge).</p><p>What I eventually learned was that the original design had an architectural flaw: it asked a single opaque model score to do too many jobs at once. It had to decide whether an image was technically valid, whether it was worth sending to the expensive VLM path, whether it should be accepted or rejected, and how to justify that decision later. That worked until it did not. So I split the pipeline into two deterministic layers: <strong>a Tier-0 technical validator before the model, and a rule engine after the model. That change dropped cost, improved explainability, and made policy iteration much faster.</strong></p><h2>The system I started with</h2><p>Before Parjanya v2.0 architecture v5.3, the pipeline was basically this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QEyd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e9cd82b-803e-459b-8566-5080243de900_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QEyd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e9cd82b-803e-459b-8566-5080243de900_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!QEyd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e9cd82b-803e-459b-8566-5080243de900_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!QEyd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e9cd82b-803e-459b-8566-5080243de900_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!QEyd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e9cd82b-803e-459b-8566-5080243de900_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QEyd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e9cd82b-803e-459b-8566-5080243de900_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e9cd82b-803e-459b-8566-5080243de900_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;:1343778,&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;:false,&quot;internalRedirect&quot;:&quot;https://jagadeeshrampam.substack.com/i/197643272?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e9cd82b-803e-459b-8566-5080243de900_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_!QEyd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e9cd82b-803e-459b-8566-5080243de900_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!QEyd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e9cd82b-803e-459b-8566-5080243de900_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!QEyd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e9cd82b-803e-459b-8566-5080243de900_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!QEyd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e9cd82b-803e-459b-8566-5080243de900_1536x1024.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>The problem was not that the model was &#8220;bad.&#8221; The problem was that I had turned a rich decision into a number. Two images with the same score could be fundamentally different: one might be a sharp wildlife shot with a minor distortion, while another might be a soft-focus landscape with no clear subject. The number hid the nuance. Prompt changes also shifted the score distribution, which meant calibration drift could silently change the policy. And when someone asked why an image was rejected, a floating-point score was not a useful answer.</p></blockquote><h2>What I changed</h2><p>I made two structural changes.</p><div class="pullquote"><p>First, I added a <strong>Tier-0 technical validator</strong>. This is a deterministic gate that runs before any expensive VLM work. It checks whether the image can be decoded, whether the dimensions are suspicious, whether the frame is blank, whether exposure is blown or crushed, and whether the image is a duplicate using multi-hash dedup. It runs on a small ARM64 Lambda, finishes in sub-second time, and costs about $0.0000002 per image.</p><p>Second, I changed the VLM output contract. Instead of asking the VLM for a single quality score, I asked it to emit <strong>structured cues</strong>: subject label, subject dominance, composition signals, distortion types, and prose. Then I fed those cues into a deterministic <strong>recuration rule engine</strong> that makes the final accept/review/reject decision and writes out a human-readable reason.</p></div><h2>How the new decision layer works</h2><p>The rule engine is deliberately boring in the best possible way. It is not trying to be clever. It is trying to be consistent.</p><p>Here is the decision logic in plain language:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iX8O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iX8O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!iX8O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!iX8O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!iX8O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iX8O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_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;:1460630,&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://jagadeeshrampam.substack.com/i/197643272?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_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_!iX8O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!iX8O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!iX8O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!iX8O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d6fbb22-ff4e-48c3-bc1c-dd2491e8a673_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Every verdict also gets a version tag and a reason string, so I can audit what happened later. That is a huge shift from the old system, where the final answer was essentially &#8220;the score was 0.41.&#8221;</p><h2>Why this mattered operationally</h2><p>The first benefit was cost.</p><p>Here is the cost comparison I care about most:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H3pU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H3pU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.png 424w, https://substackcdn.com/image/fetch/$s_!H3pU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.png 848w, https://substackcdn.com/image/fetch/$s_!H3pU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.png 1272w, https://substackcdn.com/image/fetch/$s_!H3pU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H3pU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.png" width="1456" height="867" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:867,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1251545,&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://jagadeeshrampam.substack.com/i/197643272?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.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_!H3pU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.png 424w, https://substackcdn.com/image/fetch/$s_!H3pU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.png 848w, https://substackcdn.com/image/fetch/$s_!H3pU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.png 1272w, https://substackcdn.com/image/fetch/$s_!H3pU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cda5a4b-d9a4-4c99-88dc-9557566f317e_1625x968.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>On my typical tenant workload, GPU spend still dominates the bill, so every image I keep out of the GPU queue is real leverage. I also found one non-obvious cost: at single-tenant scale, about half of the per-drain cost was NAT Gateway egress, not GPU. In the measured v25 drain, NAT cost was actually larger than GPU cost. That means the rule engine improved the decision layer, but infrastructure tuning still matters separately.</p><p>The second benefit was iteration speed.</p><p>I moved the rule engine through several versions in days, not weeks. The workflow became: edit the rule file, test it on canaries, inspect the reasons, then run the full re-curation if it looked good. No GPU redeploy. No prompt-engine rebuild. No waiting for model infrastructure to churn. In practice, that made policy iteration feel like software engineering again instead of model ops. The v25 drain took 7 hours 41 minutes end to end, but the rule-engine pass over 3,427 rows took less than a minute.</p><p>The third benefit was explainability.</p><p>I finally had a decision layer that could say things like:</p><ul><li><p>&#8220;reject &#8212; subject-critical motion blur&#8221;</p></li><li><p>&#8220;reject &#8212; 3 slight defects stack&#8221;</p></li><li><p>&#8220;review &#8212; weak subject dominance; technically clean&#8221;</p></li></ul><p>That may sound small, but it changes everything when a user asks why something was rejected. A reason string is much more useful than a numeric score.</p><p>The fourth benefit was robustness to prompt drift.</p><p>When the IQA prompt changed from v16 to v17, the score distribution shifted. Under the old design, that meant threshold recalibration and potential policy drift. Under the new design, the rule engine sat on top of structured fields whose meaning stayed stable across prompt versions. The model could change in ways that improved extraction without forcing me to rethink the whole decision layer.</p><h2>The measured validation run</h2><p>The clearest proof came from the v25 rescore.</p><p>I had 2,426 images drained through the pipeline, and then 3,427 rows reprocessed by the rule engine. This was not a synthetic benchmark. It was the first large enough live run to give me defensible numbers.</p><h3>Pipeline results</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zu3n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341c914f-1513-4fd5-8e17-1bcce8dc2318_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zu3n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341c914f-1513-4fd5-8e17-1bcce8dc2318_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!zu3n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341c914f-1513-4fd5-8e17-1bcce8dc2318_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!zu3n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341c914f-1513-4fd5-8e17-1bcce8dc2318_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!zu3n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341c914f-1513-4fd5-8e17-1bcce8dc2318_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zu3n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341c914f-1513-4fd5-8e17-1bcce8dc2318_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/341c914f-1513-4fd5-8e17-1bcce8dc2318_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;:1216621,&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://jagadeeshrampam.substack.com/i/197643272?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341c914f-1513-4fd5-8e17-1bcce8dc2318_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_!zu3n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341c914f-1513-4fd5-8e17-1bcce8dc2318_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!zu3n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341c914f-1513-4fd5-8e17-1bcce8dc2318_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!zu3n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341c914f-1513-4fd5-8e17-1bcce8dc2318_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!zu3n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341c914f-1513-4fd5-8e17-1bcce8dc2318_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>What stood out to me was not just that the run completed, but that it completed cleanly. There was no message loss, the DLQ stayed at zero, and the autoscaler shut down correctly after the queue emptied.</p><h3>Rule-engine results</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d9ne!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d9ne!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!d9ne!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!d9ne!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!d9ne!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d9ne!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.png" width="1448" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1448,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1007870,&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://jagadeeshrampam.substack.com/i/197643272?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.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_!d9ne!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!d9ne!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!d9ne!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!d9ne!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5509e318-0d61-4cfe-b754-5afc7f625327_1448x1086.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The most interesting transitions were:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x8O1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x8O1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!x8O1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!x8O1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!x8O1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x8O1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1145924,&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://jagadeeshrampam.substack.com/i/197643272?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.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_!x8O1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!x8O1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!x8O1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!x8O1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e98da88-ea1c-45ff-a7bd-0282b1000bcb_1774x887.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That last part mattered to me because it showed the rule engine was not trying to force certainty where none existed. It preserved uncertainty instead of masking it.</p><h2>Why this architecture works</h2><p>This pattern is not new in spirit. It is a cascade: a cheap stage rejects obvious failures, and the expensive stage only handles what survives. That reduces inference cost and keeps the scarce GPU path for cases that actually need it. The broader literature supports the same idea, especially for VLM and moderation workloads.</p><p>For me, the more important pattern was <strong>extract-then-decide</strong>. The VLM is the extractor. The rule engine is the decider. Once I separated those roles, the system became easier to reason about. The model could be probabilistic and flexible. The policy could remain deterministic and auditable.</p><h2>What I watch for now</h2><p>I did not trade away all the hard problems. I just moved them into better places.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aPTQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a213593-5229-41f2-aa22-f7f116fdc1a9_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aPTQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a213593-5229-41f2-aa22-f7f116fdc1a9_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!aPTQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a213593-5229-41f2-aa22-f7f116fdc1a9_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!aPTQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a213593-5229-41f2-aa22-f7f116fdc1a9_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!aPTQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a213593-5229-41f2-aa22-f7f116fdc1a9_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aPTQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a213593-5229-41f2-aa22-f7f116fdc1a9_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a213593-5229-41f2-aa22-f7f116fdc1a9_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;:1380029,&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://jagadeeshrampam.substack.com/i/197643272?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a213593-5229-41f2-aa22-f7f116fdc1a9_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_!aPTQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a213593-5229-41f2-aa22-f7f116fdc1a9_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!aPTQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a213593-5229-41f2-aa22-f7f116fdc1a9_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!aPTQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a213593-5229-41f2-aa22-f7f116fdc1a9_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!aPTQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a213593-5229-41f2-aa22-f7f116fdc1a9_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That last item is still open: infrastructure cost can easily dominate the apparent model cost, so I do not want to fool myself into thinking the architecture alone solved everything.</p><h2>What is next</h2><p>The next steps are pretty clear to me. Dedup is still shipped but not yet used as a hard gate in production. The rule engine will likely get a v5 cleanup once the remaining fallback paths are collapsed. And I want a dashboard that breaks out cost by Tier-0 reject reason, because it would be useful to know exactly how much pure margin I am saving when corrupt files, blank frames, and blown exposures are filtered early.</p><h2>The takeaway</h2><p>I did not move from &#8220;AI&#8221; to &#8220;rules.&#8221; I moved from one opaque score to a more honest pipeline.</p><p>Now the model extracts structure, the rule engine makes the decision, and the cheap gate keeps obvious failures away from the GPU. That gave me lower cost, faster iteration, and a system I can actually explain to another human without hand-waving. For a production image pipeline, that is the architecture I trust more.</p><p>One thing I appreciated only after moving to the rule engine was how much the <em>user experience</em> improved once the system stopped behaving like a black-box scorer.</p><p>Previously, the output was essentially a number hidden behind a threshold. After the re-curation architecture, every image started carrying an explainable pipeline trail: technical validation status, VLM enrichment state, structured distortion analysis, composition signals, subject analysis, and finally a deterministic curation verdict with explicit reasoning. The gallery stopped feeling like &#8220;an AI guessed a score&#8221; and started feeling like a traceable review system.</p><p>In the image below, for example, the pipeline clearly shows the two-stage flow: Tier-0 technical validation first, followed by VLM enrichment and structured analysis. The system identifies slight sharpness and focus issues, explains <em>where</em> they occur (&#8220;subject lacks critical sharpness on head and eye area&#8221;), records composition attributes like framing and depth layers, and still accepts the image because the final rule evaluation determined the defects were minor enough relative to subject structure and overall composition quality.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5zJq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5zJq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.png 424w, https://substackcdn.com/image/fetch/$s_!5zJq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.png 848w, https://substackcdn.com/image/fetch/$s_!5zJq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.png 1272w, https://substackcdn.com/image/fetch/$s_!5zJq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5zJq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.png" width="1434" height="3822" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3822,&quot;width&quot;:1434,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3241058,&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://jagadeeshrampam.substack.com/i/197643272?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.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_!5zJq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.png 424w, https://substackcdn.com/image/fetch/$s_!5zJq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.png 848w, https://substackcdn.com/image/fetch/$s_!5zJq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.png 1272w, https://substackcdn.com/image/fetch/$s_!5zJq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c779f3b-535c-409e-97f3-3de7b36ed534_1434x3822.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That distinction matters. Under the old scoring engine, this image could easily have landed near a threshold boundary and become another opaque <code>0.62</code> vs <code>0.58</code> decision. Under the new architecture, the reasoning is visible, deterministic, and debuggable.</p><p>The biggest realization for me was this: the rule engine did not make the system <em>less intelligent</em>. It made the intelligence easier to operationalize.</p><p>The VLM still does the hard perceptual work &#8212; understanding composition, defects, subject prominence, and scene semantics. But the final decision layer is no longer probabilistic glue hidden behind one floating-point number. It is now an auditable policy system built on top of structured perception.</p><p>That separation ended up becoming the real architectural shift.</p>]]></content:encoded></item><item><title><![CDATA[Sonnet 4.6 Became My New Benchmark for Building an Infra-Heavy VLM Platform]]></title><description><![CDATA[A few months ago, I wrote about why I believed in a Haiku-first strategy: start with the cheapest and fastest model possible, then escalate only when the task genuinely becomes harder.]]></description><link>https://blog.phagyul.ai/p/sonnet-46-became-my-new-benchmark</link><guid isPermaLink="false">https://blog.phagyul.ai/p/sonnet-46-became-my-new-benchmark</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Mon, 11 May 2026 04:33:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OkJ0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_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_!OkJ0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OkJ0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!OkJ0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!OkJ0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!OkJ0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OkJ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb255522-dac5-4f82-bedf-427ae147535f_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;:1841548,&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://jagadeeshrampam.substack.com/i/197172333?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_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_!OkJ0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!OkJ0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!OkJ0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!OkJ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb255522-dac5-4f82-bedf-427ae147535f_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A few months ago, I wrote about why I believed in a <strong>Haiku-first strategy</strong>: start with the cheapest and fastest model possible, then escalate only when the task genuinely becomes harder. That idea still makes sense in principle.</p><p>But over the last few weeks, while working deeply on my <strong>VLM control plane / IQA platform</strong>, I realized something important:</p><p>The benchmark itself had changed. Probably, the models are sitting across 4.5, 4.6 and 4.7 versions and found it hard to compare (Haiku 4.5 vs Sonnet 4.6 vs Opus 4.7 1M), I meant, gap is widened!</p><p>For my current workload, <strong>Sonnet 4.6</strong> has become the model I now measure everything against.</p><p>Not because it is the smartest model Anthropic offers. Not because it is the cheapest. But because it currently sits at the most practical intersection of:</p><ul><li><p>reasoning quality</p></li><li><p>long-context reliability</p></li><li><p>infra-heavy debugging</p></li><li><p>ML-heavy orchestration</p></li><li><p>coding consistency</p></li><li><p>operational cost</p></li><li><p>and sustained throughput</p></li></ul><p>That combination matters a lot when you are building systems where the model is not simply &#8220;answering questions,&#8221; but continuously operating across orchestration, debugging, inferencing workflows, infrastructure decisions, and large-context reasoning.</p><h2>The original Haiku-first thesis still holds</h2><p>I still believe the core idea behind the earlier post was correct:</p><blockquote><p>Default to the cheapest model that can reliably complete the task.</p></blockquote><p>Anthropic&#8217;s pricing still makes that logic compelling.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7P9Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f73aeda-5d04-4521-8fa4-4dc387d79763_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7P9Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f73aeda-5d04-4521-8fa4-4dc387d79763_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!7P9Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f73aeda-5d04-4521-8fa4-4dc387d79763_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!7P9Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f73aeda-5d04-4521-8fa4-4dc387d79763_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!7P9Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f73aeda-5d04-4521-8fa4-4dc387d79763_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7P9Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f73aeda-5d04-4521-8fa4-4dc387d79763_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f73aeda-5d04-4521-8fa4-4dc387d79763_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;:1191306,&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://jagadeeshrampam.substack.com/i/197172333?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f73aeda-5d04-4521-8fa4-4dc387d79763_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_!7P9Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f73aeda-5d04-4521-8fa4-4dc387d79763_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!7P9Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f73aeda-5d04-4521-8fa4-4dc387d79763_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!7P9Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f73aeda-5d04-4521-8fa4-4dc387d79763_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!7P9Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f73aeda-5d04-4521-8fa4-4dc387d79763_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At scale, these economics matter enormously.</p><p>If you are running:</p><ul><li><p>agentic workflows</p></li><li><p>multi-step debugging</p></li><li><p>recursive orchestration</p></li><li><p>long-context analysis</p></li><li><p>or VLM-heavy pipelines</p></li></ul><p>&#8230;output-token costs become very real very quickly.</p><p>That is exactly why Haiku originally made so much sense.</p><h2>But my workload changed</h2><p>The problem is not that Haiku became &#8220;bad.&#8221; (also the gap across the models become evident due to version differences, Haiku is still at 4.5 with 200k context, whereas Sonnet and Opus at 4.6 and 4.7 with 1M Context)</p><p>The problem is that my workload evolved into something much more infra-heavy and ML-heavy.</p><p>The VLM control plane is no longer just lightweight orchestration or simple extraction work. The workflows now involve:</p><ul><li><p>larger context retention</p></li><li><p>deeper architectural reasoning</p></li><li><p>distributed infra debugging</p></li><li><p>inferencing orchestration</p></li><li><p>stateful workflows</p></li><li><p>code + infra + ML reasoning in the same session</p></li><li><p>long-running debugging loops</p></li><li><p>and increasingly large operational context</p></li></ul><p>This is where Sonnet 4.6 started to outperform Haiku dramatically in practical usefulness.</p><h2>Why Sonnet 4.6 became my benchmark</h2><p>Anthropic positions Sonnet 4.6 as the &#8220;best combination of intelligence, speed, and cost,&#8221; and honestly, that aligns closely with my own experience.</p><p>Sonnet 4.6 currently provides:</p><ul><li><p>1M-token context window</p></li><li><p>adaptive thinking</p></li><li><p>fast latency</p></li><li><p>significantly improved coding quality</p></li><li><p>stronger instruction following</p></li><li><p>much better long-context coherence</p></li></ul><p>Anthropic also mentioned that in Claude Code testing:</p><ul><li><p>users preferred Sonnet 4.6 over Sonnet 4.5 roughly 70% of the time</p></li><li><p>and even preferred it over Opus 4.5 in many workflows</p></li></ul><p>That honestly tracks with what I have seen.</p><p>Sonnet 4.6 feels much more stable in:</p><ul><li><p>sustained coding sessions</p></li><li><p>infra debugging</p></li><li><p>architectural iteration</p></li><li><p>and orchestration-heavy workflows</p></li></ul><p>without becoming economically painful the way Opus can become.</p><h2>Haiku 4.5: still useful, but no longer my default</h2><p>This is probably the most important nuance in the entire post.</p><p>Haiku 4.5 is still:</p><ul><li><p>extremely fast</p></li><li><p>extremely cheap</p></li><li><p>very capable for its price tier</p></li><li><p>excellent for parallelized execution</p></li><li><p>strong for extraction/tagging/routing</p></li><li><p>surprisingly good on coding benchmarks</p></li></ul><p>Anthropic reports:</p><ul><li><p>73.3% on SWE-bench Verified</p></li><li><p>40.21% / 41.75% on Terminal-Bench</p></li></ul><p>Those are genuinely strong results.</p><p>But benchmark scores alone do not determine operational usefulness.</p><p>In my own experience, Haiku 4.5 now feels degraded for my specific workload.</p><p>Not degraded universally.</p><p>Degraded for this class of infra-heavy, ML-heavy systems work.</p><p>What I started noticing:</p><ul><li><p>unnecessary follow-up questions</p></li><li><p>command thrashing locally</p></li><li><p>context drift during debugging</p></li><li><p>inefficient iteration loops</p></li><li><p>loss of architectural continuity</p></li><li><p>excessive operational churn</p></li></ul><p>Sometimes it felt like the model was spending more effort &#8220;doing activity&#8221; than actually advancing the task.</p><p>That was the turning point for me.</p><h2>Sonnet became the operational center of gravity</h2><p>So the strategy evolved.</p><p>I no longer think in terms of:</p><blockquote><p>&#8220;Haiku everywhere unless proven otherwise.&#8221;</p></blockquote><p>Now the stack looks more like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hvb8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2b0741-9b21-488d-bf34-c0b20da547f2_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hvb8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2b0741-9b21-488d-bf34-c0b20da547f2_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Hvb8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2b0741-9b21-488d-bf34-c0b20da547f2_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Hvb8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2b0741-9b21-488d-bf34-c0b20da547f2_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Hvb8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2b0741-9b21-488d-bf34-c0b20da547f2_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hvb8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2b0741-9b21-488d-bf34-c0b20da547f2_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d2b0741-9b21-488d-bf34-c0b20da547f2_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;:1723654,&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://jagadeeshrampam.substack.com/i/197172333?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2b0741-9b21-488d-bf34-c0b20da547f2_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_!Hvb8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2b0741-9b21-488d-bf34-c0b20da547f2_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Hvb8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2b0741-9b21-488d-bf34-c0b20da547f2_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Hvb8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2b0741-9b21-488d-bf34-c0b20da547f2_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Hvb8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2b0741-9b21-488d-bf34-c0b20da547f2_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This feels significantly more stable operationally.</p><h2>Where Opus still matters</h2><p>I still escalate aggressively to Opus for:</p><ul><li><p>architectural redesigns</p></li><li><p>distributed systems debugging</p></li><li><p>ML-heavy reasoning</p></li><li><p>difficult infra changes</p></li><li><p>large-context synthesis</p></li><li><p>high-stakes production decisions</p></li></ul><p>This is where the Opus models still separate themselves.</p><p>Anthropic&#8217;s published numbers are notable:</p><ul><li><p>Opus 4.6: 81.42% SWE-bench Verified</p></li><li><p>90.2% BigLaw Bench</p></li><li><p>strong long-context retrieval</p></li><li><p>better reasoning across hundreds of thousands of tokens</p></li></ul><p>Opus 4.7 improves further:</p><ul><li><p>13% improvement on a 93-task coding benchmark</p></li><li><p>solved 4 tasks neither Sonnet 4.6 nor Opus 4.6 could solve</p></li><li><p>3&#215; more production-task resolutions on Rakuten-SWE-Bench</p></li><li><p>21% fewer errors on OfficeQA Pro</p></li></ul><p>You can actually feel some of these improvements during long debugging sessions.</p><p>Especially:</p><ul><li><p>reduced context drift</p></li><li><p>better continuity</p></li><li><p>fewer reasoning collapses</p></li><li><p>stronger architectural consistency</p></li></ul><h2>Adaptive thinking changes the workflow significantly</h2><p>One under-discussed improvement is adaptive thinking.</p><p>Sonnet 4.6 supports it.<br>Opus 4.6 supports it.<br>Opus 4.7 uses it exclusively.</p><p>This matters because:</p><ul><li><p>the model dynamically allocates reasoning effort</p></li><li><p>easier tasks complete faster</p></li><li><p>harder tasks receive deeper reasoning automatically</p></li></ul><p>For infra-heavy workflows, this is a huge operational improvement.</p><p>Especially when the same session moves across:</p><ul><li><p>infra</p></li><li><p>application logic</p></li><li><p>orchestration</p></li><li><p>ML behavior</p></li><li><p>and debugging</p></li></ul><p>without explicit model switching every few minutes.</p><h2>Something interesting I noticed about Haiku switching automatically</h2><p>One thing I still need to investigate further:</p><p>I occasionally noticed Claude seemingly switching into Haiku behavior automatically during sessions.</p><p>I initially thought this happened only at the beginning of sessions, but after more usage I suspect it can happen mid-session as well.</p><p>Anthropic&#8217;s Claude Code docs actually support this possibility:</p><ul><li><p>model switching can happen dynamically</p></li><li><p>subagents can use Haiku automatically</p></li><li><p>planning/execution layers may use different models internally</p></li></ul><p>That would explain some of the behavior I observed:</p><ul><li><p>sudden increases in unnecessary questioning</p></li><li><p>lightweight command loops</p></li><li><p>simplified reasoning paths</p></li><li><p>or execution-style interactions appearing inside longer workflows</p></li></ul><p>I do not think this is inherently bad.<br>It actually makes sense architecturally.</p><p>But on infra-heavy workflows, it can sometimes become noticeable.</p><h2>The timing of this shift matters for me personally</h2><p>This transition is happening at an important moment.</p><p>I am currently preparing:</p><ul><li><p>dev + prod environment separation</p></li><li><p>launch readiness</p></li><li><p>infrastructure stabilization</p></li><li><p>ML inferencing orchestration</p></li><li><p>and final architectural refinement</p></li></ul><p>ahead of launch in roughly two weeks.</p><p>That timing matters because the recent Anthropic infrastructure and limit improvements are actually having a practical operational effect.</p><p>Anthropic recently:</p><ul><li><p>removed dedicated 1M-context rate limits for supported models</p></li><li><p>expanded higher-usage limits</p></li><li><p>improved capacity availability</p></li><li><p>and publicly discussed large-scale compute partnerships</p></li></ul><p>I do not want to get into commercial details.</p><p>But practically speaking:</p><ul><li><p>peak-hour friction has reduced significantly</p></li><li><p>longer debugging sessions feel more reliable</p></li><li><p>large-context sessions are more usable</p></li><li><p>and the additional headroom gives much more leverage for coding and debugging</p></li></ul><p>That matters a lot when your workflows involve:</p><ul><li><p>long-context infra debugging</p></li><li><p>VLM inferencing orchestration</p></li><li><p>architecture synthesis</p></li><li><p>and recursive engineering sessions</p></li></ul><h2>Bottom line</h2><p>My original Haiku-first idea still solid and would try working on enhancing further in future versions. (Plan is to leverage, multiple models across the frontier models, both models like Claude, codex and free versions like Gemma4, Qwen3.6 etc.)</p><p>But the center of gravity moved.</p><p>Today:</p><ul><li><p>Haiku 4.5 is my narrow execution layer</p></li><li><p>Sonnet 4.6 is my operational benchmark</p></li><li><p>Opus 4.6 is my deep reasoning escalation</p></li><li><p>and Opus 4.7 is the model I reserve for the hardest architectural and ML-heavy problems</p></li></ul><p>The real lesson is not:</p><blockquote><p>&#8220;Always use the smartest model.&#8221;</p></blockquote><p>And it is also not:</p><blockquote><p>&#8220;Always optimize for cost.&#8221;</p></blockquote><p>The real lesson is:</p><blockquote><p>The best model is the one that remains operationally useful under your actual workload.</p></blockquote><p>For my current stack, Sonnet 4.6 is now that benchmark.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TmO1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TmO1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!TmO1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!TmO1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!TmO1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TmO1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1699341,&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://jagadeeshrampam.substack.com/i/197172333?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.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_!TmO1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!TmO1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!TmO1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!TmO1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40acf8aa-fb4a-4298-b107-15b3508973f8_1774x887.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>References &amp; Further Reading</h2><h3>Anthropic Documentation &amp; Official Notes</h3><ol><li><p><a href="https://docs.anthropic.com/en/docs/about-claude/models?utm_source=chatgpt.com">Anthropic Claude Models Overview</a><br>Official model capabilities, context windows, adaptive thinking, latency tiers, and supported features for Haiku, Sonnet, and Opus.</p></li><li><p><a href="https://docs.anthropic.com/en/docs/about-claude/pricing?utm_source=chatgpt.com">Anthropic Pricing Documentation</a><br>Current pricing for Haiku 4.5, Sonnet 4.6, Opus 4.6, Opus 4.7, prompt caching, batch processing, and 1M-context usage.</p></li><li><p><a href="https://docs.anthropic.com/en/docs/claude-code/costs?utm_source=chatgpt.com">Claude Code &#8212; Costs &amp; Model Usage Patterns</a><br>Useful for understanding model switching, subagents, orchestration strategies, and practical guidance on when to use Haiku vs Sonnet vs Opus.</p></li></ol><h3>My Related Notes &amp; Blogs</h3><ol><li><p><a href="https://open.substack.com/pub/jagadeeshrampam/p/why-you-should-chose-haiku-as-default?r=775j6&amp;utm_medium=ios&amp;utm_source=chatgpt.com">Why You Should Choose Haiku as Default</a><br>My earlier thesis on why a Haiku-first strategy originally made sense economically and operationally.</p></li><li><p><a href="https://substack.com/@jagadeeshrampam/note/c-251941055?utm_source=chatgpt.com">Opus 4.7 &#8212; Initial Practical Observations</a><br>Early notes on context retention, hallucinations, workflow behavior, and operational observations while testing Opus 4.7.</p></li><li><p><a href="https://substack.com/@jagadeeshrampam?utm_source=chatgpt.com">Jagadeesh Rampam &#8212; Substack Archive</a><br>Broader writing on infra-heavy systems, AI engineering workflows, AWS architecture, ML systems, and long-context operational patterns.</p></li></ol><h3>Engineering &amp; Long-Context Best Practices</h3><ol><li><p><a href="https://platform.openai.com/docs/guides/prompt-engineering?utm_source=chatgpt.com">OpenAI &#8212; Prompt Engineering Best Practices</a><br>Strong reference for practical orchestration, structured prompting, decomposition, and reliability strategies across long workflows.</p></li><li><p><a href="https://aws.amazon.com/architecture/well-architected/?utm_source=chatgpt.com">AWS Well-Architected Framework</a><br>Essential reading for scalability, operational excellence, cost optimization, reliability, and architectural trade-offs in infra-heavy systems.</p></li><li><p><a href="https://sre.google/workbook/table-of-contents/?utm_source=chatgpt.com">Google SRE Workbook</a><br>One of the best operational references for debugging culture, monitoring, production reliability, incident management, and long-running system operations.</p></li></ol>]]></content:encoded></item><item><title><![CDATA[Parjanya v2.0: From Localhost Headaches to CloudFront+ALB Architecture]]></title><description><![CDATA[Executive Summary]]></description><link>https://blog.phagyul.ai/p/parjanya-v20-from-localhost-headaches</link><guid isPermaLink="false">https://blog.phagyul.ai/p/parjanya-v20-from-localhost-headaches</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Fri, 08 May 2026 05:50:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6Taf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Executive Summary</h2><p>When I developed the Parjanya v2.0 frontend on <strong>localhost</strong>, I ran into a series of issues that only became obvious later in deployment: CORS and preflight failures, mixed-content blocks, proxy quirks, and security leaks. To solve this and get closer to production-parity, I moved toward a <strong>server-to-server pattern</strong>: serving the SPA through Amazon CloudFront (with an S3/CloudFront static origin or Lambda@Edge) and serving the API through an Application Load Balancer (ALB) in a VPC. This gives me global caching, TLS/WAF protection, single-origin consistency that removes CORS pain, and lower egress costs.</p><p>In this post, I go deep into the localhost development pitfalls, CORS mechanics and misconfigurations, localhost vs cloud-hosted trade-offs, and the migration plan I would follow, along with code snippets, architecture diagrams, tables, and references.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6Taf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6Taf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!6Taf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!6Taf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!6Taf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6Taf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png" width="1456" height="799" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:799,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1699611,&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://jagadeeshrampam.substack.com/i/196863557?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.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_!6Taf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!6Taf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!6Taf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!6Taf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86b26c3b-4e88-4d83-8b3a-aa3b924165b4_1693x929.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>TL;DR</strong></h3><p>I originally wrote a primer of Parjanya v2.0&#8217;s move from localhost-first development to a production-shaped AWS architecture. This shorter repost is the key lesson: localhost is great for iteration, but it hides the boundaries that matter in production. <strong>CORS failures, presigned upload issues, and origin mismatch kept pointing to the same conclusion &#8212; the right model for modern cloud apps is server-to-server.</strong></p><p>Serve the frontend from CloudFront, route backend services through ALB, and let the backend control S3 access and tenant isolation. Production-shaped architecture is not a nice-to-have; it is the difference between a system that merely works locally and one that is actually built to scale.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:196307889,&quot;url&quot;:&quot;https://jagadeeshrampam.substack.com/p/from-localhost-friction-to-production&quot;,&quot;publication_id&quot;:7361555,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:null,&quot;title&quot;:&quot;From localhost friction to production-shaped architecture&quot;,&quot;truncated_body_text&quot;:&quot;Lessons from Parjanya v2.0 and the v5.4 architecture revision&quot;,&quot;date&quot;:&quot;2026-05-03T13:20:51.089Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;handle&quot;:&quot;jagadeeshrampam&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fbd24c4-e9ca-4d07-9320-d1c105eb38c8_1085x1085.jpeg&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;profile_set_up_at&quot;:&quot;2023-11-17T15:21:07.496Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-11-16T16:33:25.907Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:7512312,&quot;user_id&quot;:12091074,&quot;publication_id&quot;:7361555,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:7361555,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;subdomain&quot;:&quot;jagadeeshrampam&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Techie, explorer and photographer &quot;,&quot;logo_url&quot;:null,&quot;author_id&quot;:12091074,&quot;primary_user_id&quot;:12091074,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2025-12-23T11:09:54.434Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Jagadeesh Rampam&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[10845],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://jagadeeshrampam.substack.com/p/from-localhost-friction-to-production?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><span></span><span class="embedded-post-publication-name">Jagadeesh Rampam</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">From localhost friction to production-shaped architecture</div></div><div class="embedded-post-body">Lessons from Parjanya v2.0 and the v5.4 architecture revision&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 months ago &#183; Jagadeesh Rampam</div></a></div><h2>Background &amp; Context: Parjanya v2.0</h2><p>Parjanya v2.0 is a multi-tenant SaaS system where each tenant has its own storage and its own backend API. In development, the frontend runs on <code>localhost</code> while talking to AWS services for file uploads and API calls. In production, I intend to serve the SPA from a CDN (CloudFront) and the API behind an ALB.</p><p>That split introduced problems for me: local development <strong>deviated from production</strong> in origin and protocol, which led to CORS and mixed-content issues. The <strong>prod parity gap</strong> was wide. I often saw developers disable CORS checks or use wildcards on S3 buckets for convenience, but that broke strict production settings and weakened security. LocalStack even <strong>ignored S3 CORS rules</strong> in some versions, which meant bugs were not caught until deployment.</p><p>My setup here is that the Parjanya v2.0 backend is AWS-based (ECS/Fargate or EC2 behind an ALB, with S3, IAM, and related services), and that the frontend is a static app that can be hosted on S3 + CloudFront.</p><h2>Localhost Development Pitfalls</h2><p>Switching from <code>localhost</code> to AWS exposed several hidden traps for me. The main issues were:</p><h3>CORS Preflight Failures</h3><p>Browsers enforce the same-origin policy, so any cross-domain AJAX or <code>fetch</code> request triggers CORS checks. On <code>localhost</code>, I often used <code>Access-Control-Allow-Origin: *</code> or disabled checks (<code>DISABLE_CORS_CHECKS=1</code> with LocalStack), which masked issues. In production, the SPA origin, such as <code>https://&lt;cloudfront-id&gt;.cloudfront.net</code>, must exactly match S3 bucket CORS rules; otherwise S3 returns <code>403 Forbidden</code>.</p><p>For example, if only https://api.parjanya.com is in <strong>AllowedOrigins</strong>, a request from https://&lt;cloudfront-id&gt;.cloudfront.net gets blocked. The root cause is simple: dev used wildcards or localhost origins, while prod locked to the CDN domain.</p><h3>Origin Drift (Dev vs Production)</h3><p>A subtle pitfall is that the frontend origin differs in dev (http://localhost:3000) versus prod (CloudFront domain or a custom domain). Code that relies on <code>window.location.origin</code> or environment variables can compute the wrong URLs in production. This drift also means the correct CORS origin and cookie domains can be wrong in prod.</p><h3>Mixed-Content Blocks (HTTPS vs HTTP)</h3><p>Browsers on <code>https://</code> pages <strong>block any </strong><code>http://</code><strong> resources</strong>. On localhost, I might use plain HTTP without SSL, but once the SPA is on CloudFront over HTTPS, calls to an unsecured origin, or an S3 HTTP URL, are blocked as mixed content. My fix is to use HTTPS everywhere in AWS (ALB and CloudFront) and enforce redirect-to-HTTPS policies.</p><h3>Dev Proxy vs True Environment</h3><p>Many dev setups use a proxy, such as npm proxy settings or a simple NGINX layer, to avoid CORS. For example, NGINX on <code>localhost:8001</code> forwarding <code>/api/</code> to the real backend means the browser sees only one origin. That hides CORS, but only in development. In production, the CDN fronts the API with a different host unless I unify the route.</p><h3>IAM / Bucket Policy Surprises</h3><p>In dev, a single IAM role or default credential set can accidentally be used for all S3 uploads. That can hide cross-tenant access problems. In AWS, I need separate IAM roles and strict bucket policies per tenant. Bucket policies may also imply a deny if conditions are not met; for example, a presigned URL can 403 if the request is not over HTTPS or if the <code>Host</code> header does not match an allowed VPC condition. These issues usually do not appear until I hit real AWS.</p><h3>LocalStack / Emulator Mismatch</h3><p>Tools like LocalStack do not always fully honour CORS. In one case, even with CORS configured on the bucket, LocalStack ignored it, and <code>DISABLE_CORS_CHECKS=1</code> had no effect. That means a workflow that appears to work in dev can fail in prod. LocalStack may also default to HTTP endpoints instead of HTTPS, which introduces mixed-content issues.</p><h3>Credentials &amp; Cookies</h3><p>On <code>localhost</code>, cookies are often not sent cross-origin. If my app relies on cookie-based auth (<code>fetch</code> with <code>credentials: 'include'</code>), it can work locally but fail once domains differ. Browsers also forbid <code>Access-Control-Allow-Origin: *</code> when <code>withCredentials</code> is true, so production needs specific origins and <code>Access-Control-Allow-Credentials: true</code>.</p><h3>Presigned URL Expiry and Caching</h3><p>Some dev workflows use very short-lived presigned URLs or assume uploads happen instantly. In AWS, CloudFront may cache redirects by default unless configured otherwise, and ALB/CloudFront caches need invalidation after deploys. A misconfigured max-age or missing invalidation can make users see stale JS bundles. Presigned URLs can also expire during multi-part uploads if they are not refreshed.</p><h3>Other Environmental Mismatches</h3><p>Hardcoded environment values, such as <code>REACT_APP_API_URL=http://localhost:8080</code>, can cause build issues. Differences in Node versions, npm proxy settings, or TLS certificate trust on developer machines can also produce odd errors that I do not see in production.</p><p>Each of these issues comes from the same root problem: <strong>development on </strong><code>localhost</code><strong> is not the same as the deployed cloud environment</strong>. A major cause is the separate-origin problem. When the frontend and API live under different schemes or hosts, the browser&#8217;s SOP and CORS rules start to matter, and preflight requests fail if any method or header is not whitelisted.</p><h3>Pitfall Comparison Table</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FHE5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FHE5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!FHE5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!FHE5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!FHE5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FHE5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_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;:1479172,&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://jagadeeshrampam.substack.com/i/196863557?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_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_!FHE5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!FHE5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!FHE5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!FHE5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d7e7cdf-eb64-456c-a3fe-7ece78e6bffc_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>CORS Deep Dive: Browser Enforcement &amp; Misconfigurations</h2><p><strong>CORS</strong> (Cross-Origin Resource Sharing) is an HTTP header-based protocol that lets servers whitelist allowed origins for resource sharing. Browsers enforce it like this: when a script on https://frontend.com makes a cross-domain request, the browser adds an <code>Origin: https://frontend.com</code> header. If the request is simple, the browser checks the response for <code>Access-Control-Allow-Origin</code>. If it is missing or does not match, the browser blocks the response in JavaScript and shows a console error such as &#8220;CORS request blocked.&#8221;</p><p>For non-simple requests, like <code>PUT</code>, custom headers, or requests with <code>Content-Type: application/json</code>, browsers first send a <strong>preflight</strong> <code>OPTIONS</code> request with <code>Origin</code> and <code>Access-Control-Request-Method/Headers</code>. The server must return the correct <code>Access-Control-Allow-*</code> headers. If the preflight fails, the browser aborts without sending the real request.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GuU1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace1767-5c00-4eff-8b11-705893217253_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GuU1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace1767-5c00-4eff-8b11-705893217253_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!GuU1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace1767-5c00-4eff-8b11-705893217253_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!GuU1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace1767-5c00-4eff-8b11-705893217253_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!GuU1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace1767-5c00-4eff-8b11-705893217253_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GuU1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace1767-5c00-4eff-8b11-705893217253_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ace1767-5c00-4eff-8b11-705893217253_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;:1260707,&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://jagadeeshrampam.substack.com/i/196863557?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace1767-5c00-4eff-8b11-705893217253_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_!GuU1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace1767-5c00-4eff-8b11-705893217253_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!GuU1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace1767-5c00-4eff-8b11-705893217253_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!GuU1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace1767-5c00-4eff-8b11-705893217253_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!GuU1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ace1767-5c00-4eff-8b11-705893217253_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A missing or mismatched header causes CORS errors that are often hard to debug. Because the browser hides details for security, the console often gives only a generic block message, so I need to inspect the network tab or devtools to see the headers.</p><h3>Key Headers and Rules</h3><ul><li><p><strong>Access-Control-Allow-Origin:</strong> Specifies which origin or origins are allowed. It cannot be <code>*</code> if <code>Access-Control-Allow-Credentials: true</code> is required.</p></li><li><p><strong>Access-Control-Allow-Methods:</strong> Lists which HTTP methods the server accepts. If my SPA does a <code>PUT</code> but the server only allows <code>GET</code> and <code>POST</code>, preflight fails.</p></li><li><p><strong>Access-Control-Allow-Headers:</strong> Lists which custom request headers, such as <code>Authorization</code>, are allowed.</p></li><li><p><strong>Access-Control-Allow-Credentials:</strong> If <code>true</code>, cookies or credentials can be sent. Browsers do not allow <code>*</code> origin when this is true.</p></li></ul><h3>Common Misconfigurations</h3><ul><li><p><strong>Wrong Origin Whitelist:</strong> If the SPA is served at https://app.example.com but S3 CORS only includes http://localhost:3000, production will fail.</p></li><li><p><strong>Forgetting OPTIONS Handling:</strong> Some backends only handle GET/POST and ignore OPTIONS. Preflight then returns 403 or 404.</p></li><li><p><strong>Missing Response Headers:</strong> The resource may respond, but if it does not include CORS headers, the browser blocks it. CloudFront response headers or edge functions can help.</p></li><li><p><strong>Credentials &amp; Wildcards:</strong> Enabling <code>Access-Control-Allow-Origin: *</code> globally and then using credentials will fail.</p></li><li><p><strong>Case or Slash Mismatch:</strong> Origins are exact strings, so protocol, port, and trailing slash matter.</p></li><li><p><strong>Tooling Oversights:</strong> Some clients send headers that trigger preflight. JSON and <code>Authorization</code> almost always do.</p></li></ul><p>By understanding CORS this way, I can configure AWS correctly. For example, on S3 I can apply a bucket CORS configuration like this:</p><pre><code>&lt;CORSConfiguration&gt;
 &lt;CORSRule&gt;
   &lt;AllowedOrigin&gt;https://d8sqejhsq49zo.cloudfront.net&lt;/AllowedOrigin&gt;
   &lt;AllowedMethod&gt;GET&lt;/AllowedMethod&gt;
   &lt;AllowedMethod&gt;PUT&lt;/AllowedMethod&gt;
   &lt;AllowedHeader&gt;*&lt;/AllowedHeader&gt;
   &lt;ExposeHeader&gt;ETag&lt;/ExposeHeader&gt;
 &lt;/CORSRule&gt;
&lt;/CORSConfiguration&gt;</code></pre><p>In practice, I whitelist the specific CloudFront or app domain in <code>AllowedOrigins</code> and include every method I need.</p><p>CloudFront also offers features that help with CORS. I can use a <strong>Response Header Policy</strong> that automatically adds <code>Access-Control-Allow-Origin</code>, or I can use a CloudFront Function to dynamically echo the <code>Origin</code>. The simplest pattern is still to use CloudFront + ALB with the same origin, so CORS becomes mostly unnecessary.</p><h2>CloudFront + ALB Architecture: Pros &amp; Cons</h2><p>Moving the frontend to CloudFront and the API behind an ALB gives me a lot of benefits, but it also adds complexity.</p><h3>What I Gain</h3><ul><li><p><strong>Global Performance &amp; Latency:</strong> CloudFront has a global edge network, and static assets can be cached at the edge. That reduces TTFB and improves performance for distant clients.</p></li><li><p><strong>Security &amp; Compliance:</strong> CloudFront gives me DDoS protection and a clean place to attach AWS WAF. I can also isolate the ALB inside a private VPC and allow access only from CloudFront.</p></li><li><p><strong>Single-Origin Domain:</strong> By serving the SPA from CloudFront and routing API calls through the same CloudFront distribution or domain, I remove most CORS issues entirely.</p></li><li><p><strong>Cost Optimisation:</strong> CloudFront can reduce outbound bandwidth costs by caching content closer to users and lowering load on the ALB and backend.</p></li></ul><h3>What I Trade Off</h3><ul><li><p><strong>Architecture Complexity:</strong> I now manage CloudFront, Lambda@Edge or CloudFront Functions if needed, the ALB, Route 53, ACM certificates, and deployment automation.</p></li><li><p><strong>Debug and Deploy Overhead:</strong> Changes are slower to test because I need deploys and cache invalidations.</p></li><li><p><strong>Cache Invalidation Hassles:</strong> SPA releases can leave stale files behind unless I use hashed filenames or invalidate the right paths.</p></li><li><p><strong>Session &amp; Auth Handling:</strong> Cookie-based auth needs careful CloudFront forwarding rules and secure cookie settings.</p></li><li><p><strong>Extra Hop Latency:</strong> There is an extra network hop, but cache hits usually outweigh that cost.</p></li><li><p><strong>CDN Cost:</strong> CloudFront and related services have a cost, although caching and egress savings can offset it at scale.</p></li></ul><h3>High-Level Architecture Diagram</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JJfm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JJfm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!JJfm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!JJfm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!JJfm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JJfm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.png" width="1456" height="799" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:799,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1237547,&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://jagadeeshrampam.substack.com/i/196863557?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.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_!JJfm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!JJfm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!JJfm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!JJfm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F499ec7e8-2994-4c2e-ae19-c7b0556be56c_1693x929.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is the architecture I want: the browser hits CloudFront, static content comes from S3 through CloudFront, and dynamic requests hit the ALB. Both S3 and ALB stay secured, and only CloudFront acts as the public entry point.</p><h2>Migration Strategy &amp; Checklist</h2><h3>Step 1: Preparation &amp; Planning</h3><p>I first audit the current deployment: all domains, SSL certificates, DNS records, WAF rules, IAM roles, and the existing frontend and API endpoints. Then I define the target state: a single CloudFront distribution, for example with an alternate domain like <code>app.example.com</code>, fronting an internal ALB and S3 origin. I also estimate the work and categorise risk so I can separate simple changes from business-critical flows.</p><h3>Step 2: Provision Infrastructure</h3><ul><li><p><strong>Create the CloudFront distribution.</strong> If I use Terraform, I need a <code>custom_origin_config</code> for the ALB origin so it is not treated like an S3 origin.</p></li><li><p><strong>Configure cache behavior.</strong> I point routes to the ALB origin for API calls and to S3 for static routes. I forward the <code>Origin</code> header and the relevant CORS headers so the origin sees them.</p></li><li><p><strong>Set up TLS certificates.</strong> I use ACM for the frontend domain and attach the certificate to CloudFront. The ALB also needs HTTPS.</p></li><li><p><strong>Restrict ALB access.</strong> I create a security group that allows inbound 443 only from CloudFront IP ranges or a trusted origin header setup.</p></li><li><p><strong>Configure S3 CORS and bucket policy.</strong> I allow my frontend domain and enforce HTTPS via <code>aws:SecureTransport</code>.</p></li><li><p><strong>Update CI/CD.</strong> After uploading SPA artifacts to S3, I trigger a CloudFront invalidation for the changed paths.</p></li></ul><h3>Step 3: Testing &amp; Validation</h3><ul><li><p><strong>Smoke tests in staging:</strong> I point a test domain to the new distribution and verify that static assets, API calls, and auth flows work.</p></li><li><p><strong>Performance and security verification:</strong> I check cache hit ratios, enable WAF metrics if used, and confirm that direct access to the old ALB is blocked.</p></li><li><p><strong>Staged DNS cutover:</strong> I move traffic gradually using Route 53 weighted records or a similar approach.</p></li></ul><h3>Step 4: Full Cutover and Rollback Plan</h3><p>Once I am confident, I point the production app domain to CloudFront. I keep rollback simple by preserving the old config and having a direct path back to the ALB if needed. Because the ALB is restricted to CloudFront traffic, rollback needs to be planned carefully.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6mZS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6mZS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.png 424w, https://substackcdn.com/image/fetch/$s_!6mZS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.png 848w, https://substackcdn.com/image/fetch/$s_!6mZS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.png 1272w, https://substackcdn.com/image/fetch/$s_!6mZS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6mZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.png" width="1456" height="776" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:776,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:945589,&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://jagadeeshrampam.substack.com/i/196863557?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.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_!6mZS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.png 424w, https://substackcdn.com/image/fetch/$s_!6mZS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.png 848w, https://substackcdn.com/image/fetch/$s_!6mZS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.png 1272w, https://substackcdn.com/image/fetch/$s_!6mZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfc1f913-0291-466c-a53d-56d0fe4fb7f4_1718x916.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Code &amp; Config Snippets</h2><h3>Amazon S3 Bucket CORS (example JSON)</h3><pre><code>{
  "CORSRules": [
    {
      "AllowedOrigins": ["https://your.frontend.domain"],
      "AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
      "AllowedHeaders": ["*"],
      "ExposeHeaders": ["ETag", "x-amz-version-id"],
      "MaxAgeSeconds": 3600
    }
  ]
}</code></pre><h3>Terraform: AWS CloudFront Distribution (ALB origin)</h3><pre><code>resource "aws_cloudfront_distribution" "cdn" {
  origin {
    domain_name = aws_lb.api.dns_name
    origin_id   = "api-origin"
    custom_origin_config {
      http_port              = 80
      https_port             = 443
      origin_protocol_policy = "https-only"
      origin_ssl_protocols   = ["TLSv1.2"]
    }
  }

  default_cache_behavior {
    target_origin_id         = "api-origin"
    viewer_protocol_policy   = "redirect-to-https"
    forwarded_values {
      headers = ["Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers"]
      cookies { forward = "all" }
      query_string = true
    }
    allowed_methods = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
    cached_methods  = ["GET", "HEAD"]
  }

  viewer_certificate {
    acm_certificate_arn      = aws_acm_certificate.certificate.arn
    ssl_support_method       = "sni-only"
    minimum_protocol_version = "TLSv1.2_2021"
  }
}</code></pre><h3>NGINX Reverse Proxy (Dev Example)</h3><pre><code>server {
  listen      8001;
  server_name localhost;
  location / {
    proxy_pass http://127.0.0.1:3000;
  }
  location /api/ {
    proxy_pass http://127.0.0.1:8080/;
  }
}</code></pre><h3>CloudFront Function (or Lambda@Edge) to Add CORS</h3><pre><code>async function handler(event) {
  var request = event.request;
  var response = event.response;
  if (request.headers.origin &amp;&amp; !response.headers['access-control-allow-origin']) {
    response.headers['access-control-allow-origin'] = { value: request.headers.origin.value };
  }
  return response;
}</code></pre><h3>Sample IAM Policy (Bucket HTTPS Enforce)</h3><pre><code>{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "RequireTLS",
    "Effect": "Deny",
    "Principal": "*",
    "Action": "s3:*",
    "Resource": ["arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*"],
    "Condition": {"Bool": {"aws:SecureTransport": "false"}}
  }]
}</code></pre><h2>Localhost vs Cloud-Hosted Frontend</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OKOO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cb1a507-c631-4375-9f35-4044cd692f75_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OKOO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cb1a507-c631-4375-9f35-4044cd692f75_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!OKOO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cb1a507-c631-4375-9f35-4044cd692f75_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!OKOO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cb1a507-c631-4375-9f35-4044cd692f75_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!OKOO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cb1a507-c631-4375-9f35-4044cd692f75_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OKOO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cb1a507-c631-4375-9f35-4044cd692f75_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7cb1a507-c631-4375-9f35-4044cd692f75_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;:1442317,&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://jagadeeshrampam.substack.com/i/196863557?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cb1a507-c631-4375-9f35-4044cd692f75_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_!OKOO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cb1a507-c631-4375-9f35-4044cd692f75_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!OKOO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cb1a507-c631-4375-9f35-4044cd692f75_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!OKOO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cb1a507-c631-4375-9f35-4044cd692f75_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!OKOO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cb1a507-c631-4375-9f35-4044cd692f75_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Monitoring, Logging &amp; Testing Tools</h2><p>Once the system is live, I want to rely on:</p><ul><li><p><strong>Metrics &amp; Logs:</strong> CloudWatch metrics for CloudFront and ALB, plus access logs.</p></li><li><p><strong>Real-User Monitoring:</strong> CloudWatch RUM for client-side metrics and errors.</p></li><li><p><strong>Tracing:</strong> AWS X-Ray if the backend is complex.</p></li><li><p><strong>Error Tracking:</strong> A frontend JS error reporter such as Sentry.</p></li><li><p><strong>Testing Tools:</strong> Postman or <code>curl</code> with an <code>Origin</code> header for CORS validation, and load tools like Apache Bench or JMeter for performance testing.</p></li></ul><h2>Community Insights &amp; References</h2><h2>AWS Official Guidance</h2><ul><li><p><a href="https://aws.amazon.com/blogs/networking-and-content-delivery/optimizing-application-performance-the-strategic-benefits-of-combining-amazon-cloudfront-with-application-load-balancers/?utm_source=chatgpt.com">Optimizing application performance: CloudFront + ALB strategic benefits</a><br>Covers CloudFront in front of ALB, performance improvements, origin protection, and migration considerations.</p></li><li><p><a href="https://aws.amazon.com/blogs/aws/introducing-amazon-cloudfront-vpc-origins-enhanced-security-and-streamlined-operations-for-your-applications/?utm_source=chatgpt.com">Introducing Amazon CloudFront VPC Origins</a><br>Explains private VPC origins, CloudFront-to-private-ALB architecture, and stronger origin isolation.</p></li><li><p><a href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html?utm_source=chatgpt.com">Restrict access to Application Load Balancers from CloudFront only</a><br>AWS guidance for protecting ALB origins using CloudFront custom headers and origin restrictions.</p></li><li><p><a href="https://aws.amazon.com/blogs/networking-and-content-delivery/cors-configuration-through-amazon-cloudfront/?utm_source=chatgpt.com">CORS configuration through Amazon CloudFront</a><br>Deep dive into forwarding CORS headers, OPTIONS caching, and CloudFront cache/origin request policies.</p></li><li><p><a href="https://aws.amazon.com/blogs/networking-and-content-delivery/accelerate-protect-and-make-dynamic-workloads-delivery-cost-efficient-with-amazon-cloudfront/?utm_source=chatgpt.com">Accelerate and protect dynamic workloads with CloudFront</a><br>Focuses on performance, persistent connections, and origin offload for dynamic applications.</p></li></ul><div><hr></div><h2>MDN Documentation</h2><ul><li><p><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS?utm_source=chatgpt.com">MDN &#8212; Cross-Origin Resource Sharing (CORS) Guide</a><br>The foundational browser-side explanation of CORS, preflight requests, and browser enforcement.</p></li><li><p><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS/Errors?utm_source=chatgpt.com">MDN &#8212; CORS Errors Guide</a><br>Excellent debugging reference for interpreting browser CORS failures.</p></li><li><p><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Access-Control-Allow-Origin?utm_source=chatgpt.com">MDN &#8212; Access-Control-Allow-Origin Header</a><br>Detailed explanation of the most important CORS response header.</p></li><li><p><a href="https://developer.mozilla.org/en-US/docs/Web/Security/Practical_implementation_guides/CORS?utm_source=chatgpt.com">MDN &#8212; Practical CORS Configuration Guide</a><br>Security-oriented implementation guidance for configuring CORS correctly.</p></li><li><p><a href="https://developer.mozilla.org/en-US/docs/Glossary/CORS?utm_source=chatgpt.com">MDN &#8212; CORS Glossary</a><br>Concise overview of same-origin policy and cross-origin access.</p></li></ul><div><hr></div><h2>AWS Documentation</h2><ul><li><p><a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html?utm_source=chatgpt.com">Amazon S3 &#8212; Using CORS</a><br>Official S3 documentation for configuring and understanding CORS.</p></li><li><p><a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors-troubleshooting.html?utm_source=chatgpt.com">Amazon S3 &#8212; Troubleshooting CORS</a><br>Extremely useful for diagnosing 403s, AllowedOrigins mismatches, and missing methods.</p></li><li><p><a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html?utm_source=chatgpt.com">Amazon S3 &#8212; Configuring CORS Examples</a><br>Shows JSON examples for S3 bucket CORS policies.</p></li><li><p><a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html?utm_source=chatgpt.com">Amazon S3 &#8212; Elements of a CORS Configuration</a><br>Detailed breakdown of AllowedOrigins, AllowedMethods, AllowedHeaders, etc.</p></li><li><p><a href="https://repost.aws/knowledge-center/no-access-control-allow-origin-error?utm_source=chatgpt.com">AWS re:Post &#8212; Resolve &#8220;No Access-Control-Allow-Origin&#8221; errors in CloudFront</a><br>Useful troubleshooting walkthrough for CloudFront + CORS setups.</p></li><li><p><a href="https://repost.aws/knowledge-center/s3-configure-cors?utm_source=chatgpt.com">AWS re:Post &#8212; Configure and confirm CORS in Amazon S3</a><br>Practical debugging examples using curl and OPTIONS preflight checks.</p></li></ul><div><hr></div><h2>Community Q&amp;A</h2><ul><li><p><a href="https://stackoverflow.com/questions/17533888/s3-access-control-allow-origin-header?utm_source=chatgpt.com">Stack Overflow &#8212; S3 Access-Control-Allow-Origin Header discussion</a><br>One of the classic threads on S3 CORS response handling.</p></li><li><p><a href="https://stackoverflow.com/questions/17570100/s3-not-returning-access-control-allow-origin-headers?utm_source=chatgpt.com">Stack Overflow &#8212; S3 not returning Access-Control-Allow-Origin headers</a><br>Useful troubleshooting thread for bucket/object-level CORS confusion.</p></li><li><p><a href="https://expressjs.com/en/resources/middleware/cors.html?utm_source=chatgpt.com">Express.js CORS Middleware Docs</a><br>Good explanation of browser-enforced CORS vs server-side behavior.</p></li><li><p><a href="https://repost.aws/questions/QUzn5efm4tSjiJOO7b0so0gQ/getting-cors-error-even-when-the-cors-policy-is-set-to-allow-all-origins?utm_source=chatgpt.com">AWS re:Post &#8212; Intermittent CORS errors even with Allow-Origin configured</a><br>Helpful for understanding cache and header propagation edge cases.</p></li></ul><div><hr></div><h2>Case Study Blogs &amp; Practical Guides</h2><ul><li><p><a href="https://www.stormit.cloud/blog/cloudfront-distribution-for-amazon-ec2-alb/?utm_source=chatgpt.com">StormIT &#8212; CloudFront Distribution for EC2 &amp; ALB</a><br>Practical CloudFront + ALB deployment walkthrough.</p></li><li><p><a href="https://dev.to/aws-builders/using-aws-cloudfront-to-enhance-the-performance-security-availability-of-your-application-3i26?utm_source=chatgpt.com">Using AWS CloudFront to improve performance, security &amp; availability</a><br>Covers caching, origin groups, availability, and performance patterns.</p></li><li><p><a href="https://medium.com/%40Adekola_Olawale/handling-cross-origin-resource-sharing-cors-issues-in-s3-3ea209b45926?utm_source=chatgpt.com">Handling CORS Issues in Amazon S3</a><br>Community-written debugging guide with real-world examples.</p></li><li><p><a href="https://til.simonwillison.net/aws/s3-cors?utm_source=chatgpt.com">Adding a CORS Policy to an S3 Bucket</a><br>Lightweight and practical S3 bucket CORS reference.</p></li><li><p><a href="https://aws.amazon.com/blogs/networking-and-content-delivery/prepare-and-run-performance-tests-for-amazon-cloudfront-with-real-user-monitoring/?utm_source=chatgpt.com">Prepare and run performance tests for CloudFront using RUM</a><br>Great reference for validating CloudFront improvements in production.</p></li></ul><h2>Closing Thought</h2><p>What I learned is simple: localhost is great for speed, but it is not production. If I want fewer surprises, fewer CORS headaches, and better security, I need to design the frontend and backend like they will live in production from the beginning.</p>]]></content:encoded></item><item><title><![CDATA[From localhost friction to production-shaped architecture]]></title><description><![CDATA[Lessons from Parjanya v2.0 and the v5.4 architecture revision]]></description><link>https://blog.phagyul.ai/p/from-localhost-friction-to-production</link><guid isPermaLink="false">https://blog.phagyul.ai/p/from-localhost-friction-to-production</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Sun, 03 May 2026 13:20:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!cfp7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_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_!cfp7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cfp7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!cfp7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!cfp7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!cfp7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cfp7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11907347-42b7-499a-b390-f5d655628b58_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;:2126825,&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://jagadeeshrampam.substack.com/i/196307889?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_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_!cfp7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!cfp7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!cfp7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!cfp7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11907347-42b7-499a-b390-f5d655628b58_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Lessons from Parjanya v2.0 and the v5.4 architecture revision</h3><p>I never treated localhost as the target architecture. It was simply the default starting point for local development, as it is for most full-stack systems. But as I built Parjanya v2.0, I kept running into a recurring class of failures: CORS errors, origin mismatch, presigned upload friction, and the widening gap between development-time assumptions and production-time behaviour. That experience forced me to step back and re-evaluate the system from first principles. What emerged was not a localhost fix, but a stronger production-shaped model: <strong>server-to-server architecture for cloud-based full-stack applications and distributed systems.</strong></p><h2>Why localhost stopped being enough</h2><p>Local development is useful because it is fast. But speed can hide <strong>architecture debt.</strong></p><p>In Parjanya v2.0, the real problem was not that localhost was broken. The problem was that localhost encouraged a development loop that was too far removed from the actual production trust boundary. The browser, S3, IAM, and backend services each enforce different rules, and local development often smooths those rules away just enough to create false confidence. Then the system reaches the real deployment path and the hidden assumptions come apart.</p><p>That became especially clear with browser-based uploads. A local setup may appear functional, but the moment the frontend starts speaking directly to tenant-specific buckets in S3, the browser becomes an active participant in the security model. The result is not just a technical inconvenience; it is a signal that the architecture itself needs to be shaped more deliberately.</p><h2>The first real signal: CORS was exposing the architecture gap</h2><p>CORS was one of the clearest signs that the local development experience was drifting away from the real system.</p><p>In theory, CORS is straightforward. In practice, it is one of the fastest ways to reveal that the frontend and backend are too loosely coupled. In Parjanya, browser uploads to S3 were not talking to a generic bucket. They were talking to tenant-scoped storage with strict policy boundaries. That meant every origin, method, and header mattered. A local proxy or permissive dev configuration might make the request succeed temporarily, but that success did not mean the architecture was correct. It only meant the browser had not yet been forced to tell the truth.</p><p>The architectural implication was obvious: if the browser has to fight the security model just to upload a file, the development workflow is revealing a deeper mismatch. In my case, that mismatch was not merely about CORS syntax. It was about the location of trust.</p><h2>What Parjanya v2.0 architecture v5.4 actually changed</h2><p>Architecture v5.4 is an architecture revision inside Parjanya v2.0, not a separate product. That revision was shaped by one principle: move trust out of the browser and into the backend.</p><p>The S3 architecture notes show the core design clearly: one bucket per tenant, IAM-scoped permissions, bucket policies, presigned URL generation in the backend, and lifecycle rules for cost control. The model is intentionally infrastructure-enforced. Tenant isolation is not left to frontend conventions or prefix hygiene. It is built into the storage boundary itself.</p><p>That design changes the system in a fundamental way. Instead of letting the frontend improvise access, the backend becomes the authority that validates identity, determines tenant ownership, constructs the object key, and issues a time-bound signed capability. The browser no longer owns authorization. It simply executes what the backend has already allowed.</p><h2>Why server-to-server architecture made more sense</h2><p>Once I looked at the problem that way, the answer became much clearer.</p><p>For a cloud-native application, especially a multi-tenant one, the frontend should not be the place where trust decisions live. The frontend should be delivered through a stable edge layer, the backend should own policy and identity, and object storage should be accessed through signed backend-issued capabilities. That is why I started favouring a server-to-server model for real production systems.</p><p>In practice, that means serving the frontend from CloudFront, exposing backend services through ALB, and letting the backend own S3 access through presigned URLs. The browser becomes a client, not a policy engine. The backend becomes the control point. The trust boundary becomes explicit. And the deployment path starts to look like the real system instead of a local approximation.</p><p>That shift also made debugging easier. When a request fails, there are fewer places to guess. Is it a policy issue? A bucket issue? A signature issue? A CORS issue? A routing issue? With a server-to-server design, the failure surface becomes narrower and more legible.</p><h2>Multi-tenant storage is an infrastructure problem, not just an application problem</h2><p>One of the strongest lessons from Parjanya&#8217;s architecture revision was that multi-tenant storage cannot be treated as an application afterthought.</p><p>The architecture notes show a per-tenant bucket model with explicit role and bucket policy enforcement. That is the right direction because it reduces ambiguity. Tenant isolation should not depend entirely on code discipline or naming conventions; it should be enforced by the infrastructure boundary itself.</p><p>This matters because multi-tenant systems fail in subtle ways when storage is shared too casually. A shared bucket can work, but it increases the burden on prefix logic, object ownership rules, and application-layer checks. A per-tenant bucket model is cleaner to reason about and easier to audit. It also aligns better with the way the rest of the Parjanya stack is already designed: backend validation, signed upload paths, explicit bucket policies, and lifecycle management.</p><h2>Presigned URLs are capability tokens, not shortcuts</h2><p>Presigned URLs were another major lesson.</p><p>A presigned URL is not just a convenience feature. It is a capability token that allows a very specific action for a very specific scope and time window. That makes it a very strong fit for Parjanya because the backend can validate the request first and then issue a constrained upload path. The browser does not need broad credentials. It only needs the signed permission to perform the exact operation the backend allowed.</p><p>That is the right security model for a SaaS system with tenant isolation. It reduces exposure, tightens the trust boundary, and lets the backend remain the source of truth for who can upload what and where. It also makes the system far easier to evolve because the upload flow is now a controlled protocol, not a loose browser-side improvisation.</p><h2>Production-shaped development is the real goal</h2><p>The biggest shift in my thinking was this: the goal is not to make localhost feel like production forever. The goal is to make local development reveal the same architectural boundaries that production will enforce.</p><p>That means treating origin boundaries, identity boundaries, and policy boundaries as first-class concerns from the beginning. It means avoiding development shortcuts that erase those boundaries too early. It means designing the system so that local development is still useful, but not misleading. And it means accepting that some friction is not a bug in the workflow &#8212; it is the architecture trying to tell you something.</p><p>In Parjanya v2.0, that lesson showed up everywhere: in CORS behavior, in presigned URL flows, in per-tenant bucket design, and in the decision to move toward a cleaner CloudFront + ALB + backend-controlled storage path. The architecture revision in v5.4 was not just an optimization. It was a correction toward a more honest production model.</p><h2>What I would tell another engineering team</h2><p>If I were explaining this to another team building a cloud-native product, I would say this:</p><p>localhost is fine for iteration, but it should not define the architecture. For distributed systems, especially multi-tenant SaaS, the real system lives in the boundaries: frontend delivery, backend authority, object storage policy, and signed capabilities. If those boundaries are blurred during development, the application will pay for it later in debugging time, security risk, and operational complexity.</p><h4>The better pattern is production-shaped from the start:</h4><blockquote><p>the frontend should be served from CloudFront, backend services should sit behind ALB, the backend should generate presigned URLs, and S3 access should be governed by infrastructure-enforced tenant isolation. That design is cleaner, more secure, and much closer to how real cloud applications behave in production.</p></blockquote><h2>Closing thought</h2><p>Parjanya v2.0 taught me that architecture is often revealed through friction.</p><p>CORS failures were not just browser noise. They were evidence that trust boundaries needed to be sharper. Presigned URLs were not just an implementation detail. They were the correct way to move capability into the backend. Per-tenant buckets were not just a storage choice. They were the cleanest way to enforce isolation. And localhost, while useful, was never the architecture &#8212; only the starting point.</p><p>The end result is simple: I now think in terms of production-shaped systems, not localhost-shaped workflows. For me, that is the difference between a prototype that merely works and a system that is actually ready to scale.</p><div><hr></div><h1>Good catch &#8212; here&#8217;s a <strong>clean, copy-paste ready References section with actual links</strong> (kept high-signal and aligned to your architecture themes).</h1><div><hr></div><h1>&#128218; References &amp; Further Reading</h1><h2>&#9729;&#65039; AWS (Core to this architecture)</h2><ul><li><p><strong>Multi-tenant S3 design patterns (must read)</strong><br>AWS Storage Blog<br><a href="https://aws.amazon.com/blogs/storage/design-patterns-for-multi-tenant-access-control-on-amazon-s3/">https://aws.amazon.com/blogs/storage/design-patterns-for-multi-tenant-access-control-on-amazon-s3/</a></p></li><li><p><strong>Dynamic routing with CloudFront (multi-tenant edge patterns)</strong><br>AWS Architecture Blog<br><a href="https://aws.amazon.com/blogs/architecture/dynamic-request-routing-in-multi-tenant-systems-with-amazon-cloudfront/">https://aws.amazon.com/blogs/architecture/dynamic-request-routing-in-multi-tenant-systems-with-amazon-cloudfront/</a></p></li><li><p><strong>CloudFront + origin patterns (edge &#8594; backend)</strong><br>AWS Docs<br><a href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html">https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html</a></p></li><li><p><strong>Restricting ALB access via CloudFront (edge-controlled backend)</strong><br>AWS Docs<br><a href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html">https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html</a></p></li><li><p><strong>Presigned URLs (backend-controlled access model)</strong><br>AWS Docs<br><a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html">https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html</a></p></li><li><p><strong>CORS troubleshooting (why browser uploads fail)</strong><br>AWS Docs<br><a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors-troubleshooting.html">https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors-troubleshooting.html</a></p></li><li><p><strong>AWS Well-Architected Framework</strong><br><a href="https://aws.amazon.com/architecture/well-architected/">https://aws.amazon.com/architecture/well-architected/</a></p></li></ul><blockquote><p>These patterns are consistent across modern cloud-native systems:<br>move trust to the backend, enforce isolation at the infrastructure layer, and design for production boundaries early.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[The Hidden Runtime Failure Behind Claude’s Recent Regression]]></title><description><![CDATA[For a few weeks, Claude Code got noticeably worse.]]></description><link>https://blog.phagyul.ai/p/the-hidden-runtime-failure-behind</link><guid isPermaLink="false">https://blog.phagyul.ai/p/the-hidden-runtime-failure-behind</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Mon, 27 Apr 2026 02:52:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!r0tu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For a few weeks, Claude Code got noticeably worse.</p><p>It wasn&#8217;t subtle.</p><p>It read less code.<br>It reasoned less deeply.<br>It stopped early.</p><p>And yet&#8212;nothing &#8220;official&#8221; had changed.</p><p>When Anthropic finally published their postmortem, they called it a set of bugs.</p><p>After digging through the data and my own usage, I don&#8217;t think that tells the full story.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r0tu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r0tu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png 424w, https://substackcdn.com/image/fetch/$s_!r0tu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png 848w, https://substackcdn.com/image/fetch/$s_!r0tu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png 1272w, https://substackcdn.com/image/fetch/$s_!r0tu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r0tu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png" width="1181" height="1331" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/020773eb-a170-41bb-b51d-800469f87520_1181x1331.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1331,&quot;width&quot;:1181,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1554389,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://jagadeeshrampam.substack.com/i/195574958?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!r0tu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png 424w, https://substackcdn.com/image/fetch/$s_!r0tu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png 848w, https://substackcdn.com/image/fetch/$s_!r0tu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png 1272w, https://substackcdn.com/image/fetch/$s_!r0tu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F020773eb-a170-41bb-b51d-800469f87520_1181x1331.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1>Adaptive Thinking Gone Wrong</h1><h2>Why Claude&#8217;s Silence Broke My Trust</h2><p>For months, Claude Code with Opus 4.6 was the backbone of my engineering workflow.</p><p>With Opus 4.7&#8212;and the rise of &#8220;adaptive thinking&#8221;&#8212;that same assistant began to feel unreliable, opaque, and, most concerning of all, quietly downgraded.</p><p>Anthropic&#8217;s April 23 postmortem confirmed something many of us already felt: <strong>Claude Code </strong><em><strong>did</strong></em><strong> get worse for weeks.</strong></p><p><a href="https://www.anthropic.com/engineering/april-23-postmortem">https://www.anthropic.com/engineering/april-23-postmortem</a></p><p>But the explanation&#8212;and the framing&#8212;left me with a deeper concern:</p><blockquote><p><strong>This wasn&#8217;t just a bug. It was a runtime failure of adaptive thinking.</strong></p></blockquote><p>This is a first-person account of what changed, what the data shows, and why this moment broke trust for me&#8212;even though I&#8217;m still not walking away.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:195255558,&quot;url&quot;:&quot;https://jagadeeshrampam.substack.com/p/when-adaptive-thinking-goes-off-the&quot;,&quot;publication_id&quot;:7361555,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:null,&quot;title&quot;:&quot;When Adaptive Thinking Goes Off the Rails&quot;,&quot;truncated_body_text&quot;:&quot;Three weeks ago,&quot;,&quot;date&quot;:&quot;2026-04-23T16:36:46.650Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;handle&quot;:&quot;jagadeeshrampam&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fbd24c4-e9ca-4d07-9320-d1c105eb38c8_1085x1085.jpeg&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;profile_set_up_at&quot;:&quot;2023-11-17T15:21:07.496Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-11-16T16:33:25.907Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:7512312,&quot;user_id&quot;:12091074,&quot;publication_id&quot;:7361555,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:7361555,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;subdomain&quot;:&quot;jagadeeshrampam&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Techie, explorer and photographer &quot;,&quot;logo_url&quot;:null,&quot;author_id&quot;:12091074,&quot;primary_user_id&quot;:12091074,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2025-12-23T11:09:54.434Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Jagadeesh Rampam&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[10845],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://jagadeeshrampam.substack.com/p/when-adaptive-thinking-goes-off-the?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><span></span><span class="embedded-post-publication-name">Jagadeesh Rampam</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">When Adaptive Thinking Goes Off the Rails</div></div><div class="embedded-post-body">Three weeks ago&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 months ago &#183; Jagadeesh Rampam</div></a></div><div><hr></div><h2>1. When It Worked: Opus 4.6 as a Force Multiplier</h2><p>My earlier experience with Opus 4.6 was very interesting.</p><p>Claude Code behaved like a senior engineer embedded in my workflow:</p><ul><li><p>It read deeply before editing</p></li><li><p>It maintained context across long sessions</p></li><li><p>It handled multi-step refactors with caution and coherence</p></li></ul><p>Under the hood, this was already powered by <strong>adaptive thinking</strong>&#8212;a system that dynamically allocates reasoning effort per task.</p><p>But here&#8217;s the key:</p><blockquote><p>It worked quietly and reliably.</p></blockquote><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:193306186,&quot;url&quot;:&quot;https://jagadeeshrampam.substack.com/p/building-with-opus-46&quot;,&quot;publication_id&quot;:7361555,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:null,&quot;title&quot;:&quot;Building with Opus 4.6&quot;,&quot;truncated_body_text&quot;:&quot;Parjanya 2.0 &#8212; an AI-powered photography curation platform that combines CLIP-IQA for real-time scoring with Qwen3-VL-8B for deep visual understanding.&quot;,&quot;date&quot;:&quot;2026-04-06T05:22:32.370Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;handle&quot;:&quot;jagadeeshrampam&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fbd24c4-e9ca-4d07-9320-d1c105eb38c8_1085x1085.jpeg&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;profile_set_up_at&quot;:&quot;2023-11-17T15:21:07.496Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-11-16T16:33:25.907Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:7512312,&quot;user_id&quot;:12091074,&quot;publication_id&quot;:7361555,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:7361555,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;subdomain&quot;:&quot;jagadeeshrampam&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Techie, explorer and photographer &quot;,&quot;logo_url&quot;:null,&quot;author_id&quot;:12091074,&quot;primary_user_id&quot;:12091074,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2025-12-23T11:09:54.434Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Jagadeesh Rampam&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[10845],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://jagadeeshrampam.substack.com/p/building-with-opus-46?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><span></span><span class="embedded-post-publication-name">Jagadeesh Rampam</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Building with Opus 4.6</div></div><div class="embedded-post-body">Parjanya 2.0 &#8212; an AI-powered photography curation platform that combines CLIP-IQA for real-time scoring with Qwen3-VL-8B for deep visual understanding&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">4 months ago &#183; Jagadeesh Rampam</div></a></div><div><hr></div><h2>2. When It Broke: Opus 4.7 Regression</h2><p>With Opus 4.7, the experience flipped.</p><p>What I observed:</p><ul><li><p>Shallower reasoning</p></li><li><p>More hallucinated structure</p></li><li><p>Premature stopping or avoidance</p></li><li><p>Worse tool usage</p></li><li><p>Increased repetition</p></li></ul><p>All while adaptive thinking was being positioned as the <strong>primary reasoning mode</strong>.</p><p>At the same time:</p><ul><li><p>Usage limits tightened</p></li><li><p>Sessions became less predictable</p></li></ul><p>From a user perspective:</p><blockquote><p><strong>It felt like a silent downgrade.</strong></p></blockquote><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:195255558,&quot;url&quot;:&quot;https://jagadeeshrampam.substack.com/p/when-adaptive-thinking-goes-off-the&quot;,&quot;publication_id&quot;:7361555,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:null,&quot;title&quot;:&quot;When Adaptive Thinking Goes Off the Rails&quot;,&quot;truncated_body_text&quot;:&quot;Three weeks ago,&quot;,&quot;date&quot;:&quot;2026-04-23T16:36:46.650Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;handle&quot;:&quot;jagadeeshrampam&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fbd24c4-e9ca-4d07-9320-d1c105eb38c8_1085x1085.jpeg&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;profile_set_up_at&quot;:&quot;2023-11-17T15:21:07.496Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-11-16T16:33:25.907Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:7512312,&quot;user_id&quot;:12091074,&quot;publication_id&quot;:7361555,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:7361555,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;subdomain&quot;:&quot;jagadeeshrampam&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Techie, explorer and photographer &quot;,&quot;logo_url&quot;:null,&quot;author_id&quot;:12091074,&quot;primary_user_id&quot;:12091074,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2025-12-23T11:09:54.434Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Jagadeesh Rampam&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[10845],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://jagadeeshrampam.substack.com/p/when-adaptive-thinking-goes-off-the?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><span></span><span class="embedded-post-publication-name">Jagadeesh Rampam</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">When Adaptive Thinking Goes Off the Rails</div></div><div class="embedded-post-body">Three weeks ago&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 months ago &#183; Jagadeesh Rampam</div></a></div><div><hr></div><h2>3. Anthropic&#8217;s Explanation</h2><p><a href="https://www.anthropic.com/engineering/april-23-postmortem">https://www.anthropic.com/engineering/april-23-postmortem</a></p><p>Anthropic attributes the regression to three issues:</p><h3>Effort downgrade (March 4)</h3><p>Default reasoning dropped from <code>high</code> &#8594; <code>medium</code></p><h3>Thinking cache bug (March 26)</h3><p>Thinking history cleared after idle periods</p><h3>Verbosity constraint (April 16)</h3><p>Artificial limits reduced output quality</p><p>All three are now reverted.</p><p>Their position:</p><blockquote><p><strong>The model wasn&#8217;t degraded&#8212;only the application layer was.</strong></p></blockquote><div><hr></div><h2>4. What the Data Shows</h2><p>Independent telemetry and analysis revealed:</p><ul><li><p>Files read before editing: <strong>6.6 &#8594; 2.0</strong></p></li><li><p>Thinking length: <strong>~2200 &#8594; ~600 characters</strong></p></li><li><p>Stop/avoidance behaviors: <strong>spiked significantly</strong></p></li></ul><p>These are not isolated anomalies.</p><p>They indicate systemic changes in:</p><ul><li><p>Reasoning depth</p></li><li><p>Context retention</p></li><li><p>Decision consistency</p></li></ul><div><hr></div><h2>5. The Real Problem: A Runtime Failure</h2><p>All three issues converge on one layer:</p><blockquote><p><strong>Adaptive thinking at runtime</strong></p></blockquote><ul><li><p>Lower effort &#8594; less reasoning</p></li><li><p>Cache bug &#8594; lost reasoning</p></li><li><p>Verbosity cap &#8594; suppressed reasoning</p></li></ul><p>This creates a cascade:</p><blockquote><p><strong>Adaptive Thinking Failure Chain</strong></p></blockquote><div><hr></div><h2>6. Why the Framing Matters</h2><p>Anthropic&#8217;s framing:</p><blockquote><p>&#8220;A few issues, now fixed&#8221;</p></blockquote><p>User reality:</p><blockquote><p>&#8220;Core reasoning behaviour degraded for weeks&#8221;</p></blockquote><p>That gap is where trust erodes.</p><p>Because for power users:</p><blockquote><p>The runtime layer <em>is the product</em></p></blockquote><div><hr></div><h2>7. Bad Timing Made It Worse</h2><p>This regression coincided with:</p><ul><li><p>Tighter usage limits</p></li><li><p>Pricing pressure toward higher tiers</p></li><li><p>Source-code leak incident</p></li><li><p>Mythos leak</p></li></ul><p>Together:</p><blockquote><p><strong>Reduced capability + reduced transparency + increased constraints</strong></p></blockquote><div><hr></div><h2>8. Why I&#8217;m Still Using Claude</h2><p>I&#8217;m not leaving.</p><p>Because when it works:</p><blockquote><p>It&#8217;s still one of the best engineering copilots available.</p></blockquote><p>To Anthropic&#8217;s credit:</p><ul><li><p>Detailed postmortem</p></li><li><p>Fixes implemented</p></li><li><p>Public acknowledgment</p></li></ul><p>But:</p><blockquote><p>Benefit of the doubt &#8800; restored trust</p></blockquote><div><hr></div><h2>9. What Needs to Change</h2><p>To rebuild trust, adaptive thinking must become:</p><h3>Observable</h3><p>Expose reasoning allocation</p><h3>Controllable</h3><p>Allow effort overrides</p><h3>Stable</h3><p>Test long-session behavior</p><h3>Transparent</h3><p>Treat runtime changes like model updates</p><div><hr></div><h2>Final Thought</h2><p>Adaptive thinking isn&#8217;t just a feature.</p><blockquote><p><strong>It is the system between the user and the model.</strong></p></blockquote><p>When that system changes silently:</p><ul><li><p>Behaviour shifts</p></li><li><p>Expectations break</p></li><li><p>Trust erodes</p></li></ul><p>I&#8217;ll keep using Claude.</p><p>But not as a black box anymore. In fact, exploring the options like Orchestrators like a battle-tested Cursor code and in future LiteLLMProxy along with Claude, gpt-4o, Gemma4:31b and Qwen-3.6 and/or Kimi k2.6</p><div><hr></div><p>This is the simplest way to understand what actually broke:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_mlG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb6837-44fb-47a3-a6f8-0d41ca4f8827_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_mlG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb6837-44fb-47a3-a6f8-0d41ca4f8827_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!_mlG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb6837-44fb-47a3-a6f8-0d41ca4f8827_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!_mlG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb6837-44fb-47a3-a6f8-0d41ca4f8827_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!_mlG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb6837-44fb-47a3-a6f8-0d41ca4f8827_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_mlG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb6837-44fb-47a3-a6f8-0d41ca4f8827_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54bb6837-44fb-47a3-a6f8-0d41ca4f8827_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;:1609377,&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://jagadeeshrampam.substack.com/i/195574958?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb6837-44fb-47a3-a6f8-0d41ca4f8827_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_!_mlG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb6837-44fb-47a3-a6f8-0d41ca4f8827_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!_mlG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb6837-44fb-47a3-a6f8-0d41ca4f8827_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!_mlG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb6837-44fb-47a3-a6f8-0d41ca4f8827_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!_mlG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54bb6837-44fb-47a3-a6f8-0d41ca4f8827_1536x1024.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>What the Diagram Shows</h3><p>At first glance, these look like three unrelated issues:</p><ul><li><p>Effort downgrade</p></li><li><p>Cache bug</p></li><li><p>Verbosity constraint</p></li></ul><p>But they all hit the same underlying system:</p><blockquote><p><strong>How the model thinks, remembers, and explains</strong></p></blockquote><div><hr></div><h3>The Chain Reaction</h3><pre><code>Effort &#8595; &#8594; Thinking &#8595;  
Cache Bug &#8594; Memory &#8595;  
Verbosity Cap &#8594; Visibility &#8595;  

= System Behavior Collapse</code></pre><p>Each step compounds the next:</p><ul><li><p>Less effort &#8594; <strong>shallower reasoning</strong></p></li><li><p>Broken cache &#8594; <strong>lost continuity</strong></p></li><li><p>Lower verbosity &#8594; <strong>hidden reasoning</strong></p></li></ul><p>Individually manageable.<br>Together:</p><blockquote><p><strong>A collapse in perceived intelligence</strong></p></blockquote><div><hr></div><h3>Why This Matters</h3><p>From a system design perspective, this is the real insight:</p><blockquote><p><strong>Reasoning quality is not just a model property.<br>It is an emergent property of the runtime.</strong></p></blockquote><p>That runtime includes:</p><ul><li><p>Effort allocation (adaptive thinking)</p></li><li><p>Memory persistence (thinking cache)</p></li><li><p>Output constraints (verbosity rules)</p></li></ul><p>When all three degrade&#8212;even slightly&#8212;the system doesn&#8217;t fail gracefully.</p><blockquote><p>It fails <em>behaviourally</em>.</p></blockquote><div><hr></div><h3>The Key Takeaway</h3><blockquote><p><strong>The model didn&#8217;t get worse.<br>The system deciding how it thinks did.</strong></p></blockquote><p>And that distinction is exactly why this episode matters.</p><div><hr></div><h1>References</h1><ol><li><p>Claude Code Regression Update: Anthropic&#8217;s April 23 Postmortem Changes the Story</p><div id="youtube2-1bB66RYaMNI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;1bB66RYaMNI&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/1bB66RYaMNI?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div></li><li><p>Clients Were Right: Anthropic Admits Claude Code Got Dumber<br><a href="https://kingy.ai/ai/clients-were-right-anthropic-admits-claude-code-got-dumber-not-claude-post-mortem/">https://kingy.ai/ai/clients-were-right-anthropic-admits-claude-code-got-dumber-not-claude-post-mortem/</a></p></li><li><p>An update on recent Claude Code quality reports<br><a href="https://www.anthropic.com/engineering/april-23-postmortem">https://www.anthropic.com/engineering/april-23-postmortem</a></p></li><li><p>Deep News &#8212; Superlinear Academy<br><a href="https://yage.ai/share/">https://yage.ai/share/</a></p></li><li><p>The Claude Code Nerf: An Invisible, Unilateral Downgrade<br><a href="https://yage.ai/share/claude-code-runtime-regression-en-20260407.html">https://yage.ai/share/claude-code-runtime-regression-en-20260407.html</a></p></li><li><p>Adaptive thinking - Amazon Bedrock<br><a href="https://docs.aws.amazon.com/bedrock/latest/userguide/claude-messages-adaptive-thinking.html">https://docs.aws.amazon.com/bedrock/latest/userguide/claude-messages-adaptive-thinking.html</a></p></li><li><p>Claude Opus 4.6 adaptive reasoning<br><a href="https://www.infoq.com/news/2026/03/opus-4-6-context-compaction/">https://www.infoq.com/news/2026/03/opus-4-6-context-compaction/</a></p></li><li><p>Adaptive thinking - Claude API Docs<br><a href="https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking">https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking</a></p></li><li><p>Opus 4.7 overview<br><a href="https://artificialanalysis.ai/articles/opus-4-7-everything-you-need-to-know">https://artificialanalysis.ai/articles/opus-4-7-everything-you-need-to-know</a></p></li><li><p>Did Anthropic Secretly Nerf Claude?<br><a href="https://thedroidguy.com/anthropic-nerf-claude-quality-degradation-explained-1273110">https://thedroidguy.com/anthropic-nerf-claude-quality-degradation-explained-1273110</a></p></li><li><p>Anthropic source code leak (NDTV)<br><a href="https://www.ndtv.com/feature/2026-just-got-crazy-internet-erupts-after-anthropics-claude-source-code-leak-shakes-ai-industry-11294628">https://www.ndtv.com/feature/2026-just-got-crazy-internet-erupts-after-anthropics-claude-source-code-leak-shakes-ai-industry-11294628</a></p></li><li><p>Anthropic leaked its own Claude source code (Axios)<br><a href="https://www.axios.com/2026/03/31/anthropic-leaked-source-code-ai">https://www.axios.com/2026/03/31/anthropic-leaked-source-code-ai</a></p></li><li><p>Claude Code leak analysis (Dev.to)<br><a href="https://dev.to/varshithvhegde/the-great-claude-code-leak-of-2026-accident-incompetence-or-the-best-pr-stunt-in-ai-history-3igm">https://dev.to/varshithvhegde/the-great-claude-code-leak-of-2026-accident-incompetence-or-the-best-pr-stunt-in-ai-history-3igm</a></p></li><li><p>Claude Mythos leak <a href="https://absolutelyagentic.com/p/claude-mythos-the-ai-model-anthropic-won-t-release-to-the-public">https://absolutelyagentic.com/p/claude-mythos-the-ai-model-anthropic-won-t-release-to-the-public</a></p></li><li><p>Mythos leak coverage (Fortune)<br><a href="https://fortune.com/2026/03/26/anthropic-says-testing-mythos-powerful-new-ai-model-after-data-leak-reveals-its-existence-step-change-in-capabilities/">https://fortune.com/2026/03/26/anthropic-says-testing-mythos-powerful-new-ai-model-after-data-leak-reveals-its-existence-step-change-in-capabilities/</a></p></li><li><p>Mythos summary (Mashable)<br><a href="https://mashable.com/article/claude-mythos-ai-model-anthropic-leak">https://mashable.com/article/claude-mythos-ai-model-anthropic-leak</a></p></li><li><p>Anthropic second security lapse (Fortune)<br><a href="https://fortune.com/2026/03/31/anthropic-source-code-claude-code-data-leak-second-security-lapse-days-after-accidentally-revealing-mythos/">https://fortune.com/2026/03/31/anthropic-source-code-claude-code-data-leak-second-security-lapse-days-after-accidentally-revealing-mythos/</a></p></li><li><p>Reddit discussion<br><a href="https://www.reddit.com/r/ClaudeAI/comments/1s9ai45/anthropic_leaked_512000_lines_of_claude_code/">https://www.reddit.com/r/ClaudeAI/comments/1s9ai45/anthropic_leaked_512000_lines_of_claude_code/</a></p></li><li><p>Alignment Forum discussion<br><a href="https://www.alignmentforum.org/posts/K8FxfK9GmJfiAhgcT/anthropic-repeatedly-accidentally-trained-against-the-cot">https://www.alignmentforum.org/posts/K8FxfK9GmJfiAhgcT/anthropic-repeatedly-accidentally-trained-against-the-cot</a></p></li><li><p>Claude Code leak breakdown<br><a href="https://www.felamity.com/post/claude-code-leak-2026-what-happened-and-why-it-matters-for-ai-security">https://www.felamity.com/post/claude-code-leak-2026-what-happened-and-why-it-matters-for-ai-security</a></p></li><li><p>Mythos video</p></li></ol><div id="youtube2-cogxQtFd1Ag" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;cogxQtFd1Ag&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/cogxQtFd1Ag?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><ol><li><p>Japanese coverage of quality regression<br><a href="https://innovatopia.jp/ai/ai-news/98588/">https://innovatopia.jp/ai/ai-news/98588/</a></p></li></ol>]]></content:encoded></item><item><title><![CDATA[When Adaptive Thinking Goes Off the Rails]]></title><description><![CDATA[Three weeks ago,]]></description><link>https://blog.phagyul.ai/p/when-adaptive-thinking-goes-off-the</link><guid isPermaLink="false">https://blog.phagyul.ai/p/when-adaptive-thinking-goes-off-the</guid><dc:creator><![CDATA[Phagyul AI Systems Pvt Ltd]]></dc:creator><pubDate>Thu, 23 Apr 2026 16:36:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5HdD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_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_!5HdD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5HdD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!5HdD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!5HdD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!5HdD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5HdD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e46c7cc0-48b1-4f36-a19c-afe1d146443e_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;:1801409,&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://jagadeeshrampam.substack.com/i/195255558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_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_!5HdD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!5HdD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!5HdD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!5HdD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe46c7cc0-48b1-4f36-a19c-afe1d146443e_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Three weeks ago,</h2><p>I wrote about how Claude Opus 4.6&#8212;with its 1M context window&#8212;felt like a genuine breakthrough for my workflow:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:193306186,&quot;url&quot;:&quot;https://jagadeeshrampam.substack.com/p/building-with-opus-46&quot;,&quot;publication_id&quot;:7361555,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:null,&quot;title&quot;:&quot;Building with Opus 4.6&quot;,&quot;truncated_body_text&quot;:&quot;Parjanya 2.0 &#8212; an AI-powered photography curation platform that combines CLIP-IQA for real-time scoring with Qwen3-VL-8B for deep visual understanding.&quot;,&quot;date&quot;:&quot;2026-04-06T05:22:32.370Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:12091074,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;handle&quot;:&quot;jagadeeshrampam&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fbd24c4-e9ca-4d07-9320-d1c105eb38c8_1085x1085.jpeg&quot;,&quot;bio&quot;:&quot;Building rooted intelligence &#129504; &#127909; &#127793;&quot;,&quot;profile_set_up_at&quot;:&quot;2023-11-17T15:21:07.496Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-11-16T16:33:25.907Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:7512312,&quot;user_id&quot;:12091074,&quot;publication_id&quot;:7361555,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:7361555,&quot;name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;subdomain&quot;:&quot;jagadeeshrampam&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Techie, explorer and photographer &quot;,&quot;logo_url&quot;:null,&quot;author_id&quot;:12091074,&quot;primary_user_id&quot;:12091074,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2025-12-23T11:09:54.434Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Jagadeesh Rampam&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[10845],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://jagadeeshrampam.substack.com/p/building-with-opus-46?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><span></span><span class="embedded-post-publication-name">Jagadeesh Rampam</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Building with Opus 4.6</div></div><div class="embedded-post-body">Parjanya 2.0 &#8212; an AI-powered photography curation platform that combines CLIP-IQA for real-time scoring with Qwen3-VL-8B for deep visual understanding&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">4 months ago &#183; Jagadeesh Rampam</div></a></div><p>That post built on a broader recommendation I had been advocating: start with lighter models and escalate only when needed. I wrote about that approach here:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:183758575,&quot;url&quot;:&quot;https://jagadeeshrampam.substack.com/p/why-you-should-chose-haiku-as-default&quot;,&quot;publication_id&quot;:7361555,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Jagadeesh Rampam&quot;,&quot;publication_logo_url&quot;:null,&quot;title&quot;:&quot;Why you should chose Haiku as Default model and escalate if needed&quot;,&quot;truncated_body_text&quot;:&quot;EXECUTIVE SUMMARY&quot;,&quot;date&quot;:&quot;2026-01-07T06:43:52.861Z&quot;,&quot;like_count&quot;:2,&quot;comment_count&quot;:0,&quot;bylines&quot;:[],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://jagadeeshrampam.substack.com/p/why-you-should-chose-haiku-as-default?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><span></span><span class="embedded-post-publication-name">Jagadeesh Rampam</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Why you should chose Haiku as Default model and escalate if needed</div></div><div class="embedded-post-body">EXECUTIVE SUMMARY&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">7 months ago &#183; 2 likes</div></a></div><p>That strategy worked when the model ladder felt consistent. But in practice today, the gap between versions has widened enough that this escalation model is far less reliable.</p><div class="pullquote"><p><strong>Haiku (4.5), Sonnet (4.6/4.7), and Opus (4.6 vs 4.7) don&#8217;t feel like clean steps in a progression anymore&#8212;they behave like entirely different tools with different failure modes.</strong></p></div><p>In my workflow&#8212;infra-heavy, ML-heavy, multi-repo&#8212;the bulk of the system was actually built by Opus 4.6 within 3&#8211;4 days. What followed were incremental improvements:</p><ul><li><p>Prompt updates for stricter IQA</p></li><li><p>Docker build refinements</p></li><li><p>CLIP-IQA deprecation</p></li><li><p>Graviton migrations</p></li><li><p>SageMaker removal &#8594; EC2 migration (Spot vs on-demand)</p></li><li><p>Handling infra quirks (e.g., g4dn.xlarge unavailability in ap-south-1)</p></li></ul><p>These are not &#8220;<strong>greenfield</strong>&#8221; tasks&#8212;they depend heavily on <strong>accurate recall of current system state</strong> and few of them were encountered earlier and have documented in the architecture review (23+ sections, Appendix of 6 detailed sections) with enough context and thorough deep dive and always handy at the root folder of workspace.</p><div><hr></div><h4>Since moving to Opus 4.7, that&#8217;s exactly where things started breaking.</h4><p>For the past 18 days, I&#8217;ve been dealing with usage limits, context drift, and behavior changes I never asked for and now hit weekly limits to be completely locked out for the next 5 days &#8212;enough to pause my subscription and evaluate alternatives.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3uoA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d654d31-7065-418f-915e-08950a58f58f_1004x634.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3uoA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d654d31-7065-418f-915e-08950a58f58f_1004x634.png 424w, https://substackcdn.com/image/fetch/$s_!3uoA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d654d31-7065-418f-915e-08950a58f58f_1004x634.png 848w, https://substackcdn.com/image/fetch/$s_!3uoA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d654d31-7065-418f-915e-08950a58f58f_1004x634.png 1272w, https://substackcdn.com/image/fetch/$s_!3uoA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d654d31-7065-418f-915e-08950a58f58f_1004x634.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3uoA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d654d31-7065-418f-915e-08950a58f58f_1004x634.png" width="1004" height="634" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d654d31-7065-418f-915e-08950a58f58f_1004x634.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:634,&quot;width&quot;:1004,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76488,&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://jagadeeshrampam.substack.com/i/195255558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d654d31-7065-418f-915e-08950a58f58f_1004x634.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_!3uoA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d654d31-7065-418f-915e-08950a58f58f_1004x634.png 424w, https://substackcdn.com/image/fetch/$s_!3uoA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d654d31-7065-418f-915e-08950a58f58f_1004x634.png 848w, https://substackcdn.com/image/fetch/$s_!3uoA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d654d31-7065-418f-915e-08950a58f58f_1004x634.png 1272w, https://substackcdn.com/image/fetch/$s_!3uoA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d654d31-7065-418f-915e-08950a58f58f_1004x634.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>you can see from my usage chart, I tried leveraging different models based on the usecase/component/task and complexity</p><div><hr></div><p>Going into the details&#8230;</p><h2>The 4.6 Honeymoon: 1M Context Without the Drama</h2><p>My setup with Opus 4.6:</p><ul><li><p>Multiple repos (ML, backend, frontend, shared libs, infra)</p></li><li><p>Plan &#8594; execute workflows</p></li><li><p>Heavy context, but usually &lt;200k tokens</p></li></ul><p>And yet, it behaved like a disciplined senior engineer:</p><ul><li><p>Stayed within plan boundaries</p></li><li><p>Maintained architectural coherence</p></li><li><p>Delivered steady, compounding progress</p></li></ul><p>It hit the <em>long-context sweet spot</em>: large memory, without instability.</p><div><hr></div><h2>What Changed with Opus 4.7</h2><p>With adaptive thinking enabled by default, the behaviour profile shifted significantly.</p><h3>1. One-Prompt Runs That Burn an Hour</h3><ul><li><p>Prompts run excessively long</p></li><li><p>Usage limits hit faster</p></li><li><p>Thinking increases, output doesn&#8217;t</p></li></ul><p>It feels like over-analysis replacing execution.</p><div><hr></div><h3>2. Context Bloat and Losing the &#8220;Current State&#8221;</h3><p>In long sessions:</p><ul><li><p>Old decisions override new ones</p></li><li><p>Recent corrections get ignored</p></li><li><p>Model behaves as if it&#8217;s working on stale code</p></li></ul><p>In a poly-repo system, this is critical failure&#8212;not inconvenience.</p><div><hr></div><h3>3. Hallucinated Behaviour (Real Production Risk)</h3><p>The most concerning issue: <strong>unsolicited behaviour changes</strong></p><h4>Example 1: Image Rotation</h4><ul><li><p>Final testing stage</p></li><li><p>Behaviour already agreed</p></li><li><p>Suddenly: vertical images rotate</p></li></ul><p>No prompt. No plan. No instruction.</p><p>Instead of reverting, the model:</p><ul><li><p>Expanded the problem</p></li><li><p>Designed rotation logic</p></li><li><p>Introduced new edge cases</p></li></ul><p>Even explicit instructions like</p><blockquote><p>&#8220;Never rotate images&#8221;<br>didn&#8217;t cleanly undo prior drift.</p></blockquote><div><hr></div><h4>Example 2: Hardcoded Aspect Ratio Logic (Half an Hour Later)</h4><p>A second example happened shortly after, while fixing the same issue.</p><p>The model proposed:</p><ul><li><p>Portrait &#8594; 1366&#215;2048</p></li><li><p>Landscape &#8594; 2048&#215;1366</p></li><li><p>&#8220;No rotation logic, just libraw defaults&#8221;</p></li></ul><p>This sounds reasonable&#8212;but it&#8217;s wrong.</p><p>The real requirement is <strong>aspect-ratio-aware handling</strong>, because RAW files can be:</p><ul><li><p>16:9</p></li><li><p>4:5</p></li><li><p>1:1</p></li><li><p>others</p></li></ul><p>Even though my current dataset (1000+ images) includes 1:1, the model ignored that variability and jumped to a hardcoded assumption.</p><p>These are &#8220;small&#8221; issues&#8212;but in production, they are <strong>trust breakers</strong>:</p><ul><li><p>They introduce silent regressions</p></li><li><p>They require manual detection</p></li><li><p>They increase review overhead before launch</p></li></ul><p>And also not sure, how many of these issues (small/high/max) are persists, including IQA logic which is a ship-blocker, infra changes (burns my pocket!) etc.</p><div><hr></div><h2>This Isn&#8217;t a Single-Model Issue</h2><p>One important detail: this is not happening in isolation.</p><p>I&#8217;ve actively used:</p><ul><li><p>Opus 4.6</p></li><li><p>Opus 4.7</p></li><li><p>Sonnet 4.6</p></li><li><p>Haiku 4.5</p></li></ul><p>The attached usage snapshot reflects this multi-model workflow.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pBrl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pBrl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.png 424w, https://substackcdn.com/image/fetch/$s_!pBrl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.png 848w, https://substackcdn.com/image/fetch/$s_!pBrl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.png 1272w, https://substackcdn.com/image/fetch/$s_!pBrl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pBrl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.png" width="1004" height="634" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:634,&quot;width&quot;:1004,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76488,&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://jagadeeshrampam.substack.com/i/195255558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.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_!pBrl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.png 424w, https://substackcdn.com/image/fetch/$s_!pBrl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.png 848w, https://substackcdn.com/image/fetch/$s_!pBrl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.png 1272w, https://substackcdn.com/image/fetch/$s_!pBrl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F549d7f3c-b201-4969-927c-97f82fc305e7_1004x634.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That actually makes the issue more concerning&#8212;because:</p><ul><li><p>The regression isn&#8217;t tied to a single model</p></li><li><p>Switching models doesn&#8217;t reliably stabilize behaviour</p></li><li><p>The &#8220;escalation strategy&#8221; becomes inconsistent</p></li></ul><div><hr></div><h2>What Others Are Seeing</h2><p>Across blogs, Reddit, and developer communities:</p><ul><li><p>Prompt regressions vs 4.6</p></li><li><p>Higher sensitivity to phrasing</p></li><li><p>Increased hallucinations in coding workflows</p></li><li><p>Faster quota exhaustion</p></li></ul><p>There <em>are</em> positive reports&#8212;but the split is real.</p><div><hr></div><p>Here are <strong>7 solid, diverse sources</strong> (Reddit, GitHub, news, blogs, HN) that reinforce the exact patterns you&#8217;re describing&#8212;context drift, adaptive loops, hallucinations, and regression concerns. I&#8217;ve curated them so you can directly reference them in your appendix or when sharing with Anthropic.</p><h2>&#128308; 1. Reddit &#8211; Developer discussion on adaptive thinking behavior</h2><ul><li><p><a href="https://www.reddit.com/r/ClaudeCode/comments/1so8p5h/claude_opus_47_changed_how_thinking_works_and_its/?utm_source=chatgpt.com">Claude Opus 4.7 Changed How Thinking Works (Reddit)</a></p></li></ul><p>Key takeaway:</p><ul><li><p>Developers discuss how <strong>reasoning flow changed</strong>, including issues around tracking context and understanding where reasoning goes wrong.</p></li></ul><div><hr></div><h2>&#128308; 2. GitHub Issue &#8211; Adaptive thinking inconsistency</h2><ul><li><p><a href="https://github.com/pydantic/pydantic-ai/issues/5153?utm_source=chatgpt.com">Claude 4.7 Opus thinking inconsistency issue (#5153)</a></p></li></ul><p>Key takeaway:</p><ul><li><p>4.7 behaves differently from 4.6</p></li><li><p><strong>Thinking visibility missing / inconsistent</strong> in real integrations</p></li><li><p>Confirms <strong>behavioural differences at system level</strong>, not just UX perception</p></li></ul><div><hr></div><h2>&#128308; 3. GitHub (Anthropic / Claude Code) &#8211; Real workflow regression data</h2><ul><li><p><a href="https://github.com/anthropics/claude-code/issues/42796?timeline_page=1&amp;utm_source=chatgpt.com">Claude Code regression issue (complex workflows degraded)</a></p></li></ul><p>Key takeaway (this one is gold for your thesis):</p><ul><li><p>Increase in <strong>reasoning loops and contradictions</strong></p></li><li><p>&#8220;Edits without reading context&#8221; jumped significantly</p></li><li><p>Model choosing <strong>&#8220;simplest fix&#8221; instead of correct fix</strong></p></li><li><p>12&#215; increase in user interruptions</p></li></ul><p>This directly maps to:</p><ul><li><p>Context drift</p></li><li><p>Adaptive loops</p></li><li><p>Hallucinated or low-quality edits</p></li></ul><div><hr></div><h2>&#128308; 4. News (Business Insider) &#8211; Token burn + backlash</h2><ul><li><p><a href="https://www.businessinsider.com/anthropic-claude-opus-4-7-backlash-tokens-2026-4?utm_source=chatgpt.com">Claude Opus 4.7 backlash and token usage issues</a></p></li></ul><p>Key takeaway:</p><ul><li><p>Users report:</p><ul><li><p><strong>Higher token consumption</strong></p></li><li><p><strong>Slower / less useful outputs</strong></p></li><li><p>Regressions vs earlier versions</p></li></ul></li><li><p>Adaptive reasoning cited as a possible cause</p></li></ul><div><hr></div><h2>&#128308; 5. News (TechRadar / AMD AI Head criticism)</h2><ul><li><p><a href="https://www.techradar.com/pro/claude-cannot-be-trusted-to-perform-complex-engineering-tasks-amd-ai-head-slams-anthropics-coding-tool-after-months-of-frustration?utm_source=chatgpt.com">AMD AI head: Claude cannot be trusted for complex engineering</a></p></li></ul><p>Key takeaway:</p><ul><li><p>Large-scale real-world usage (6,800+ sessions)</p></li><li><p>Reports:</p><ul><li><p>Ignoring instructions</p></li><li><p>Contradictions</p></li><li><p>Reduced reliability</p></li></ul></li><li><p>Explicit claim: <strong>decline in engineering trustworthiness</strong></p></li></ul><div><hr></div><h2>&#128308; 6. Blog / Analysis &#8211; Token inflation + adaptive thinking shift</h2><ul><li><p><a href="https://medium.com/data-science-in-your-pocket/claude-opus-4-7-is-bullshit-67ed884e2feb?utm_source=chatgpt.com">Claude Opus 4.7 analysis (token inflation + adaptive thinking)</a></p></li></ul><p>Key takeaway:</p><ul><li><p>New tokenizer &#8594; <strong>~1.0&#8211;1.35&#215; more tokens per task</strong></p></li><li><p>Shift to adaptive thinking instead of fixed budgets</p></li><li><p>Explains:</p><ul><li><p>Faster quota exhaustion</p></li><li><p>Less predictable compute behavior</p></li></ul></li></ul><div><hr></div><h2>&#128308; 7. Hacker News &#8211; Forced adaptive thinking model behaviour</h2><ul><li><p><a href="https://news.ycombinator.com/item?id=47803650&amp;utm_source=chatgpt.com">HN discussion: adaptive thinking mandatory in 4.7</a></p></li></ul><p>Key takeaway:</p><ul><li><p>Adaptive thinking is <strong>no longer optional</strong></p></li><li><p>Traditional &#8220;controlled reasoning&#8221; approaches removed</p></li><li><p>Developers experimenting with effort tuning to avoid issues</p></li></ul><div><hr></div><h2>&#129504; Blog / Analysis &#8211; performance + regression narrative</h2><ul><li><p><a href="https://thenewstack.io/claude-opus-47-flaky-performance/?utm_source=chatgpt.com">Claude Opus 4.7 flaky performance analysis</a></p></li><li><p>Reports:</p><ul><li><p>Self-contradictions</p></li><li><p>Degraded reliability</p></li></ul></li></ul><div><hr></div><h2>Why Adaptive Thinking Might Be Backfiring</h2><p>Conceptually:</p><blockquote><p>Let the model decide when to think more.</p></blockquote><p>In practice:</p><h3>Unbounded Initiative</h3><p>Model &#8220;improves&#8221; things you didn&#8217;t ask for</p><h3>Token Hunger</h3><p>High effort &#8594; excessive reasoning</p><h3>Plan Violations</h3><p>&#8220;Plan mode&#8221; isn&#8217;t strictly enforced</p><p>This creates a system that is:</p><ul><li><p>More powerful</p></li><li><p>But less predictable</p></li><li><p>And harder to trust</p></li></ul><div><hr></div><h2>Where This Leaves Me</h2><p>Over 18 days:</p><ul><li><p>Frequent limit hits</p></li><li><p>Context instability</p></li><li><p>Silent behaviour drift</p></li></ul><p>Result:</p><ul><li><p>Progress stalled</p></li><li><p>Subscription paused</p></li><li><p>Alternatives being evaluated</p></li><li><p>And completely locked out with weekly limits hit (I&#8217;m on Max plan: $200 + $20 top-up)</p></li></ul><p>This is a deal-breaker for me!</p><p>It&#8217;s:</p><blockquote><p>4.7 is powerful&#8212;but volatile for long-running workflows.</p></blockquote><div><hr></div><h2>What I&#8217;d Love to See</h2><h3>1. Strict Execution Mode</h3><p>No deviation from plan</p><h3>2. Hard Thinking Budgets</h3><p>Tokens + time caps + visibility</p><h3>3. Context Hygiene Tools</h3><p>Detect stale vs current state</p><h3>4. Strong Plan Guarantees</h3><p>&#8220;Plan only&#8221; must mean <strong>no execution</strong></p><div><hr></div><h2>Closing Thought</h2><p>Adaptive thinking is a sharp tool.</p><p>Right now, it feels like:</p><ul><li><p>Extremely capable</p></li><li><p>But lacking guardrails</p></li></ul><p>And for production systems:</p><blockquote><p>Capability without predictability is risk.</p></blockquote><div><hr></div><h2>Appendix: External Signals Worth Noting (with sources)</h2><p>This is the factual trail I would attach when sharing this with Anthropic. These are not isolated anecdotes&#8212;they reflect consistent patterns across GitHub issues, news coverage, and independent analyses.</p><div><hr></div><h3>1. Adaptive thinking &amp; token usage changes</h3><ul><li><p>Opus 4.7 introduces adaptive thinking and removes earlier budget-based controls, replacing them with effort tuning and task budgets</p></li><li><p>Token usage can increase significantly due to tokenizer changes (~1.0&#8211;1.35&#215; for the same task)</p></li></ul><p>&#128073; Relevance:<br>Explains <strong>why usage limits are hit faster</strong> and why compute behavior feels less predictable.</p><div><hr></div><h3>2. Higher quota burn and cost impact in real workflows</h3><ul><li><p>Measured reports show Opus 4.7 consuming <strong>~2.4&#215; quota compared to 4.6</strong> in real API usage scenarios</p></li><li><p>News coverage confirms user complaints about <strong>higher token consumption and slower outputs</strong></p></li></ul><p>&#128073; Relevance:<br>Directly supports the <strong>adaptive loop + quota exhaustion</strong> issue.</p><div><hr></div><h3>3. Reasoning loops, shallow edits, and workflow degradation</h3><ul><li><p>GitHub issue analysis shows models shifting toward:</p><ul><li><p>&#8220;edit without reading&#8221;</p></li><li><p>&#8220;simplest fix instead of correct fix&#8221;</p></li><li><p>increased need for human intervention</p></li></ul></li></ul><p>&#128073; Relevance:<br>Matches:</p><ul><li><p>Adaptive loops</p></li><li><p>Reduced execution quality</p></li><li><p>Loss of disciplined workflow behavior</p></li></ul><div><hr></div><h3>4. Silent failures and stuck execution loops</h3><ul><li><p>Reports of <strong>sessions staying active without progress</strong> (no tool execution, no response advancement)</p></li></ul><p>&#128073; Relevance:<br>Real-world evidence of <strong>non-converging loops</strong>&#8212;exactly what you observed with long-running prompts.</p><div><hr></div><h3>5. API and behavior inconsistencies across environments</h3><ul><li><p>Errors due to <strong>thinking mode changes and removed parameters</strong> (e.g., <code>thinking.type.enabled</code> no longer supported)</p></li><li><p>Regression reports where previously working setups fail in 4.7 environments</p></li></ul><p>&#128073; Relevance:<br>Explains <strong>instability across toolchains (Bedrock, Claude Code, etc.)</strong></p><div><hr></div><h3>6. Broader user backlash and reliability concerns</h3><ul><li><p>Reports of:</p><ul><li><p>poorer performance</p></li><li><p>inaccuracies</p></li><li><p>unexpected reasoning behavior</p></li><li><p>increased cost<br>across Reddit and developer communities</p></li></ul></li><li><p>Coverage highlighting <strong>growing frustration among power users and perceived regressions</strong></p></li></ul><p>&#128073; Relevance:<br>Confirms your experience is <strong>not isolated</strong></p><div><hr></div><h3>7. Mixed positioning: improved capability, but inconsistent execution</h3><ul><li><p>Opus 4.7 is described as:</p><ul><li><p>more capable in theory</p></li><li><p>better at long-running tasks</p></li><li><p>but still inconsistent in real-world workflows</p></li></ul></li></ul><p>&#128073; Relevance:<br>Captures the core tension:</p><blockquote><p>More powerful &#8800; more reliable</p></blockquote><div><hr></div><h2>&#128073; Food for thought</h2><p>The patterns described in this post&#8212;<strong>context drift, adaptive loops, and hallucinated behaviour changes</strong>&#8212;are not isolated observations.</p><p>They are consistently reflected across:</p><ul><li><p>GitHub issue logs</p></li><li><p>API migration changes</p></li><li><p>News reports</p></li><li><p>Independent developer analyses</p></li></ul><p>Which suggests this is not a prompt problem or a single workflow issue&#8212;</p><blockquote><p>but a <strong>system-level behavioural shift</strong> in how the model operates under adaptive thinking.</p></blockquote>]]></content:encoded></item></channel></rss>