<?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[The Contract Signal]]></title><description><![CDATA[AI and data intelligence for the contracts professional. Frameworks, analysis, and insider perspective from 10 years in enterprise contracts data at Knowable (LexisNexis) and Axiom.]]></description><link>https://thecontractsignal.com</link><image><url>https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png</url><title>The Contract Signal</title><link>https://thecontractsignal.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 05 Jun 2026 02:49:16 GMT</lastBuildDate><atom:link href="https://thecontractsignal.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Leonid Prilutskiy]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[leonidprilutskiy@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[leonidprilutskiy@substack.com]]></itunes:email><itunes:name><![CDATA[Leonid Prilutskiy]]></itunes:name></itunes:owner><itunes:author><![CDATA[Leonid Prilutskiy]]></itunes:author><googleplay:owner><![CDATA[leonidprilutskiy@substack.com]]></googleplay:owner><googleplay:email><![CDATA[leonidprilutskiy@substack.com]]></googleplay:email><googleplay:author><![CDATA[Leonid Prilutskiy]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Announced Deal is the Worst Lead You'll Get All Year]]></title><description><![CDATA[Why M&A announcements are a misleading signal for anyone trying to originate contract work &#8212; and what actually predicts demand.]]></description><link>https://thecontractsignal.com/p/the-announced-deal-is-the-worst-lead</link><guid isPermaLink="false">https://thecontractsignal.com/p/the-announced-deal-is-the-worst-lead</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Sun, 31 May 2026 21:53:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thecontractsignal.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thecontractsignal.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>My first assignment out of law school was monitoring M&amp;A deals.</p><p>I sat in front of a subscription tool that aggregated announced mergers, acquisitions, financings, and the rest. You could sort by deal size, by type, by buyer. You could set alerts. And the strategy my team ran on top of it was simple enough to explain in one sentence: a big deal gets announced, big deals mean lots of contracts to review, lots of contracts mean someone needs help, so we call them and win the work.</p><p>It sounds reasonable.</p><p>It&#8217;s also wrong in two structural ways that took me years to fully appreciate. If you&#8217;re building an origination motion for contract-review work today &#8212; whether you&#8217;re a vendor, a services firm, or a legal-ops team trying to staff ahead of demand &#8212; those two failures are worth as much as any feature comparison.</p><div><hr></div><p><strong>Failure one: by the time it&#8217;s news, the work is gone</strong></p><p>The first thing that breaks is timing.</p><p>A deal that&#8217;s been announced is a deal that&#8217;s already been planned. The diligence scope is set. The advisors are picked. Often the contract-review approach &#8212; internal team, outside counsel, a vendor, some combination &#8212; was decided weeks or months before the press release went out. You are reading about a decision, not catching one in flight.</p><p>So the announcement, which feels like the <em>start</em> of an opportunity, is usually the end of one. The companies that show up in your alert feed are disproportionately the ones you can no longer help on this deal. The genuinely addressable work was upstream, in the quiet period when nobody outside the principals knew it was happening.</p><p>This is the part that impacts everything else. If announced deals are mostly too late, then reactive monitoring isn&#8217;t an origination strategy &#8212; it&#8217;s a lagging indicator dressed up as a lead source. The work that actually converts comes from being known <em>before</em> the deal exists: proactive relationships, so the company comes to you when the deal is still a secret. You can complement this &#8212; but not replace &#8212; with news monitoring.</p><div><hr></div><p><strong>Failure two: volume doesn&#8217;t mean need</strong></p><p>The second failure is subtler and, I think, the more useful one, because it survives even if you fix the timing problem.</p><p>The whole premise &#8212; more deal volume means more contract work &#8212; assumes a correlation that just isn&#8217;t reliable. Deals are structured, and the structure determines whether contracts matter at all. A few examples that look similar in a volume column and behave nothing alike:</p><p><strong>The acqui-hire.</strong> A handful of people command an enormous package &#8212; you can get to several hundred million, even half a billion, on a few names in the current AI talent market. It will light up any deal-size screen you build. The contract review attached to it is close to zero. Nobody&#8217;s reviewing a customer book; there barely is one. Huge number, no work.</p><p><strong>The asset purchase.</strong> A buyer takes a discrete set of assets &#8212; say, a fleet of trucks. The assets are owned outright; there&#8217;s not much contractual tail to diligence on the buy side, and any related agreements may be getting retired or terminated as part of the structure anyway. So buy-side need is low. But flip it: the <em>seller</em> may have real work understanding how hard those contracts are to exit. The same deal generates demand on one side and almost none on the other, and a volume metric can&#8217;t see the difference.</p><p><strong>Business-as-usual masquerading as nothing.</strong> Meanwhile, the company quietly enters into fifty thousand new agreements a year in the ordinary course of business. That&#8217;s a completely separate pool of potential work from anything M&amp;A-driven &#8212; larger and steadier &#8212; and it never shows up in a deal feed at all, because it never gets announced.</p><p>Put those together and the lesson is uncomfortable for anyone who loves a clean dashboard: high deal volume is weakly correlated with contract-review demand, and the cases where it&#8217;s <em>most</em> wrong are often the flashy ones that dominate the news.</p><p><strong>What actually predicts demand</strong></p><p>None of this means prediction is hopeless. It means the naive screen is the floor, not the ceiling.</p><p>The floor &#8212; and I mean &#8220;naive&#8221; as a term of art, not an insult &#8212; is heuristic. Big, diversified companies with the cash flow or borrowing capacity to keep doing deals are likely serial transactors; their historical deal cadence tells you something. Working with physical goods helps: a business with a manufacturing or supply-chain footprint tends to carry more contractual surface area than a lighter software-first business, though large enough software companies blow that rule up with sheer customer and vendor count. Fortune 500, deal history, industry density &#8212; that&#8217;s a defensible level-one list, and it&#8217;s cheap to build.</p><p>The ceiling is where you stop treating those as the answer and start treating them as inputs. Layer in the things a screen can&#8217;t see: your relationship history, your own pipeline, deal-structure patterns, the buy-side/sell-side asymmetry above. Feed that into a model and you&#8217;re no longer asking &#8220;who&#8217;s big?&#8221; &#8212; you&#8217;re asking &#8220;who&#8217;s likely to transact <em>in a way that actually generates contract work</em>, and where are we well-positioned<strong> </strong>to win it?&#8221; That&#8217;s a prediction worth making.</p><p>One honest caveat, because it&#8217;s the thing most product pitches skip: the highest-value version of this is driven by <em>your</em> internal context &#8212; your relationships, your data, your read on structure. An outside-in tool can get you the level one list. It can&#8217;t replicate the part that makes the prediction good, which is the proprietary context only the firm doing the work has. Proceed accordingly and be wary of anyone selling you the ceiling as if it came in a box.</p><div><hr></div><p><em>If you&#8217;re working on origination or capacity planning around contract work and any of this maps to (or contradicts) what you&#8217;re seeing, I&#8217;d love to discuss.</em></p>]]></content:encoded></item><item><title><![CDATA[Replaying an Old Assignment Through an Agents Lens]]></title><description><![CDATA[A few years into my career at Axiom, I was handed an assignment that seemed simple on the surface: put together a newsletter.]]></description><link>https://thecontractsignal.com/p/replaying-an-old-assignment-through</link><guid isPermaLink="false">https://thecontractsignal.com/p/replaying-an-old-assignment-through</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Mon, 06 Apr 2026 01:31:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few years into my career at Axiom, I was handed an assignment that seemed simple on the surface: put together a newsletter.</p><p>The context mattered. We were a nascent contracts data business operating inside a larger alternative legal services firm. Our business &#8212; turning contracts into structured data for M&amp;A due diligence and integration &#8212; was maybe ten percent of the company&#8217;s revenue. The other ninety percent ran a different model entirely: placing attorneys with in-house legal departments on a consulting basis. That larger business was our best source of referrals. When one of their senior account executives recognized that a client&#8217;s problem was better suited to what we did, they&#8217;d send it our way &#8212; and they&#8217;d still get credit toward their goals, so incentives were aligned.</p><p>The head of our business wanted to double down on that referral engine. His solution was internal marketing &#8212; get the other teams excited about what we were building, make them feel connected to it, make them more likely to think of us when the right client situation came up. He tasked me, roughly a year and a half into the job, with making that happen through a newsletter compiling the latest cross-functional updates.</p><p>I&#8217;ve been thinking about that assignment lately because it&#8217;s a useful test case for something that comes up constantly: where do agents actually fit into knowledge work, and where does the person still have to drive?</p><div><hr></div><h4><strong>What the Assignment Actually Involved</strong></h4><p>Before getting into the AI question, it&#8217;s worth being specific about what the work required, step by step.</p><p>The first thing I had to do was understand the business problem behind the assignment. The newsletter wasn&#8217;t the goal &#8212; increasing sales revenue was, through increased origination from the referral channel. That distinction mattered because it shaped every subsequent decision about what to include and how to frame it.</p><p>The second thing was figuring out what to compile. I started with our CRM to pull sales history, stakeholder context, deal status, and anything useful I could surface without taking up anyone&#8217;s time. Then I reached out across sales, product, marketing, and client service for anything the CRM didn&#8217;t capture &#8212; their read on what was worth highlighting, recent wins, delivery milestones, collateral. This produced a pile of good raw material: deals closed, new clients landed, product updates shipped, branding work completed.</p><p>The third thing &#8212; and this is where most of the judgment lived &#8212; was deciding what actually mattered and why, and how to communicate that to our audience.</p><p>Winning a deal with a new enterprise client was significant not just for its revenue, but for what it signaled about our ability to win that class of business and what it meant for the senior person on the other side of the house who originated it. A major renewal and upsell was worth highlighting not just as a financial outcome but as a recognition of the delivery team whose work made it possible. The connections between how collaboration across different parts of the business enabled our sales motions &#8212; and giving specific credit to the people involved &#8212; that&#8217;s what made the newsletter land, not the facts themselves.</p><p>Finally, the fourth thing was packaging it into a format that salespeople, executives, and other business stakeholders would actually read, let alone enjoy and be inspired by.</p><div><hr></div><h4><strong>Running It Back With Agents</strong></h4><p>The interesting question isn&#8217;t whether an agent could do this today. Parts of it clearly could be addressed. The interesting question is which parts, and what that leaves for the person.</p><p><strong>Compilation is largely addressable.</strong> The mechanical work of gathering updates across departments &#8212; if that information lives in a shared system with appropriate access &#8212; is exactly the kind of multi-step retrieval task agents handle well. Connect to the CRM, pull recent updates by department, surface them in a structured format. That&#8217;s real and useful. In my case I was doing much of this manually through CRM data research, email and conversations. Some of that friction goes away.</p><p>That said, the compilation step has its own constraints worth naming. The relevant information isn&#8217;t always well-structured or correctly tagged. Ambiguity in underlying data produces ambiguous outputs. And there are legitimate access and privacy boundaries &#8212; not every relevant conversation is logged, not every system is connected, and not every organization should want them to be. These aren&#8217;t temporary engineering problems. They&#8217;re features of how organizations actually function.</p><p><strong>Summarization is addressable, and honestly it was already addressable before agents.</strong> Given a set of inputs, an LLM produces coherent summaries. This isn&#8217;t a new capability agents unlock &#8212; it&#8217;s baseline LLM behavior. Useful to have in the workflow, not a step-change.</p><p><strong>Formatting and packaging is partially addressable.</strong> A first draft of the newsletter structure, given clear inputs and a well-defined template, is something an LLM handles comfortably. The blank page problem gets easier. The judgment in the final version is still a human job.</p><p><strong>What doesn&#8217;t move, at least not yet: the judgment calls at the beginning and middle of the process.</strong></p><p>Understanding why the assignment existed &#8212; that the real goal was referral activation, not newsletter production &#8212; required knowing the business, the person making the ask, and the organizational dynamics well enough to read between the lines. That context wasn&#8217;t written down anywhere. It came from being embedded in the organization.</p><p>Deciding what actually mattered in a pile of raw updates required knowing which outcomes were genuinely significant versus routine, which relationships between teams were worth reinforcing, and what would actually resonate with a specific audience of attorneys and senior salespeople being asked to care about something adjacent to their primary work. An agent surfacing everything equally would have produced a longer document, not a better one.</p><div><hr></div><h4><strong>A More Recent Illustration</strong></h4><p>There&#8217;s a more current version of the same dynamic that I&#8217;ve been thinking about while using Claude Code for my own projects.</p><p>When Claude Code runs, it periodically pauses and asks whether you want to auto-accept its next actions or review them manually. It&#8217;s a small UX detail, but it captures something important: the model itself doesn&#8217;t know when human review is warranted. It can execute well across a wide range of tasks. What it can&#8217;t do is determine, in your specific context with your specific constraints, which outputs are safe to accept without review and which ones need your eyes on them first.</p><p>That decision &#8212; when to trust the output and when to verify &#8212; is a judgment call. And it&#8217;s not incidental that the tool surfaces it explicitly as a user choice rather than resolving it internally. The people who built it understand that this is a structurally human decision, not a capability gap to be closed in the next model release.</p><p>The newsletter assignment had the same structure. An agent could have helped me compile, draft, and format. What it couldn&#8217;t have done is tell me which deal was worth leading with, or how to frame a delivery team&#8217;s contribution in a way that would actually motivate a sales floor to send us more referrals. Those calls required context that lived in relationships and organizational dynamics that no system was tracking.</p><div><hr></div><h4><strong>What This Suggests Practically</strong></h4><p>The newsletter assignment was never going to be fully automated, and that&#8217;s not a failure condition. The right way to think about it is as a workflow with a natural division of labor: the person drives the judgment-heavy front end, the tools handle the execution-heavy middle, and the person reviews and refines the back end.</p><p>In practice that looks something like this. You identify the business problem clearly enough that it can guide downstream decisions &#8212; human work. You use the tools to pull and structure relevant inputs from the systems that have them &#8212; agent territory. You evaluate what came back against the judgment you brought in at the start &#8212; human again. You use the tools to draft and format &#8212; mixed, depending on how clearly you&#8217;ve defined what good looks like. You review and refine with your audience in mind &#8212; human, and not optional.</p><p>The thing I&#8217;d push back on is the framing that treats this division as temporary &#8212; that eventually the agent handles the judgment calls too as models improve. Maybe. But the judgment calls in the newsletter assignment depended on context that is structurally difficult to provide to any system, not just ones with current capability limits. The organizational dynamics, relationship histories, and political considerations that informed my decisions weren&#8217;t in any system. Getting them there fully would require a level of organizational surveillance that most environments wouldn&#8217;t and shouldn&#8217;t accept.</p><p>Until that changes, the person isn&#8217;t a bottleneck to be engineered around. They&#8217;re the thing that makes the output worth producing in the first place.</p>]]></content:encoded></item><item><title><![CDATA[AI Agents: Getting More Done Isn’t the Same as Creating Value]]></title><description><![CDATA[Article 7 in a series on building with and using AI tools as a non-native technologist]]></description><link>https://thecontractsignal.com/p/ai-agents-getting-more-done-isnt</link><guid isPermaLink="false">https://thecontractsignal.com/p/ai-agents-getting-more-done-isnt</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Sun, 29 Mar 2026 17:08:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Article 7 in a series on building with and using AI tools as a non-native technologist</em></p><div><hr></div><h3>Intro</h3><p>There&#8217;s been a lot of noise lately about AI agents &#8212; most recently OpenClaw, before that OpenAI&#8217;s agents, Anthropic&#8217;s, Google&#8217;s, and the growing ecosystem of tools that let you automate workflows, string tasks together, and run complex operations with minimal intervention. The pitch is compelling: more getting done, less effort spent doing it.</p><p>I&#8217;ve found most of that pitch to be true in a narrow but important sense. These tools genuinely do help you get more done. I use them regularly for exactly that purpose.</p><p>But I keep noticing a gap between the claim and what&#8217;s actually happening &#8212; between <em>getting more done</em> and <em>creating value</em>. They&#8217;re not the same thing. The confusion between them, I think, is one of the more consequential misunderstandings in how these tools are being talked about right now.</p><p><strong>Accompanying audio note:</strong> </p><div class="native-audio-embed" data-component-name="AudioPlaceholder" data-attrs="{&quot;label&quot;:null,&quot;mediaUploadId&quot;:&quot;9d4578d7-4440-4c60-9b48-fc75c67c1fe5&quot;,&quot;duration&quot;:632.92084,&quot;downloadable&quot;:false,&quot;isEditorNode&quot;:true}"></div><div><hr></div><h3>The Productivity Claim</h3><p>When people talk about AI productivity gains, they&#8217;re usually describing something real: tasks that previously took an hour now take ten minutes. Analyses that required manual effort can be automated. Research that involved dozens of searches can be compressed into a few prompts.</p><p>This is genuinely useful. I don&#8217;t want to dismiss it. But productivity, strictly speaking, just means output per unit of input. Getting more things done in less time. And productivity is only valuable to the degree that the things being done are worth doing.</p><p>That sounds obvious&#8230;but watch what happens in practice. Someone deploys an agent that automates a multi-step process. They count the hours saved. They extrapolate to the team, multiply by average hourly rate, and arrive at a dollar figure. The number sounds large. The announcement goes out: <em>$X million in value created.</em></p><p>In most cases, this conflates two very different things: the cost of the activity and the value of the outcome.</p><p>Getting more done faster is only as valuable as what&#8217;s getting done. If an AI agent helps you accelerate a process that was already misaligned with what your customers needed, you&#8217;ve become more efficient at something that shouldn&#8217;t have existed in the first place. That&#8217;s not value creation &#8212; it&#8217;s waste, just at a higher throughput.</p><div><hr></div><h3>The More Interesting Question</h3><p>None of this means productivity gains are worthless. It means the question worth asking is: <em>what do you do with the time you get back?</em></p><p>There are two very different answers. One is that the freed capacity gets absorbed by more tasks of the same kind &#8212; a never-ending queue of lower-priority work that expands to fill available bandwidth. More things get done. The ratio of important things to unimportant things stays roughly the same. The volume increases.</p><p>The other answer is that the freed capacity gets redirected toward genuinely higher-leverage work &#8212; the things that actually move outcomes, that create something worth having, that compound over time. If that happens, then the productivity gain is real in the deeper sense: it bought you time to work on the things that matter.</p><p>Which answer you get depends almost entirely on whether you have the judgment and the agency to make that call. Judgment to identify what the high-leverage work actually is. Agency to actually redirect toward it &#8212; which, in an organizational setting, is far from guaranteed.</p><p>In a previous article I wrote about the difference between where you build in the stack and where your time actually compounds. The same logic applies here. Productivity tools don&#8217;t answer the allocation question. They just widen the gap between people who are asking it well and people who aren&#8217;t.</p><div><hr></div><h3>A Third Category</h3><p>There&#8217;s one more thing I&#8217;ve been sitting with, and it&#8217;s harder to articulate cleanly.</p><p>Most discussions of AI productivity focus on one of two categories: either you were doing the task before and now do it faster, or you weren&#8217;t doing it and now you can. What I&#8217;ve started to notice is a third category &#8212; things you technically could have done before, but that were just annoying and friction-laden enough that you didn&#8217;t, in practice, ever do them.</p><p>A specific example: I&#8217;ve had FSA accounts for years, with funds that expire if unused &#8212; the classic use-it-or-lose-it situation. Submitting claims, especially for borderline or unfamiliar expense types, has always involved navigating opaque requirements, decoding denial reasons, and figuring out exactly what documentation was needed. Annoying enough that I&#8217;d let some money expire rather than waste time fighting the process.</p><p>Earlier this year I used ChatGPT to work through a claim denial. Not just as a search engine &#8212; as a conversational partner. I described the situation, asked about common denial reasons for that category, worked through what documentation would address each one, and drafted a resubmission. The claim was approved. Several hundred dollars I would have left on the table.</p><p>The productivity framing undersells what happened there. I didn&#8217;t do that task faster &#8212; I did a task I wasn&#8217;t going to do at all. The LLM didn&#8217;t just reduce time cost. It reduced friction below the threshold where I&#8217;d actually act.</p><p>There&#8217;s probably a psychological dimension to this as well. Something about the conversational format &#8212; the ability to ask follow-ups, to get a response that acknowledges your specific situation rather than returning generic search results &#8212; lowers the activation energy in a way that a list of web links doesn&#8217;t. I&#8217;m not sure whether that&#8217;s because the medium maps to how people have evolved to interact with and process information, their mental model or something else. But the effect is real.</p><p>This matters because it suggests a category of value that doesn&#8217;t show up in time-savings calculations. Not hours recaptured. Not existing tasks accelerated. But things that now happen that otherwise wouldn&#8217;t &#8212; claims filed, questions answered, decisions made with better information. That&#8217;s not productivity. It&#8217;s enablement.</p><div><hr></div><h3>What This Means in Practice</h3><p>The honest version of the AI agent story is more nuanced than the headlines suggest. These tools genuinely do help you get more done. In the right conditions &#8212; when there&#8217;s judgment about what&#8217;s worth doing and agency to act on it &#8212; that translates to real value. When those conditions are absent, you get faster hamster wheels.</p><p>For anyone building with or using these tools, I think the most important questions aren&#8217;t about the tools themselves. They&#8217;re about the human side of the equation: What are you actually trying to accomplish? Where does the allocation of your time currently mismatch what you&#8217;d choose if you thought clearly about it? And what category of things &#8212; the ones you&#8217;re not doing because the friction cost is too high &#8212; might be worth reconsidering?</p><p>Getting more done is the easy part. These tools are genuinely good at it. The harder part &#8212; which the tools don&#8217;t touch &#8212; is knowing what to do with the time.</p><div><hr></div><p><em>This is Article 7 in a series on building with and using AI tools as a non-native technologist. Previous articles covered financial planning with AI tools, a framework for city selection, evaluating LLM tools, building the Seattle Nature Access Map, why judgment was always the bottleneck, and where in the stack to build.</em></p>]]></content:encoded></item><item><title><![CDATA[Where in the Stack Should You Build?]]></title><description><![CDATA[At one point I had created a library of over 50 SQL and Opensearch template queries I used each week to wrangle up data for ML training.]]></description><link>https://thecontractsignal.com/p/where-in-the-stack-should-you-build</link><guid isPermaLink="false">https://thecontractsignal.com/p/where-in-the-stack-should-you-build</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Sun, 22 Mar 2026 18:07:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At one point I had created a library of over 50 SQL and Opensearch template queries I used each week to wrangle up data for ML training.</p><p>This was back before LLM tools became mainstream.</p><p>The queries weren&#8217;t sophisticated, but they handled my use cases well. They were also easy to understand and troubleshoot if something didn&#8217;t seem to be working.</p><p>I learned to write these &#8211; passably. Enough to pull data, join tables, answer a question without waiting for an engineer.</p><p>Once I reached a good enough level - I deliberately never got much better at it than that.</p><p>Every hour I could have spent becoming a stronger SQL writer was an hour I wasn&#8217;t doing the thing I was actually better at: figuring out which query mattered, what the data meant, and what it implied for the product. Where the models seemed to be doing well, where they needed to improve, and where we had no idea.</p><p>I could always find someone to write better queries. I couldn&#8217;t always find someone who knew what to ask.</p><p>That wasn&#8217;t laziness. It was a judgment about where my time compounded.</p><p>I&#8217;ve been thinking about that decision a lot since starting to build with AI tools in earnest &#8212; first the financial planning work I wrote about in Article 1, then the nature access map in Article 4. The more I build, the more I notice that the most consequential decisions aren&#8217;t about <em>how</em> to build something. They&#8217;re about <em>where</em> in the process your leverage actually lives.</p><div><hr></div><p><strong>The Stack Has Layers &#8212; And They&#8217;re Not Equal</strong></p><p>When people talk about &#8220;building with AI,&#8221; they&#8217;re usually collapsing several genuinely different things into one.</p><p>At the foundation, there&#8217;s training foundational models &#8212; the work Anthropic, OpenAI, and Google do. Enormous compute, proprietary data, specialized research teams. Almost no one reading this should be operating here.</p><p>One level up: fine-tuning and domain adaptation. Taking an existing model and adjusting it for a specific task or dataset. Still technical, but accessible to a much wider group &#8212; though the relevant question increasingly is whether the base model already does what you need, because often it does.</p><p>Above that: building AI-powered applications. Connecting LLMs to data, interfaces, and logic to make something useful. This is where most of the interesting work is happening right now, and where the barrier to entry has dropped most dramatically.</p><p>And above that: using AI-powered tools to create things that aren&#8217;t primarily engineering at all &#8212; writing, analysis, structured research, products where the judgment and domain knowledge are the core value, and the code is just the vehicle.</p><p>These are genuinely different layers. Which one you should work at isn&#8217;t obvious, and &#8220;I can build this now&#8221; doesn&#8217;t answer it.</p><div><hr></div><p><strong>The Right Level of Abstraction Is the Same Question</strong></p><p>In a previous article, I wrote about how judgment was always the bottleneck &#8212; that vibe coding made it visible, not new. This piece is about a related but distinct question: given that you have judgment, and given that you can now build things you couldn&#8217;t before, <em>where should you be building?</em></p><p>This is a question I&#8217;ve been trying to answer for myself.</p><p>There&#8217;s a useful frame from computer science education that I found clarifying here. When I first learned to code, I started with a site that abstracted away almost everything &#8212; you typed commands, things ran, but you had no idea why. Then I took a more rigorous introductory class that went deeper. Then, eventually, a course that started just above the transistor level &#8212; actual hardware, zeros and ones, how you get from electricity to software. Each level of abstraction revealed something the previous one had hidden.</p><p>The lesson wasn&#8217;t &#8220;always go to the lowest level.&#8221; Going down to the physics of transistors was helpful for understanding how computers work. It wasn&#8217;t necessary for building a web application. The insight was that the <em>right</em> level of abstraction depends on what you&#8217;re trying to do &#8212; and choosing wrong in either direction creates problems.</p><p>Too high: you can&#8217;t diagnose what breaks. This is what happened when I hit the rendering bug during the nature access map build. Claude kept proposing fixes that introduced new problems, and we went in circles until I suggested using browser dev tools to surface actual error information. Abstracting away all understanding of the underlying system meant I was stuck the moment something went wrong.</p><p>Too low: you&#8217;re spending your time on infrastructure that isn&#8217;t your actual problem. If I&#8217;d tried to build a more capable machine learning pipeline from scratch for the nature access scoring, instead of using public data and simpler distance calculations, I&#8217;d have spent months on something that wasn&#8217;t what the app was focused on.</p><p>Choosing where in the stack to build is the same decision as choosing the right level of abstraction. The mistake is treating it as fixed.</p><div><hr></div><p><strong>The Chef Doesn&#8217;t Make the Spatula</strong></p><p>Here&#8217;s the underlying principle: being capable of doing something and that being a good use of your time are different things.</p><p>A skilled chef could, in principle, forge their own knives, mill their own flour, build their own oven. They might have enough mechanical intuition to figure it out. But that&#8217;s not where their differentiation lives, and spending time there means spending less time on the cooking &#8212; which is where they&#8217;re actually hard to replace.</p><p>The question for anyone building now is the same one I was asking about SQL years ago: where does <em>my</em> time compound? Where is the gap between what I can do and what most people can do actually widest?</p><p>During the ten years I&#8217;ve spent in legaltech, the honest answer was never &#8220;write better ML code.&#8221; It was understanding what types of contract data matter to attorneys, salespeople, and finance teams &#8212; and how to structure and surface it in a way that was most useful to them.</p><p>That meant understanding what clause types mattered to an M&amp;A attorney under what conditions, how to translate a 91% accuracy rate into something meaningful for a lawyer managing risk, which edge cases would surface in exactly the situations that mattered most. Those were judgment calls that required domain knowledge I&#8217;d spent years building. Better tooling wouldn&#8217;t have made them easier &#8212; it would have made the engineering around them cheaper, which is a different thing.</p><p>That calculus hasn&#8217;t changed. What&#8217;s changed is that the floor of &#8220;good enough building&#8221; is now much higher, which means more people can reach it &#8212; and that makes the question of where you&#8217;re actually differentiated more urgent to answer explicitly. Before LLMs, if you couldn&#8217;t write the code, the question was moot. Now it isn&#8217;t, and that&#8217;s mostly a good thing. It just means the &#8220;where should I build?&#8221; question is no longer optional.</p><div><hr></div><p><strong>So Where Does Your Time Compound?</strong></p><p>Building toward something of my own has sharpened this question more than anything else. If I can build more easily than before, what should I actually build? At which layer?</p><p>The honest version of the question isn&#8217;t &#8220;can I do this?&#8221; It&#8217;s: where is my specific combination of domain knowledge, judgment, and taste producing something that isn&#8217;t easily replicated by someone working adjacent to me?</p><p>For some people, that points toward a lower layer &#8212; they have genuine ML depth, or systems architecture intuition, or infrastructure knowledge that&#8217;s still genuinely hard to replicate. For most of us building on top of these models, the answer points up: toward the quality of the problem being solved, the specificity of the insight, the understanding of the user, the design of the experience.</p><p>This doesn&#8217;t mean the engineering disappears. As I wrote in <em>Judgment Was Always the Bottleneck</em>, engineering judgment &#8212; knowing when a latency issue will create a UX crisis under load, knowing when a context window limitation will cap what&#8217;s possible, knowing when something technically works but creates maintenance debt that isn&#8217;t worth it &#8212; that&#8217;s still judgment, just expressed through technical decisions. The stack doesn&#8217;t have a clean separation between &#8220;engineering&#8221; and &#8220;everything else.&#8221;</p><p>What it means is that for most people who came to technology laterally &#8212; through law, finance, a domain specialty, a problem they needed to solve &#8212; the differentiation probably isn&#8217;t at the foundational layer. It&#8217;s in knowing what to build that&#8217;s actually worth building.</p><p>The spatula is cheaper now. The chef is still the chef.</p><div><hr></div><p><em>This is Article 6 in a series on building with AI tools as a non-native technologist &#8212; covering what actually changes when someone without an engineering background starts building products. Previous articles covered financial planning with Claude Code, a framework for city selection, evaluating LLM tools, building the Seattle Nature Access Map, and why judgment was always the bottleneck.</em></p>]]></content:encoded></item><item><title><![CDATA[There Are No Laws, Only Principles]]></title><description><![CDATA[Highlights:]]></description><link>https://thecontractsignal.com/p/there-are-no-laws-only-principles</link><guid isPermaLink="false">https://thecontractsignal.com/p/there-are-no-laws-only-principles</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Sun, 15 Mar 2026 22:48:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="native-audio-embed" data-component-name="AudioPlaceholder" data-attrs="{&quot;label&quot;:null,&quot;mediaUploadId&quot;:&quot;06e4f788-8b8c-4615-8342-2fb25a5ca970&quot;,&quot;duration&quot;:1496.0587,&quot;downloadable&quot;:false,&quot;isEditorNode&quot;:true}"></div><p><strong>Highlights:</strong></p><ul><li><p>All laws are are actually principles applied under certain conditions or assumptions</p></li><li><p>The strength of a principle is a function of how tightly you define the conditions under which it applies &#8212; narrow the scope, strengthen the law</p></li><li><p>Complex systems are hard to predict because multiple counteracting principles operate simultaneously</p></li><li><p>This is why macroeconomics gets predictions wrong repeatedly: too many counteracting principles operating simultaneously</p></li><li><p>The same pattern shows up in machine learning: a model trained on all contracts performs worse than one scoped to a specific contract type</p></li><li><p>And in UX: a design principle that worked for one user group often fails when applied to a different one without re-examining the underlying assumptions</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Judgment Was Always the Bottleneck]]></title><description><![CDATA[This is Article 5 in a series on building with AI tools as a non-native technologist.]]></description><link>https://thecontractsignal.com/p/judgment-was-always-the-bottleneck</link><guid isPermaLink="false">https://thecontractsignal.com/p/judgment-was-always-the-bottleneck</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Sun, 08 Mar 2026 20:01:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>This is Article 5 in a series on building with AI tools as a non-native technologist.</em></p><div><hr></div><p>There&#8217;s a popular narrative being told right now about vibe coding, and it goes roughly like this: coding used to be the bottleneck. Now it isn&#8217;t. The new bottleneck is judgment and taste. If you can think clearly about what to build, the tools will handle the rest.</p><p>It&#8217;s a compelling narrative. But it only tells half the story.</p><p>Not because judgment doesn&#8217;t matter &#8212; it does, enormously, and I&#8217;ll spend most of this article on why. But because the framing implies that judgment is <em>new</em> to the equation. That before vibe coding, the separating factor between great products and mediocre ones was mainly technical execution.</p><p>My re-frame is simpler: judgment was always the bottleneck. Vibe coding just made it visible.</p><div><hr></div><p><strong>What Actually Changed</strong></p><p>Things did change, substantially. Claude Code and similar tools collapsed the barrier to entry for certain categories of development work in a way that prior no-code tools never quite managed. The prototype-to-production gap is narrower than it was. The floor of what a non-engineer can ship went up substantially.</p><p>But here&#8217;s the disconnect: we&#8217;re confusing a change in what we can <em><strong>see</strong></em> as a change in what was <em><strong>present</strong></em>.</p><p>Before widespread vibe coding, poor product judgment was largely contained inside institutions. It existed &#8212; and produced plenty of mediocre features and failed products &#8212; but it was wrapped inside teams at companies, hidden behind proprietary systems, filtered through organizational process. You didn&#8217;t see it at scale in the open.</p><p>Now you do. Thousands of people are shipping publicly, often free, often building in the open. So a much higher volume of things to look at means a much higher volume of poorly crafted things to look at. The ratio of strong products to weak ones was probably always similar. What changed is that you now have a massive lens on all of it, versus a microscope pointed mostly at what large companies chose to release.</p><p>There&#8217;s a marketing layer on top of this too. &#8220;I&#8217;m a builder&#8221; has become the new &#8220;I&#8217;m a disruptor&#8221; &#8212; a buzzword with similar dynamics to disruption a decade ago. When everyone&#8217;s shipping, people pay attention to what gets shipped. The scrutiny goes up alongside the volume. Both effects make judgment failures more visible without changing the underlying rate.</p><p>The story isn&#8217;t &#8220;judgment matters now.&#8221; It&#8217;s &#8220;judgment failures are harder to hide now.&#8221;</p><div><hr></div><p><strong>Judgment Isn&#8217;t New &#8212; It Was Always Load-Bearing</strong></p><p>To understand why, it helps to break down what building something actually requires. At the highest level, three things: knowing <em>what</em> to build, knowing <em>how</em> to build it, and getting it to market.</p><p>The first category &#8212; what to build &#8212; means understanding the problem you&#8217;re solving, for whom, and conceptually how. When I built the nature access map, I was my own first user. I knew the problem in depth because I&#8217;d lived it: I wanted to understand, by neighborhood, which areas of Seattle had parks and trails within walking distance before committing to a move. That gave me a clear problem, a clear user, and a clear mental model of what a useful solution would look like.</p><p>The second category &#8212; how to build &#8212; means going from that concept to something tangible: mock-ups, prototypes, and eventually working code. This is where the LLM tools have changed things most dramatically. Historically, you couldn&#8217;t get to a working prototype at all without substantial technical fluency. Now, for many categories of work, you can describe what you want in plain English and get something functional back.</p><p>The third category &#8212; distribution and commercialization &#8212; means actually getting the product in front of users and, if you&#8217;re building something commercial, making money from it.</p><p>What changed is the second category. What didn&#8217;t change is the first and the third. And the first category &#8212; judgment about what to build, for whom, and why &#8212; was always the harder problem. It&#8217;s just that when the second category was blocking most people entirely, the first category&#8217;s difficulty was invisible. You can&#8217;t expose a judgment problem in something that never gets built.</p><p>I&#8217;ve spent a decade in legaltech, turning contracts into structured data for enterprise customers. The engineering was real &#8212; machine learning models, complex document processing pipelines, large-scale data extraction and classification, and increasingly GenAI-powered tools. But the decisions that actually determined whether the product worked were almost never purely engineering decisions. Was the model accuracy on this clause type sufficient for the risk appetite of an in-house counsel or M&amp;A attorney? Which edge cases would appear infrequently enough that we could accept them, versus which would surface in exactly the situations that mattered most? How did you explain a 92% accuracy rate to a lawyer in a way that mapped to how they actually processed risk?</p><p>Those were judgment calls. They required domain knowledge, pattern recognition, and the ability to translate between technical realities and human contexts. No amount of better tooling would have made them easier. The people who made them well were valuable long before vibe coding existed.</p><div><hr></div><p><strong>The Complexity Matrix No One Is Talking About</strong></p><p>Part of why the popular narrative feels limiting is that it collapses a genuinely complex set of distinctions into a single claim.</p><p>Whether vibe coding meaningfully changes the engineering bottleneck depends entirely on where you are across multiple dimensions at once:</p><p><strong>Internal tool vs. external product.</strong> An internal tool built for yourself has radically different tolerances &#8212; for rough edges, for edge cases, for performance under load. When I built the nature access map, it ran locally, served one user, and if it broke I fixed it. That&#8217;s a completely different problem than a SaaS product with uptime requirements, paying customers and users who aren&#8217;t you.</p><p><strong>Prototype vs. production.</strong> The gap between something that works in a demo and something that works under real conditions &#8212; concurrent users, unexpected inputs, evolving requirements &#8212; remains enormous, and LLMs haven&#8217;t closed it. Prior no-code tools produced a high ratio of prototypes to production-ready products for real reasons. There&#8217;s an honest open question about whether this generation finally crosses that threshold. I think the answer is &#8220;maybe, in limited contexts, but we don&#8217;t fully know yet.&#8221;</p><p><strong>Simple vs. complex use case.</strong> Some design patterns have been solved thoroughly enough that you can implement them at a raised level of abstraction and they&#8217;ll work reliably. Others haven&#8217;t. New interfaces &#8212; AR, voice, novel interaction paradigms &#8212; haven&#8217;t accumulated the solved patterns that web and mobile have built up over decades. What worked on desktop didn&#8217;t always translate to mobile. What works now won&#8217;t automatically translate to whatever comes next. Every new interface introduces substantial new variables and trade-offs.</p><p><strong>Regulated vs. unregulated.</strong> Financial services, legal, healthcare &#8212; these domains introduce constraints that compound complexity in ways that aren&#8217;t just about technical difficulty. The cost of certain failure modes is qualitatively different. The judgment required to navigate those trade-offs is domain-specific in ways that can&#8217;t be substituted by general technical fluency.</p><p><strong>Scale.</strong> A few users is categorically different from a few thousand or a few million. Engineering judgments that produce acceptable outcomes at small scale often produce catastrophic ones at large scale. Latency barely noticeable to one user becomes a UX crisis under load. Data pipelines that work fine on small datasets break in ways that are hard to predict without depth.</p><p>The claim that &#8220;coding is no longer the bottleneck&#8221; may be true in the simplest corner of this matrix &#8212; internal tools, prototype-grade, unregulated, small scale. It becomes progressively less true as you move in any direction.</p><div><hr></div><p><strong>Engineering Judgment Is Still Judgment</strong></p><p>There&#8217;s a subtler problem buried in how &#8220;judgment&#8221; is being used right now: it&#8217;s being treated as a single thing when it&#8217;s actually several.</p><p>Product judgment &#8212; understanding user problems, prioritizing correctly, knowing when good enough is good enough &#8212; that&#8217;s one kind. Design judgment &#8212; taste in visual hierarchy, interaction patterns, information density &#8212; that&#8217;s another. Engineering judgment is another &#8212; and it doesn&#8217;t disappear because LLMs can write code.</p><p>Engineering judgment is knowing that a given API&#8217;s rate limits will create a bad user experience under realistic load, before you find out by watching it fail. It&#8217;s recognizing that a context window limitation will cap what&#8217;s possible for your use case, and structuring your approach accordingly. It&#8217;s knowing when the cost of using an LLM makes it the wrong tool for a particular subtask, even if it would technically work.</p><p>When I was building the nature access map and hit a frontend rendering bug that sent Claude into circles &#8212; each fix creating a new problem &#8212; what broke the loop wasn&#8217;t better prompting. It was recognizing that we needed browser developer tools to surface actual error information, rather than continuing to diagnose from assumptions. That was a judgment call, made by a human, that the LLM hadn&#8217;t arrived at on its own. And this was a simple, single-user, locally-run application. The engineering complexity scales from here fast.</p><p>You can&#8217;t decouple engineering decisions from user experience decisions, or from business decisions. The people who understood this &#8212; who made proactive choices about downstream needs before being asked, who proposed building test infrastructure before it became obviously necessary, who recognized when a technically feasible solution would create maintenance debt that wasn&#8217;t worth it &#8212; were always valuable because of those judgment behaviors. They just happened to express them through engineering work.</p><p>Vibe coding doesn&#8217;t make that less relevant. It reduces the coordination costs of separating judgment from execution across different people. That&#8217;s genuinely useful. It doesn&#8217;t synthesize the judgment.</p><div><hr></div><p><strong>The Economics of It</strong></p><p>When the cost of development decreases, the value of complementary capabilities increases. This is basic economics &#8212; cheaper peanut butter raises demand for jelly &#8212; and it explains why judgment, taste, and domain expertise are getting more attention right now.</p><p>But the implied corollary &#8212; that the previous bottleneck disappears &#8212; doesn&#8217;t follow. It becomes less constraining for simpler cases. It remains fully present for complex ones. And new bottlenecks emerge in places previously masked by the old one.</p><p>When I built the nature access map, part of what made it worth building was that the search cost of finding a tool that answered my specific question exceeded the development cost of building it myself. That math used to reliably go the other direction. Now it sometimes flips. That&#8217;s a real shift &#8212; but one that made domain knowledge more load-bearing, not less. The development cost dropped. The judgment requirements didn&#8217;t.</p><p>There&#8217;s a second economic dynamic worth naming. When anyone can build, the supply of apps proliferates rapidly. At some point supply exceeds demand. And in a buyer&#8217;s market, buyers have two levers: pay less for the same thing, or demand higher quality. These are in tension &#8212; as quality requirements increase, fewer people can meet them, which changes pricing again. But the net effect is that &#8220;good enough&#8221; stops being sufficient in the same way it was when supply was scarce. When you were one of a few people who could ship anything at all, the bar was low by necessity. When thousands of people are shipping similar things, the baseline shifts. The judgment required to clear it doesn&#8217;t go away. It goes up.</p><div><hr></div><p><strong>The Open Question</strong></p><p>We&#8217;ve had &#8220;low-code&#8221; and &#8220;no-code&#8221; tools for years. Their history is consistent: useful for prototypes, insufficient for production, high ratio of demos to shipped products. They lowered the floor without raising the ceiling. People built more things, most of which didn&#8217;t make it.</p><p>The open question is whether this generation of tools &#8212; Claude Code and its successors &#8212; finally crosses that threshold. Whether the production gap will actually be closed for a meaningful range of use cases in a way it wasn&#8217;t before.</p><p>My honest answer is: maybe. Given enough time, probably, for some categories of use cases and some levels of complexity. But we don&#8217;t fully know yet, and the people making the strongest claims &#8212; in either direction &#8212; are probably overstating their case.</p><p>What I do know is that the judgment question isn&#8217;t new. It was always the hard part. The fact that more people can now see it &#8212; because more people can now build things and see the results &#8212; doesn&#8217;t mean it recently emerged from new tools.</p><p>It was always there, hidden in the gap between shipping and shipping something worth using.</p><div><hr></div><p><em>This is Article 5 in a series on building with AI tools as a non-native technologist &#8212; covering my real experiences and observations building products as someone without a formal engineering background. Previous articles covered financial planning with Claude Code, a framework for city selection, using LLM tools to help with a cross-country move, and building the Seattle Nature Access Map.</em></p>]]></content:encoded></item><item><title><![CDATA[I Couldn’t Find the App I Needed, So I Built It. Here’s What I Learned.]]></title><description><![CDATA[I spent weeks asking ChatGPT, Google, and every tool I could find the same question: if I move to this neighborhood, how close is the nearest park I&#8217;d actually use?]]></description><link>https://thecontractsignal.com/p/i-couldnt-find-the-app-i-needed-so</link><guid isPermaLink="false">https://thecontractsignal.com/p/i-couldnt-find-the-app-i-needed-so</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Sun, 01 Mar 2026 20:01:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HWql!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I spent weeks asking ChatGPT, Google, and every tool I could find the same question: if I move to this neighborhood, how close is the nearest park I&#8217;d actually use?</p><p>No one could answer it well.</p><p>Google Maps can route you between two points. LLMs can tell you that Seattle &#8220;has great parks.&#8221; Walk Score can give you a general walkability number. But none of them answered my actual question: for a given block within a given neighborhood, what&#8217;s the walking distance to a meaningful green space?</p><p>So I built it myself.</p><p>This is the story of how a personal frustration during my move from New York to Seattle became my first public app&#8212;built with Claude as a coding partner, shipped as an MVP over a handful of nights and weekends, and designed to answer one specific question that no existing tool answered well.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HWql!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HWql!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.png 424w, https://substackcdn.com/image/fetch/$s_!HWql!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.png 848w, https://substackcdn.com/image/fetch/$s_!HWql!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.png 1272w, https://substackcdn.com/image/fetch/$s_!HWql!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HWql!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.png" width="1456" height="861" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:861,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A map of the united states\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A map of the united states

AI-generated content may be incorrect." title="A map of the united states

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!HWql!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.png 424w, https://substackcdn.com/image/fetch/$s_!HWql!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.png 848w, https://substackcdn.com/image/fetch/$s_!HWql!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.png 1272w, https://substackcdn.com/image/fetch/$s_!HWql!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a712e9-b781-402d-b51b-fb72c7fa761b_2510x1484.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><div><hr></div><h4><strong>Why This Existed as a Problem</strong></h4><p>In my previous articles, I wrote about the framework I used to pick a city and how I used LLMs during the planning process. One of my core criteria was convenient walking access to nature&#8212;not &#8220;nature exists somewhere in the metro area,&#8221; but &#8220;I can walk to a real park in under 15 minutes from my front door.&#8221;</p><p>This mattered to me because of lived experience, not aspiration. Living in New York, I&#8217;d discovered that regular morning walks&#8212;first through Carl Schurz Park, then Central Park&#8212;were one of the highlights of my daily life. I felt measurably better on days I walked. Over time, I realized that a city with great restaurants and nightlife but mediocre park access would be a worse fit for my actual life than a city with fewer amenities but a large park within walking distance.</p><p>The problem was that once I had this criterion, I couldn&#8217;t evaluate it efficiently.</p><p>I did rounds of Google searches. I asked LLMs. I checked existing nature and hiking apps. Nothing quite fit. There are plenty of apps for finding trails or planning hikes&#8212;but I wasn&#8217;t looking for a weekend adventure. I wanted to know: if I live on this block, can I walk to a good park easily? And how does that compare to the next block over, or the next neighborhood?</p><p>That question turns out to be surprisingly hard to answer without building something.</p><div><hr></div><h4><strong>When Finding Is Harder Than Building</strong></h4><p>This experience led me to a realization I hadn&#8217;t expected: for a sufficiently specific personal need, the search costs of finding the right tool can actually exceed the development costs of building one yourself.</p><p>Historically, that wouldn&#8217;t have been true. Building a map-based web app required professional software engineering skills and weeks or months of development time. The rational move was always to search harder, compromise on fit, or just do the research manually.</p><p>But something has shifted. Between vibe coding with LLM tools like Claude, publicly available geographic data, and open-source mapping libraries, the cost of building a simple, personalized tool has dropped dramatically. Meanwhile, the cost of searching&#8212;scrolling through apps that almost-but-don&#8217;t-quite solve your problem, configuring tools not designed for your use case, cobbling together manual research across multiple sources&#8212;hasn&#8217;t changed much.</p><p>For me, the math flipped. I&#8217;d already spent hours on manual research and still didn&#8217;t have what I wanted. Building the thing I actually needed took less additional time than continuing to search for it would have.</p><p>This has broader implications for anyone building with AI tools. As development costs decrease, the value of complementary capabilities increases&#8212;things like judgment about what to build, taste in how it should work and look, and access to the right data. The bottleneck isn&#8217;t &#8220;can I code this?&#8221; anymore. It&#8217;s &#8220;do I understand the problem well enough to build the right thing?&#8221;</p><div><hr></div><h4><strong>What I Built</strong></h4><p>The concept was deliberately simple: a color-coded map of Seattle showing walking distance to parks, broken down by neighborhood and then by census block.</p><p>That&#8217;s it. One question, answered visually, at a glance.</p><p><strong>Why a map and not a report?</strong> I actually tried the text-based approach first. I ran LLM queries and compiled natural language descriptions of each neighborhood&#8217;s park access. It wasn&#8217;t very useful. Geographic and spatial relationships are fundamentally hard to convey in text. &#8220;Wallingford is 0.8 miles from Woodland Park&#8221; is less informative than seeing Wallingford on a map, colored green, with a park icon nearby. The visual format communicates distance, relative position, and comparison across neighborhoods simultaneously&#8212;something that would take paragraphs to express in words and still wouldn&#8217;t land as intuitively.</p><p>This connects to a broader principle I&#8217;ve been thinking about: the right interface depends on the type of information. Natural language works well for conceptual questions and subjective reasoning. But for spatial data, structured comparisons, or anything where relationships between data points matter as much as the data points themselves&#8212;a visual interface is almost always better.</p><p><strong>The flow works like this:</strong></p><p>Start with the city overview. Every neighborhood is color-coded from green (excellent park access) to red (poor access), scored 0&#8211;100. You can see at a glance which areas of Seattle have the best walking access to nature. Hover over a neighborhood and you see its score.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2hWq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585740e0-9aa0-488f-bbd4-d82bc95c2504_2036x1206.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2hWq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585740e0-9aa0-488f-bbd4-d82bc95c2504_2036x1206.png 424w, https://substackcdn.com/image/fetch/$s_!2hWq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585740e0-9aa0-488f-bbd4-d82bc95c2504_2036x1206.png 848w, https://substackcdn.com/image/fetch/$s_!2hWq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585740e0-9aa0-488f-bbd4-d82bc95c2504_2036x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!2hWq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585740e0-9aa0-488f-bbd4-d82bc95c2504_2036x1206.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2hWq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585740e0-9aa0-488f-bbd4-d82bc95c2504_2036x1206.png" width="1456" height="862" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/585740e0-9aa0-488f-bbd4-d82bc95c2504_2036x1206.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:862,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A map of different colored areas\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A map of different colored areas

AI-generated content may be incorrect." title="A map of different colored areas

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!2hWq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585740e0-9aa0-488f-bbd4-d82bc95c2504_2036x1206.png 424w, https://substackcdn.com/image/fetch/$s_!2hWq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585740e0-9aa0-488f-bbd4-d82bc95c2504_2036x1206.png 848w, https://substackcdn.com/image/fetch/$s_!2hWq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585740e0-9aa0-488f-bbd4-d82bc95c2504_2036x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!2hWq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F585740e0-9aa0-488f-bbd4-d82bc95c2504_2036x1206.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>Click into a neighborhood. Now you see the individual census blocks within it, each with its own color and score. This matters because neighborhood averages can be misleading&#8212;a neighborhood might score 65 overall, but the blocks closest to a park could be 85+ while blocks on the far edge might be 35.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xzRA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e00322a-7542-42c1-8a1c-57814100de58_2704x1404.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xzRA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e00322a-7542-42c1-8a1c-57814100de58_2704x1404.png 424w, https://substackcdn.com/image/fetch/$s_!xzRA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e00322a-7542-42c1-8a1c-57814100de58_2704x1404.png 848w, https://substackcdn.com/image/fetch/$s_!xzRA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e00322a-7542-42c1-8a1c-57814100de58_2704x1404.png 1272w, https://substackcdn.com/image/fetch/$s_!xzRA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e00322a-7542-42c1-8a1c-57814100de58_2704x1404.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xzRA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e00322a-7542-42c1-8a1c-57814100de58_2704x1404.png" width="1456" height="756" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0e00322a-7542-42c1-8a1c-57814100de58_2704x1404.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:756,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A map of a city\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A map of a city

AI-generated content may be incorrect." title="A map of a city

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!xzRA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e00322a-7542-42c1-8a1c-57814100de58_2704x1404.png 424w, https://substackcdn.com/image/fetch/$s_!xzRA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e00322a-7542-42c1-8a1c-57814100de58_2704x1404.png 848w, https://substackcdn.com/image/fetch/$s_!xzRA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e00322a-7542-42c1-8a1c-57814100de58_2704x1404.png 1272w, https://substackcdn.com/image/fetch/$s_!xzRA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e00322a-7542-42c1-8a1c-57814100de58_2704x1404.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>Click a specific block. You see the address, the nature access score, the nearest park name, the distance, the block area, and a link to view it on Google Maps.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WjFi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e071aac-e948-415d-b816-ef0004727c2d_2682x1452.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WjFi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e071aac-e948-415d-b816-ef0004727c2d_2682x1452.png 424w, https://substackcdn.com/image/fetch/$s_!WjFi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e071aac-e948-415d-b816-ef0004727c2d_2682x1452.png 848w, https://substackcdn.com/image/fetch/$s_!WjFi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e071aac-e948-415d-b816-ef0004727c2d_2682x1452.png 1272w, https://substackcdn.com/image/fetch/$s_!WjFi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e071aac-e948-415d-b816-ef0004727c2d_2682x1452.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WjFi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e071aac-e948-415d-b816-ef0004727c2d_2682x1452.png" width="1456" height="788" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e071aac-e948-415d-b816-ef0004727c2d_2682x1452.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:788,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screenshot of a map\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screenshot of a map

AI-generated content may be incorrect." title="A screenshot of a map

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!WjFi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e071aac-e948-415d-b816-ef0004727c2d_2682x1452.png 424w, https://substackcdn.com/image/fetch/$s_!WjFi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e071aac-e948-415d-b816-ef0004727c2d_2682x1452.png 848w, https://substackcdn.com/image/fetch/$s_!WjFi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e071aac-e948-415d-b816-ef0004727c2d_2682x1452.png 1272w, https://substackcdn.com/image/fetch/$s_!WjFi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e071aac-e948-415d-b816-ef0004727c2d_2682x1452.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 whole thing follows a principle called progressive disclosure: show the minimum useful information first, then let people drill deeper based on what they care about. For someone just exploring neighborhoods, the city overview is enough. For someone evaluating a specific apartment, the block-level detail is what matters.</p><div><hr></div><h4><strong>How I Built It (And What Was Harder Than Expected)</strong></h4><p>I used Claude as my coding partner for the entire build. The overall process followed what most people describe as vibe coding: provide a high-level plan, iterate step by step, and make trade-off decisions along the way.</p><p><strong>The plan was conceptually simple.</strong> I needed three things: data (parks, neighborhoods, geographic boundaries), a frontend (the map interface), and backend logic (calculating distances, generating scores, connecting everything). This is essentially the model-view-controller pattern&#8212;data, interface, and logic working together.</p><p><strong>Where it got interesting was the trade-offs.</strong></p><p>The data layer was the biggest source of real decisions&#8212;not because getting data was impossible, but because every data choice had downstream consequences.</p><p>First, how do you define a &#8220;park&#8221;? Is a 2-acre playground sufficient? What about a botanical garden? A greenway? For MVP, I kept it simple: parks above a minimum size threshold, focused on the kind of green space you&#8217;d actually walk through for 20+ minutes. That meant leaving out some edge cases, but it kept the scope manageable.</p><p>Second, where does the data come from? Publicly available geographic datasets exist, but they come with trade-offs: API rate limits, licensing restrictions, varying data quality, and inconsistent naming conventions across sources. Park data uses one taxonomy. Neighborhood boundary data uses another. Census block data uses yet another. Making these work together required judgment calls&#8212;how to define neighborhood boundaries, how to handle edge cases where a block spans two neighborhoods, what to do when data sources disagree.</p><p>Third, how do you serve the data? Making live API requests for every user interaction would be slow and fragile&#8212;and could hit rate limits fast if multiple people use the app simultaneously. So I downloaded the data upfront and serve it locally. For an MVP with a small user base, this works well and keeps the experience fast. Scaling would require a different approach, but that&#8217;s a future problem.</p><p><strong>The frontend was where taste mattered most.</strong> The color scheme, the scoring scale, the level of detail in the popup, the decision to show census blocks rather than arbitrary grid squares&#8212;these are all judgment calls that determine whether the app feels useful or confusing. No amount of coding skill replaces knowing what the user (in this case, initially me) actually wants to see.</p><p><strong>The backend logic surfaced subtle complexity.</strong> Distance calculations between geographic points aren&#8217;t as straightforward as they appear&#8212;coordinate systems, projection methods, and the difference between straight-line distance and walking distance all matter. For MVP, I used a reasonable approximation that&#8217;s good enough for &#8220;is this a 5-minute walk or a 20-minute walk?&#8221; If I need higher precision later, I can refine it.</p><div><hr></div><h4><strong>Where Vibe Coding Helped&#8212;and Where It Didn&#8217;t</strong></h4><p>Building with Claude as a coding partner was significantly faster than building alone would have been. The LLM was particularly good at generating boilerplate code for map rendering and data processing, suggesting library choices and architectural patterns, helping debug issues when I could describe the problem clearly, and handling repetitive tasks like data formatting and conversion.</p><p>Where it struggled was when problems required context that&#8217;s hard to express in a prompt. For example, I hit a rendering bug where the frontend wasn&#8217;t displaying blocks correctly. Claude tried multiple fixes, each of which introduced a new problem&#8212;we went in circles. What eventually broke the loop was me suggesting we use browser developer tools to inspect the actual errors, which gave us concrete diagnostic information to work with. In another case, a more capable model release solved a problem the previous model couldn&#8217;t crack.</p><p>This reinforced something I&#8217;ve come to believe through this process: understanding computer science fundamentals matters, even in a vibe coding world. Not because you need to write every line yourself, but because when something breaks&#8212;and it will&#8212;you need enough understanding to diagnose the problem, ask the right questions, and evaluate whether the LLM&#8217;s proposed fix makes sense. If you abstract away all understanding of how the system works, you&#8217;re stuck the moment something goes wrong.</p><p>That said, I want to be honest about the tradeoff: for a simple, single-user application like this, the fundamentals matter less than they would for a production system serving thousands of users. The stakes of a bug are low. The complexity is manageable. If you&#8217;re building something for yourself and learning as you go, vibe coding is a remarkably effective way to do both simultaneously. Just know that the further you scale&#8212;more users, more data, more features&#8212;the more that underlying understanding pays off.</p><div><hr></div><h4><strong>Lessons Learned</strong></h4><p><strong>Build for yourself first, then share.</strong> I built this because I genuinely wanted it. That meant I understood the problem deeply, had strong opinions about what the solution should look like, and could evaluate quality without user testing. Solving your own problem is the fastest path to a useful product.</p><p><strong>Start with one question.</strong> The app answers one question: how walkable is the nearest park from this location? Every feature decision flowed from that. When I was tempted to add hiking trail data, transit overlays, or restaurant proximity, I asked: does this help answer the core question? If not, it&#8217;s post-MVP.</p><p><strong>Data is the real bottleneck, not code.</strong> The most time-consuming part wasn&#8217;t writing code&#8212;it was finding reliable data sources, understanding their limitations, reconciling different taxonomies, and making judgment calls about quality. As vibe coding makes development easier, data access and data quality become key differentiators for applications.</p><p><strong>The right interface matters more than the right model.</strong> I tried answering this question with LLMs (natural language), with manual research (spreadsheets and notes), and with a visual map. The map won&#8212;not because it has more information, but because it presents spatial information in the format humans process most naturally. Choosing the right interface for your information type is a design decision that no amount of better AI can substitute for.</p><p><strong>Ship the MVP, then iterate.</strong> The current version has rough edges. The scoring could be more sophisticated. The data could be more comprehensive. The styling could be more polished. None of that matters as much as having a working tool that answers the core question. Everything else is refinement.</p><div><hr></div><h4><strong>What&#8217;s Next</strong></h4><p>The immediate plan is to continue refining the app&#8212;improving the interface, exploring additional cities, and seeing whether other people find it as useful as I do.</p><p>But the bigger takeaway from this experience is about a shift that&#8217;s happening in who can build useful tools. A few years ago, building a map-based web application required a team of engineers. Today, a product manager with some CS background and an LLM coding partner can ship a functional MVP in weeks.</p><p>That doesn&#8217;t mean the engineering is trivial. It means the barrier to entry has moved. The scarce resource is no longer &#8220;can you code it&#8221; but &#8220;do you understand the problem well enough, and do you have the judgment to make the right trade-offs?&#8221;</p><p>For me, this started as solving my own problem. It turned into my first public app. And it taught me more about building products than years of managing them from the other side of the table.</p><p>The app is available here: <a href="https://seattle-nature-access-map-lp.netlify.app/">nature-access-map</a>.</p><p><em>This is the fourth article in a series. <a href="https://leonidprilutskiy.substack.com/p/claude-code-for-financial-planning?r=1iyonb">Article 1</a> covered using Claude Code for financial planning. <a href="https://leonidprilutskiy.substack.com/p/i-spent-10-years-in-the-wrong-city?r=1iyonb">Article 2</a> covered the framework I used to evaluate potential cities to move to. <a href="https://leonidprilutskiy.substack.com/p/i-used-chatgpt-and-claude-to-help?r=1iyonb">Article 3</a> covered where LLMs helped and failed during the planning process.</em></p>]]></content:encoded></item><item><title><![CDATA[I Used ChatGPT and Claude to Help Pick a New City. Here’s Where They Helped—and Where They Didn’t.]]></title><description><![CDATA[This is the third article in a series on using AI tools for real-world decisions.]]></description><link>https://thecontractsignal.com/p/i-used-chatgpt-and-claude-to-help</link><guid isPermaLink="false">https://thecontractsignal.com/p/i-used-chatgpt-and-claude-to-help</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Mon, 23 Feb 2026 02:26:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>This is the third article in a series on using AI tools for real-world decisions. <a href="https://open.substack.com/pub/leonidprilutskiy/p/claude-code-for-financial-planning?r=1iyonb&amp;utm_campaign=post&amp;utm_medium=web">Article 1</a> covered using Claude Code for financial planning. <a href="https://leonidprilutskiy.substack.com/p/i-spent-10-years-in-the-wrong-city?r=1iyonb">Article 2</a> covered the framework I used to evaluate cities based on my actual day-to-day life.</em></p><div><hr></div><p>I asked ChatGPT for the best cities to live in matching my criteria.</p><p>It gave me Portugal.</p><p>I asked for mild weather.</p><p>It gave me South Carolina.</p><p>That&#8217;s when I realized: LLMs are powerful research tools, but they&#8217;re solving for the average person&#8212;not for you.</p><p>Over three months of planning a cross-country move, I learned exactly where AI tools help and where they fail. The key wasn&#8217;t finding the &#8220;right prompt.&#8221; It was understanding which parts of the problem are objective&#8212;and which are subjective&#8212;and treating them completely differently.</p><p>Here&#8217;s what I found.</p><div><hr></div><h3><strong>The Real Problem: Your Criteria Aren&#8217;t as Clear as You Think</strong></h3><p>When I started this process, I had what I thought were well-defined criteria: mild weather, walkability, access to nature, reasonable cost of living.</p><p>But here&#8217;s the thing&#8212;most of those words don&#8217;t actually mean anything specific.</p><p>&#8220;Mild weather&#8221; means something different if you walk everywhere carrying groceries versus if you drive. I&#8217;ve done both. I&#8217;ve walked through Atlanta summers carrying grocery bags, and I can tell you that 85&#176;F with humidity when you&#8217;re on foot for 20 minutes is a fundamentally different experience than 85&#176;F when you&#8217;re stepping from an air-conditioned car into an air-conditioned store.</p><p>&#8220;Walkability&#8221; means something different if you work remotely and mainly care about parks and errands versus if you commute downtown daily.</p><p>&#8220;Access to nature&#8221; means something different if you want weekend alpine hikes versus a daily walk through a 50+ acre park within 15 minutes of your front door.</p><p>The hard part isn&#8217;t that these criteria are wrong. It&#8217;s that they contain hidden assumptions&#8212;and you often don&#8217;t realize it until you get results that feel off.</p><p>Part of the reason is that many preferences are internalized. You don&#8217;t actively think about them. They&#8217;re visceral. You know the Atlanta summer grocery run feels bad, but you might not think to tell an LLM, &#8220;I walk to the grocery store three times a week and I carry bags, so your temperature recommendation needs to account for extended pedestrian exposure in humidity.&#8221; That level of context doesn&#8217;t come naturally.</p><p>It&#8217;s similar to how a UX researcher has to coax out a user&#8217;s real workflow&#8212;people don&#8217;t volunteer the details that matter most because those details feel obvious to them.</p><div><hr></div><h3><strong>The Insight That Changed Everything: Objective vs. Subjective</strong></h3><p>After weeks of getting well-intentioned but unhelpful results, I noticed a pattern.</p><p>LLMs performed very differently depending on whether my question was <strong>objective</strong> or <strong>subjective</strong>&#8212;and much of the frustration came from treating subjective questions as if they were objective.</p><p><strong>Objective questions</strong> have verifiable, well-structured answers. Historical temperature data. Cost-of-living indices. Transit system maps. Average precipitation by month. These are previously solved, commonly asked, publicly available, and quantifiable. LLMs are excellent at these&#8212;often as good as or better than manual research because they can synthesize across sources quickly.</p><p><strong>Subjective questions</strong> involve personal interpretation, context-dependent meaning, or ambiguous language. &#8220;Is it mild?&#8221; &#8220;Is this neighborhood walkable?&#8221; &#8220;Is there good nature access?&#8221; These feel like they should have clear answers, but they don&#8217;t&#8212;because the answer depends on who&#8217;s asking and why.</p><p>The mistake I kept making was asking subjective questions and expecting objective answers.</p><p>When I asked for cities with &#8220;mild weather,&#8221; the LLM had to interpret &#8220;mild.&#8221; Its interpretation was reasonable&#8212;but it wasn&#8217;t mine. South Carolina has mild winters. It also has summers that would make my grocery walks miserable. The LLM didn&#8217;t know that because I hadn&#8217;t connected the dots between &#8220;mild&#8221; and &#8220;I walk carrying bags in the heat.&#8221;</p><p>This distinction&#8212;objective vs. subjective&#8212;became the foundation for everything else I did.</p><div><hr></div><h3><strong>Working With Objective Criteria: Let the LLM Do the Heavy Lifting</strong></h3><p>For objective criteria, LLMs were genuinely excellent.</p><p>Once I learned to ask for data instead of adjectives, the quality of answers jumped dramatically.</p><p>Instead of: <em>&#8220;Which of these cities has mild weather?&#8221;</em></p><p>I asked: <em>&#8220;For each of these 15 cities, what is the average, median, and range of monthly high temperatures over the last 5 years? Include humidity and precipitation.&#8221;</em></p><p>Instead of: <em>&#8220;Is Raleigh walkable?&#8221;</em></p><p>I asked: <em>&#8220;What is Raleigh&#8217;s Walk Score? What percentage of residents commute without a car?&#8221;</em></p><p>The principle is simple: if a question can be answered with publicly available, well-structured data, ask for the data directly. Don&#8217;t ask the LLM to interpret it for you.</p><p>This worked well for criteria like temperature ranges, cost-of-living comparisons, transit infrastructure, general park and green space data, and airport access and logistics.</p><p>The results weren&#8217;t always perfect&#8212;LLMs can be confidently wrong on specifics, and data can be outdated&#8212;but they were directionally reliable. Good enough to build a shortlist. Good enough to eliminate obvious misfits.</p><div><hr></div><h3><strong>Working With Subjective Criteria: That&#8217;s Your Job (But LLMs Can Help You Think)</strong></h3><p>The subjective criteria were where things got interesting&#8212;and where I had to change my approach entirely.</p><p>For these, the LLM&#8217;s role shifted from &#8220;researcher&#8221; to &#8220;thought partner.&#8221; Instead of asking it to give me answers, I used it to help me figure out what my questions actually meant.</p><p><strong>Technique 1: Benchmark against cities you know.</strong></p><p>Rather than trying to define &#8220;mild&#8221; in the abstract, I used cities I&#8217;d actually lived in as reference points.</p><p><em>&#8220;I&#8217;ve lived in New York and Atlanta. Compare the summer pedestrian experience in Raleigh, Seattle, and Pittsburgh to those two cities&#8212;specifically for someone who walks daily and carries groceries.&#8221;</em></p><p>This forced specificity. The LLM couldn&#8217;t hide behind &#8220;mild climate.&#8221; It had to compare against my actual lived experience.</p><p><strong>Technique 2: Ask yourself why&#8212;and tell the LLM.</strong></p><p>When I caught myself using a vague word, I&#8217;d ask: why do I actually care about this?</p><p>&#8220;Mild weather&#8221;&#8212;why? Because I walk for exercise and errands daily. Because I don&#8217;t want to dread going outside for four months of the year. Because I don&#8217;t want to rely on AC or heating as a coping mechanism for a climate I fundamentally don&#8217;t enjoy.</p><p>Each of those &#8220;becauses&#8221; translates into a more specific, testable question. And once I fed that context to the LLM, the recommendations improved noticeably.</p><p><strong>Technique 3: Pressure-test with specific examples.</strong></p><p>When an LLM told me a city had &#8220;good nature access,&#8221; I&#8217;d follow up: <em>&#8220;What specific parks are within 20 minutes walking distance of downtown? How large are they? Do they have trails or is it a playground?&#8221;</em></p><p>The specifics often revealed that &#8220;good nature access&#8221; meant something very different from what I needed. A city park with a playground and a walking loop is not the same as a 300-acre urban forest with trail networks. Both are technically &#8220;nature access.&#8221;</p><p>This is actually a pattern I recognized from a previous career chapter. Years ago, I managed machine learning annotation projects&#8212;labeling training data for AI models. Even with seemingly well-defined categories, annotators would apply labels subjectively. The fix was always the same: go through specific examples, compare them, explain your reasoning, surface the disagreements, and refine the criteria. The same principle applies when you&#8217;re &#8220;annotating&#8221; your own preferences for an LLM.</p><div><hr></div><h3><strong>The Division of Labor</strong></h3><p>After a few weeks, a clear division of labor emerged:</p><p><strong>I used LLMs for</strong> thought partnership to pressure-test my criteria, researching and summarizing candidates against those criteria, helping me narrow down on specific dimensions, drafting checklists (apartment tours, moving logistics, donation steps), and estimating logistics and surfacing things I might be missing.</p><p><strong>I kept for myself</strong> defining what I actually want and how to prioritize it, calibrating subjective labels (&#8221;mild,&#8221; &#8220;walkable,&#8221; &#8220;quiet&#8221;), verifying anything that could cost money or time, and running real-world tests (walking neighborhoods, simulating daily life, trying errands).</p><p>The frame that made it click: LLMs are great at research, organization, and estimation. They&#8217;re not built for judgment&#8212;and personal decisions are mostly judgment.</p><p>Once I internalized this, the tool stopped being a frustrating &#8220;decision maker&#8221; and became a genuine force multiplier.</p><div><hr></div><h3><strong>Top-Down First, Then Bottom-Up</strong></h3><p>A mistake I made early was trying to get the perfect answer in one shot.</p><p>What worked was a two-phase approach:</p><p><strong>Top-down (cast a wide net):</strong> I asked for 20&#8211;40 candidate cities given my criteria. I deliberately wanted a long list with false positives, because false negatives are more costly&#8212;if you never consider a city, you never discover it&#8217;s a fit.</p><p>At this stage, I accepted messy, imperfect results. The goal wasn&#8217;t precision. It was coverage&#8212;and using the results to refine my own thinking about what mattered.</p><p><strong>Bottom-up (go deep on the shortlist):</strong> Once I&#8217;d narrowed to a handful of cities, I shifted to targeted, specific queries. Neighborhood-level research. Specific parks, transit routes, grocery stores. Temperature data by month. This is where the objective/subjective framework paid off most&#8212;I knew which questions to ask the LLM (data) and which to answer myself (judgment).</p><p>The key insight: city-level averages hide neighborhood-level reality.</p><p>A city can be &#8220;unwalkable&#8221; overall and still have pockets that are perfect for a car-free lifestyle. Or the reverse. So I treated each promising city&#8217;s neighborhoods as a separate research problem&#8212;and that&#8217;s actually where the decision happened.</p><p><strong>Where LLMs Consistently Fell Short</strong></p><p>A few patterns emerged:</p><p><strong>Ambiguous terms without operationalization.</strong> Every time I used a word like &#8220;mild,&#8221; &#8220;safe,&#8221; &#8220;quiet,&#8221; or &#8220;diverse&#8221; without defining it, I got generic results. The fix was always the same: replace adjectives with numbers, ranges, or specific examples.</p><p><strong>Hidden assumptions.</strong> The LLM would assume I had a car, or that &#8220;affordable&#8221; meant a certain range, or that &#8220;city&#8221; meant metro area rather than a specific neighborhood. The fix: ask the model to list its assumptions, or preempt by stating constraints (&#8221;assume no car,&#8221; &#8220;budget is Y&#8221;).</p><p><strong>Trade-off weighting.</strong> If you ask an LLM to optimize across 10 criteria simultaneously, you&#8217;re asking it to make value judgments about your life. It can&#8217;t do that. The fix: ask for a longer list with trade-offs noted, and do the weighting yourself.</p><p><strong>Freshness and specificity.</strong> LLMs can be confidently wrong on details that change&#8212;pricing, availability, neighborhood dynamics. The fix: treat every output as a lead to verify, not a fact to trust.</p><div><hr></div><h3><strong>The Limits of Research (And Why Real-World Testing Matters)</strong></h3><p>At some point, no amount of prompting eliminates uncertainty. You have to test.</p><p>I found that the best way to reduce uncertainty was simply visiting&#8212;or simulating a visit as closely as possible. Walking the actual routes I&#8217;d walk. Checking the actual grocery stores I&#8217;d use. Riding the actual transit I&#8217;d depend on.</p><p>This is also where I learned that not everything should be an LLM conversation. Some questions are better answered by a map. Some by a transit app. Some by walking around for an hour.</p><p>I actually started building a tool for one of these gaps&#8212;a neighborhood park access map that shows walking distance to parks at the block level&#8212;because it was a question I kept asking that no existing tool (including LLMs) answered well. I&#8217;ll share more about that in the next article.</p><p>The principle: LLMs generate hypotheses. Targeted tools and real-world experience verify them.</p><div><hr></div><h3><strong>What I&#8217;d Do Differently</strong></h3><p>If I were starting this process from scratch, I&#8217;d do three things earlier:</p><p><strong>First, separate objective from subjective criteria on day one.</strong> This alone would have saved me weeks of frustration. Objective criteria get delegated to the LLM immediately. Subjective criteria get a &#8220;define what I actually mean&#8221; session before any research happens.</p><p><strong>Second, use benchmark cities from the start.</strong> Instead of trying to define preferences in the abstract, ground everything in places you&#8217;ve actually experienced. It&#8217;s faster and more reliable.</p><p><strong>Third, go neighborhood-level sooner.</strong> City-level research is useful for elimination, but the decision lives at the neighborhood level. I spent too long comparing cities when I should have been comparing neighborhoods within the top 3&#8211;5.</p><div><hr></div><h3><strong>Conclusion</strong></h3><p>Using LLMs for this move didn&#8217;t eliminate uncertainty. Moving is still a leap.</p><p>What it did was compress the process&#8212;from fuzzy to structured, from overwhelming to manageable, from &#8220;I don&#8217;t even know where to start&#8221; to &#8220;I have a clear shortlist and I know what to test.&#8221;</p><p>The trick was learning that the most important skill isn&#8217;t prompting. It&#8217;s knowing which parts of the problem are yours to solve&#8212;and using the tool to handle everything else.</p><p>LLMs are great at helping you think. They&#8217;re great at helping you research and organize.</p><p>They&#8217;re not great at being you.</p><p><em>Next article: I built a neighborhood park access map because no existing tool answered my question. Here&#8217;s what I learned about going from an internal tool to a public product.</em></p>]]></content:encoded></item><item><title><![CDATA[I Spent 10 Years in the Wrong City. Here’s The Framework I Wish I Had.]]></title><description><![CDATA[Conventional wisdom on selecting cities tends to be overly generic.]]></description><link>https://thecontractsignal.com/p/i-spent-10-years-in-the-wrong-city</link><guid isPermaLink="false">https://thecontractsignal.com/p/i-spent-10-years-in-the-wrong-city</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Mon, 16 Feb 2026 03:22:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Conventional wisdom on selecting cities tends to be overly generic.</p><p>I know this because I spent ten years living in a New York City &#8211; a city that looks great on paper.</p><p>It&#8217;s globally recognized, full of opportunity, and has every possible convenience. And yet, over time, it just didn&#8217;t feel right for me.</p><p>It wasn&#8217;t a bad experience. It just felt like I was in the wrong place for reasons I couldn&#8217;t quite articulate.</p><p>I&#8217;d had this feeling for a long time.</p><p>But given the range of possible cities to choose from, the uncertainty and ambiguity around them, and a wide range of experiences being reported&#8230;</p><p>Information overload and decision paralysis followed.</p><p>Combine that with psychological tendencies towards pain avoidance (the delightful moving process) and doubt avoidance (how do I even know the new city will be better?) &#8211; and slight variations of the status quo becomes the norm.</p><p>I.e. stay in the same city.</p><p>When I started planning a possible move late last year, I tried to address this by getting advice from both people who knew me (and of course, LLMs).</p><p>The advice was well-intentioned but mostly unhelpful.</p><p>Not that I felt like anyone was trying to mislead me&#8212;but because the advice wasn&#8217;t personalized to my life. People were giving me recommendations filtered through <em>their</em> definitions of what matters.</p><p>Someone says, &#8220;Don&#8217;t move to Seattle, it rains a lot.&#8221;</p><p>Someone else says, &#8220;You should move to Nashville or Austin.&#8221; When pressed, it&#8217;s because they took a two-day business trip, went to great restaurants, and enjoyed the vibe.</p><p>Even well-vetted advice can be wrong in context. When I lived in Atlanta for a few years, the default line was: <em>you need a car.</em> Maybe that&#8217;s true for many lifestyles. It wasn&#8217;t true for mine. What mattered more was how I actually spent my day: school, studying, errands, gym, basic routines.</p><p>I lived near where I needed to be, walked more than most people assumed, and used taxis and rideshares strategically. In Atlanta, monthly parking was $~150. Ubers averaged less than $20/week.</p><p>The city&#8217;s reputation didn&#8217;t match my lived experience&#8212;because my routine didn&#8217;t match the &#8220;average&#8221; routine implied by the reputation.</p><p>That&#8217;s the fundamental problem:</p><p><strong>Most advice about choosing a city fails because it isn&#8217;t personalized.</strong></p><p>The good news is: this is solvable.</p><p>It just requires a framework that starts with your real day-to-day life.</p><div><hr></div><p><strong>Step 1: Audit your day-to-day (the foundational move)</strong></p><p>Before you research cities, ask a simpler question:</p><p><strong>What does my life actually look like right now?</strong></p><p>For a couple weeks, track your routine at a practical level. Not &#8220;I value health.&#8221; Not &#8220;I love nature.&#8221; The actual sequence:</p><ul><li><p>Do you work remotely or commute? If you do commute, how?</p></li><li><p>How often do you leave the house on weekdays?</p></li><li><p>Do you cook, buy pre-cooked meals, or mostly eat out?</p></li><li><p>What errands happen weekly (groceries, pharmacy, gym, laundry)?</p></li><li><p>What do you do on weekends when you have free time?</p></li><li><p>What do you do for fun / to blow off steam?</p></li></ul><p>This is where people get tripped up. They choose cities based on identity (&#8220;I&#8217;m a nature person&#8221;), aspiration (&#8220;I&#8217;m going to hike every weekend&#8221;), or aesthetics (&#8220;I want charm&#8221;).</p><p>None of those are inherently wrong.</p><p>But they&#8217;re unreliable inputs if they aren&#8217;t grounded in practical behavior and habits.</p><p>One of the biggest insights I had was realizing that some &#8220;preferences&#8221; were actually <em>requirements</em> for my mood, health, and productivity&#8212;and some things I thought mattered were mostly nice-to-haves.</p><p>Example: nature access. It didn&#8217;t become real for me because I wrote it down as a value. It became real when I started walking in the park regularly&#8212;early, even when it was cold, even when the weather wasn&#8217;t ideal. That behavior was evidence. It told me: this isn&#8217;t a nice-to-have or a fantasy. It&#8217;s a proven requirement for my wellbeing.</p><div><hr></div><p><strong>Step 2: Turn your routine into criteria (make it testable)</strong></p><p>Once you understand your day-to-day, convert it into criteria that are specific enough to evaluate.</p><p>Start with broad categories (most people share these):</p><ul><li><p>Cost of living (true cost, not just rent)</p></li><li><p>Housing (size, age, noise, amenities)</p></li><li><p>Employment</p></li><li><p>Food access (diet, convenience)</p></li><li><p>Walkability and transportation</p></li><li><p>Healthcare access (if relevant)</p></li><li><p>Weather (what you enjoy, tolerate or dislike)</p></li><li><p>Access to nature</p></li><li><p>Safety (as you define it)</p></li><li><p>Logistics (airports, shipping, family visits, errands)</p></li><li><p>Density / stimulation (do you want energy or calm?)</p></li></ul><p>Then make them <strong>concrete</strong>. &#8220;Access to nature&#8221; is not a criterion. It&#8217;s a label.</p><p>A criterion is something you can test, like:</p><ul><li><p>&#8220;Within a 15-minute walk: a park I&#8217;d actually use.&#8221;</p></li><li><p>&#8220;I can do 80% of my weekly errands without a car.&#8221;</p></li><li><p>&#8220;My grocery options support how I actually eat (not how I wish I ate).&#8221;</p></li><li><p>&#8220;Rent + utilities + predictable &#8216;extras&#8217; fit within my comfort range.&#8221;</p></li><li><p>&#8220;Noise and stress in the home environment stay below a threshold.&#8221;</p></li></ul><p>The point is not to create a perfect scoring system. The point is to stop making decisions based on vibes you can&#8217;t operationalize.</p><div><hr></div><p><strong>Step 3: Prioritize (must-haves vs nice-to-haves, reality vs aspiration)</strong></p><p>Now the real work: prioritization.</p><p>People frequently confuse a preference with a requirement.</p><p>A <strong>must-have</strong> is a constraint you can&#8217;t realistically violate without breaking the move:</p><ul><li><p>budget reality</p></li><li><p>commute requirements (if you have them)</p></li><li><p>core health needs</p></li><li><p>housing necessities (space, noise insulation, safety, etc.)</p></li><li><p>logistics you can&#8217;t wish away</p></li></ul><p>A <strong>nice-to-have</strong> is something you want, but could sacrifice if other wins are strong.</p><p>A second consideration matters just as much: <strong>Daily needs vs episodic needs.</strong></p><p>Daily needs dominate your happiness because they repeat. A great restaurant scene matters less if you eat at home 90% of the time. A world-class airport matters less if you fly twice a year. On the flip side, if you travel constantly, the airport becomes a daily-life consideration.</p><p>Finally: <strong>Current reality vs future aspiration.</strong></p><p>If you aren&#8217;t exercising now, don&#8217;t overweight &#8220;strong fitness culture&#8221; as the deciding factor. That doesn&#8217;t mean you can&#8217;t change&#8212;but it means you should be honest about the likelihood that a move alone will change you.</p><p>A useful test here:</p><ul><li><p>If this criterion disappeared, would I be mildly disappointed&#8212;or miserable?</p></li><li><p>If I got &#8220;good enough&#8221; here, would that free me to prioritize other things?</p></li></ul><div><hr></div><p><strong>Step 4: Apply the framework to your current city first</strong></p><p>As with any experiment &#8211; having a benchmark or starting point is best.</p><p>Run the framework on where you currently live:</p><ul><li><p>What works well?</p></li><li><p>What&#8217;s constantly annoying?</p></li><li><p>What are you compensating for with money, time, or stress?</p></li><li><p>Which friction points keep showing up?</p></li></ul><p>This is how you learn what you&#8217;re <em>actually trying to change</em>.</p><p>For me, this is also helped flesh out interdependencies. The living environment affects stress. Stress affects sleep. Sleep affects diet. Diet affects health. Health affects productivity. Productivity affects earning power and confidence. Suddenly the city choice isn&#8217;t just lifestyle&#8212;it&#8217;s downstream of everything.</p><div><hr></div><p><strong>Step 5: Research cities&#8212;but evaluate at the neighborhood level</strong></p><p>Here&#8217;s a simple truth that collapses a lot of noise:</p><p><strong>Most cities aren&#8217;t one experience. They&#8217;re a bundle of neighborhoods.</strong></p><p>Even in cities with strong overall characteristics, your day-to-day is determined by:</p><ul><li><p>where you live</p></li><li><p>where you work</p></li><li><p>what&#8217;s within walking distance</p></li><li><p>how you move around</p></li><li><p>what your immediate environment feels like</p></li></ul><p>Atlanta has walkable areas. It has areas where you can live without a car. It also has areas where that would be miserable. &#8220;Atlanta&#8221; as a single recommendation is meaningless without the neighborhood.</p><p>Same for Seattle. Same for NYC. Same for almost anywhere that isn&#8217;t tiny.</p><p>A practical research method that helped me:</p><ul><li><p>List cities you think you&#8217;d like</p></li><li><p>Also list cities you&#8217;re confident you wouldn&#8217;t</p></li><li><p>Use the contrast to refine your constraints (e.g., &#8220;I don&#8217;t tolerate extreme heat&#8221; or &#8220;I don&#8217;t want months of sub-freezing temperatures&#8221;)</p></li></ul><div><hr></div><p><strong>Step 6: Down-select to 3&#8211;10 options (then stop browsing)</strong></p><p>At some point, &#8220;more research&#8221; becomes procrastination.</p><p>Build a shortlist. For me, it included places like Boulder, Denver, Nashville, Seattle, Santa Clara, San Francisco, Oakland, Chicago, Tampa, Raleigh, Bellevue.</p><p>Your list will differ. That&#8217;s the whole point.</p><p>Use a simple rule:</p><ul><li><p>Must-haves = pass/fail</p></li><li><p>Nice-to-haves = 1-5 score</p></li><li><p>Keep notes on trade-offs, not just ratings</p></li></ul><div><hr></div><p><strong>Step 7: Experiment (visits prevent expensive mistakes)</strong></p><p>If there&#8217;s one cheat code here, it&#8217;s this:</p><p><strong>Visit. Simulate a normal week or at least a few days.</strong></p><p>Don&#8217;t just do tourist stuff. Do your routine:</p><ul><li><p>walk to a grocery store you&#8217;d actually use</p></li><li><p>try the transit route you&#8217;d actually take</p></li><li><p>go to a gym you&#8217;d actually join</p></li><li><p>walk in the neighborhood at the time you&#8217;d normally walk</p></li><li><p>sit in a caf&#233; and work for an hour if you work remotely</p></li><li><p>pay attention to friction: noise, safety vibe, stress level, convenience</p></li></ul><p>This is also where you learn things you can&#8217;t learn online.</p><p>I almost chose a building/neighborhood combination that looked perfect on paper&#8212;until I visited and noticed sketchy behavior from the building manager. The neighborhood and apartments were great. But the &#8220;day to day reality&#8221; felt off &#8211; ranging from spikes in traffic noise, hidden fees and a lot of &#8220;it depends&#8221; answers to my questions. That&#8217;s not a minute detail. That&#8217;s the kind of thing that turns a move into a chronic stress generator.</p><div><hr></div><p><strong>Step 8: Decide (don&#8217;t let perfect be the enemy of good)</strong></p><p>There will always be trade-offs.</p><p>Some people try to optimize to a mythical &#8220;perfect city&#8221; and end up stuck, endlessly comparing. Instead, aim for:</p><p><strong>Significantly better than your current state.</strong></p><p>Then commit.</p><p>You can refine over time&#8212;sometimes within the same region, sometimes within the same city, often just by switching neighborhoods.</p><p>This is where diminishing marginal returns matters. Getting to 8/10 on your must-haves usually beats sacrificing multiple criteria to chase 10/10 on one. &#8220;Good enough&#8221; is not settling; it&#8217;s calculated decision.</p><div><hr></div><p><strong>Lessons learned (what I wish I could tell my past self)</strong></p><p><strong>1) Test aspirations vs reality.</strong><br>If you don&#8217;t do it now, don&#8217;t overweight it. Validate needs through behavior.</p><p><strong>2) Social life is portable.</strong><br>&#8220;Seattle is less friendly&#8221; is too generic to be actionable. You can meet people anywhere and be lonely anywhere. Your habits and communities matter more than city stereotypes.</p><p><strong>3) Experimentation prevents expensive mistakes.</strong><br>Visits, neighborhood testing, and realism checks beat internet certainty.</p><p><strong>4) Hidden costs matter.</strong><br>Not just money&#8212;time and friction. Filters, locks, insurance, parking, delivery fees, and all the little things that add up. A rent number without lifestyle math is incomplete.</p><p><strong>5) Diminishing marginal returns are everywhere.</strong><br>You don&#8217;t need perfection. You need a strong baseline across key variables. Then you can make a decision regarding what to optimize and when/where to fit in nice to haves.</p><p><strong>6) &#8220;Access to nature&#8221; is not a single preference.</strong><br>A 5am hiker and a casual park walker are describing different lives. Same label, different requirement.</p><div><hr></div><p><strong>Closing Thoughts</strong></p><p>I&#8217;ve walked in the Seattle rain. I&#8217;ve seen gray days. And I&#8217;m still glad I moved&#8212;because the decision wasn&#8217;t based on a city&#8217;s reputation. It was based on whether the city fit my real day-to-day life.</p><p>If you&#8217;re considering a move, don&#8217;t start with &#8220;What&#8217;s the best city?&#8221;</p><p>Start with:</p><p>1. What does my life actually look like?</p><p>2. What would make it meaningfully better?</p><p>3. Which places can realistically support that?</p><p>Then build your shortlist&#8212;and go test it.</p>]]></content:encoded></item><item><title><![CDATA[Claude Code for Financial Planning – Top-Down vs. Bottom-Up Approach]]></title><description><![CDATA[Claude Code]]></description><link>https://thecontractsignal.com/p/claude-code-for-financial-planning</link><guid isPermaLink="false">https://thecontractsignal.com/p/claude-code-for-financial-planning</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Mon, 09 Feb 2026 04:02:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Late last year, I tried using Claude Code to assist with some financial planning. This was driven in part by a planned move to a new city and understanding the corresponding cost of living.</p><p>I explored a few different approaches in parallel &#8211; a top-down type of workstream and a bottom-up workstream.</p><p>In this context &#8211; a top-down approach means larger scope: effectively I compiled all of the financial statements and transactions from a given period of time, say the last 3-5 years, and then used Claude Code and other tools to actually parse out the transactions, compile them, categorize them, and analyze them or enable my own analysis of them.</p><p>I tested a few different approaches that uses this sort of top-down workflow.</p><p>The original overall approach or pipeline was:</p><p>- Create an overall plan or outline</p><p>- Compile / download financial statements (PDFs)</p><p>- Drop into a local folder and have claude code work with them end to end:</p><blockquote><ul><li><p>Provide initial context and refine plan using Claude Code&#8217;s plan mode</p></li><li><p>Convert each PDF into Excel or csv</p></li><li><p>Parse out the transactions</p></li><li><p>Aggregate the transactions into a single Excel or csv</p></li><li><p>Categorize the transactions</p></li><li><p>Perform follow-on analysis</p></li><li><p>Iterate</p></li></ul></blockquote><p>After a few hours it became clear that parsing out transactions from PDFs to Excel / csv is deceptively challenging (even for Claude), particularly when working with different data sources. So I replaced that specific step with using a third-party PDF to Excel conversion tool that I already had access to and was both much faster and more reliable.</p><p>Otherwise, the overall top-down approaches were the same.</p><p>My findings from the top-down approaches were as follows:</p><ul><li><p>First of all, handling large scope to start can be overwhelming in terms of the amount of the amount of necessary code (and of course corresponding context windows)</p></li><li><p>Second of all, because of the volume of code and data corresponding to the scope, the human testing costs become much higher</p><ul><li><p>In other words, the realm of possibilities of things that can go wrong are much broader, require more rigorous testing and the testing is more time consuming to perform</p></li><li><p>Unless an issue is glaring or there is some clear prioritization that can be done &#8211; for example identify what the largest transactions (such as rent payments), the transactions require a fair amount of individual review</p></li><li><p>However even when prioritizing these things there are all sorts of nuances that can get introduced &#8211; for example transactions being combined together, or amounts being off, or occasional exceptions that are difficult to spot (e.g. imagine a paycheck and a bonus being combined together or a rent payment being combined with a security deposit or a move from one apartment to another leading to different rent costs, etc.)</p></li><li><p>Oftentimes the context is situation-specific as well which makes more automated tests or handling this via the planning phase more difficult</p></li></ul></li><li><p>Third of all, in terms of the reliability and accuracy of the code &#8211; the top-down approach is decent at creating estimates but if exactness or precision is necessary, it is of limited utility as it would require a fair amount of manual quality control and testing. This may be okay as a starting point but usually requires complementing with other approaches to get more precise data</p></li></ul><h3>The bottom up approach</h3><p>Given the limitations of the top-down approach, the question came up: is there a complementary or perhaps alternative approach to the top-down process that focuses on a smaller scope?</p><p>For example, starting with a specific category of spend, mastering that and then repeating the process for other categories.</p><p>The business analogy I would use here is how Amazon focused on a specific product category to start (books). There are similar best practices when starting a business &#8211; specifically to focus on an underserved niche rather than trying to explore too large of a market and risk more competition, expensive customer / user acquisition, etc.</p><p>So the bottom up approach has the benefit of targeting specific categories one at a time (e.g. rent, grocery spending). This in turn involves smaller volumes, similarly structured transactions and less corresponding complexity so it involves less code, simpler testing, less cognitive load and greater transparency into both the data and the code.</p><p>This has been my experience so far.</p><p><strong>To summarize: the key benefit of the bottom-up approach is simplicity.</strong> Less categories, smaller transaction volume, less things that can go wrong, and less things to consider at any given time.</p><p>Now compare that with the top-down case where you have many statements across multiple categories. So you have a much larger volume of transactions of different types. You have different types of data structures for each. You have different types of ways in which things are expressed and net of those considerations there are many things that can go wrong potentially at each stage of the process, particularly when you&#8217;re parsing, aggregating, and analyzing the transactions.</p><h3>An Open Question &#8211; Building Up to Complex Use Cases?</h3><p>In addition, there is an additional potential benefit for more complex systems with a large volume of categories. My hypothesis is that if you build it up from the bottom step-by-step, category by category and each category is sufficiently constrained, over time you may be able to create an orchestration agent to actually coordinate each of these as if they were separate services.</p><p>For example you can have a grocery purchase analyzer as one service.</p><p>You can have a rent payment analyzer as another service, a medical appointment analyzer, a transportation payment analyzer, and so on.</p><p>You can do something similar for basically every category of items that is sufficiently standardized or constrained. Then, as you (and the system) develop a strong understanding of these you can then potentially automate the system entirely.</p><p>I need to pressure test the feasibility of this by running some experiments, but early indications are promising.</p><h2>Conclusion</h2><p>Overall, Claude Code has been very helpful in assisting me with financial planning and other use cases. So far &#8211; the top-down approach has been preferable to get a decent estimate of overall spend while the bottom-up approach has shown the most promise when exactness and detailed results are necessary.</p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Shopify’s Fulfillment Experiment: Lessons on Focus and Knowing When to Quit]]></title><description><![CDATA[Balancing focus with expansion opportunities is one of the oldest strategic trade-offs in business.]]></description><link>https://thecontractsignal.com/p/shopifys-fulfillment-experiment-lessons</link><guid isPermaLink="false">https://thecontractsignal.com/p/shopifys-fulfillment-experiment-lessons</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Sat, 18 Oct 2025 21:50:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Balancing focus with expansion opportunities is one of the oldest strategic trade-offs in business.</p><p>We can see this tension everywhere. Google must balance its dominance in search with new bets on AI and conversational interfaces like Gemini. Amazon went from selling books to becoming an &#8220;Everything Store&#8221;, then turned the internal logistics and computing system that powered that store into an entirely new external business &#8212; AWS &#8212; one of the most successful divisions in corporate history.</p><p>But expansion carries risks. Venture too far from your strengths, and you risk competing where you are weakest.</p><p>Capital, time, and attention &#8212; all scarce resources &#8212; get spread thin and diverted from the highest impact areas, leading to underperformance and, in the extreme, existential risk.</p><p>Yet focus alone carries its own danger. When customer preferences shift or technology evolves, companies that stay too narrowly focused can be blindsided by simpler, cheaper, or more relevant competitors. Disruption thrives where incumbents refuse to experiment.</p><h3>Shopify&#8217;s Fulfillment Bet</h3><p>Shopify&#8217;s short-lived fulfillment business captures this tension perfectly.</p><p>The business &#8211; known as the Shopify Fulfillment Network &#8211; launched in 2019.</p><p>For years, Shopify&#8217;s value proposition was clear: provide small and medium-sized merchants with software tools to compete online. The platform handled websites, payments, and inventory management, but left physical logistics to merchants themselves or third-party providers.</p><p>This created a gap. Small merchants lacked the scale to negotiate favorable rates with logistics providers or build their own warehouses. Meanwhile, Amazon&#8217;s fulfillment network gave its sellers a powerful competitive advantage. If Shopify could offer similar infrastructure, its merchants could compete more effectively.</p><p>The idea was bold: extend Shopify&#8217;s software platform into the physical world by building fulfillment and logistics infrastructure for small merchants. If successful, it would give small sellers the same capabilities as giants like Amazon &#8212; affordable, reliable, fast delivery &#8212; while letting Shopify capture a larger share of the merchant ecosystem. It would enable a more seamless, end-to-end experience for merchants and their customers.</p><p>On paper, the strategy made sense. Merchants already used Shopify to run their online storefronts. Why not also help them manage inventory and shipping? It was a logical extension of the &#8220;all-in-one commerce platform&#8221; narrative.</p><p>In practice, though, it pulled Shopify into a fundamentally different business.<br><br>Running fulfillment centers, managing warehouses, and coordinating last-mile delivery is operationally complex and capital-intensive &#8212; the opposite of Shopify&#8217;s asset-light software model. Suddenly, Shopify was competing in Amazon&#8217;s backyard, a domain where scale and logistics expertise matter far more than software elegance.</p><h3>Knowing When to Walk Away</h3><p>With hindsight, it&#8217;s easy to label Shopify&#8217;s fulfillment expansion a misstep.</p><p>Shopify sold the business in 2023, ultimately deciding to partner with existing providers instead.</p><p>But that decision shouldn&#8217;t be viewed as simple failure &#8212; it&#8217;s better understood as an <em>experiment that ran its course.</em></p><p>The willingness to run large experiments is a sign of an innovative culture. Shopify bet big on improving its merchants&#8217; experience, mirroring Amazon&#8217;s customer-obsessed ethos. It saw an unmet need and tried to fill it.</p><p>The more impressive part, though, is the willingness to walk away.<br>When the economics didn&#8217;t justify continued investment &#8212; and when it became clear that the effort was drawing focus away from Shopify&#8217;s software and payments businesses &#8212; leadership made the call to exit. That takes discipline. Many companies hold onto sunk-cost projects far too long.</p><h3>Changing Context, Changing Calculus</h3><p>Part of the decision was driven by evolving company and industry dynamics. As Shopify&#8217;s merchant base expanded to include larger enterprises, the value proposition for an in-house fulfillment network weakened; big merchants already had established logistics partners, reducing the need for Shopify to build its own.</p><p>The context had shifted &#8211; the same strategic move that once seemed visionary now risked becoming a distraction.</p><h3>Lessons Learned</h3><p>There are three broader lessons from Shopify&#8217;s entrance into and exit from the fulfillment space:</p><p>1. <strong>Experiment boldly, but deliberately.</strong><br>Growth often requires venturing beyond your comfort zone and running experiments with high-risk and high-reward. Shopify&#8217;s decision to make a large bet on a new business model was a testament to its experimental, high-agency builder culture.</p><p>2. <strong>Know when to quit.</strong><br>Success isn&#8217;t about avoiding mistakes &#8212; it&#8217;s about reallocating time and capital quickly when experiments don&#8217;t pan out. Strategic focus and adaptability are competitive advantages.</p><p>3. <strong>Adapt as the world changes.</strong><br>A good strategy at one moment can become a poor fit later. Shopify&#8217;s willingness to re-evaluate assumptions as context evolves is part of its disciplined execution and has helped sustain its momentum since.</p><h3>The Bigger Picture</h3><p>Whether at the level of a company, a team, or an individual career, the same logic applies. Experimentation is essential for learning and innovation &#8212; but so is focus. The goal isn&#8217;t to avoid failed experiments; it&#8217;s to make smart bets, learn fast, and redirect effort when the evidence points elsewhere.</p><p>Shopify&#8217;s fulfillment story isn&#8217;t just about logistics. It&#8217;s about the art of balancing curiosity with clarity: knowing when to build, when to explore, and when to let go.</p><p>From 2023 to 2024, Shopify&#8217;s revenues have increased 26% to over $8.8 billion while net income climbed to over $2 billion.</p>]]></content:encoded></item><item><title><![CDATA[Pricing Strategy - Lessons from Shopify’s 2024 10-K (Pt 2)]]></title><description><![CDATA[Shopify&#8217;s business model is a master class in pricing strategy.]]></description><link>https://thecontractsignal.com/p/pricing-strategy-lessons-from-shopifys</link><guid isPermaLink="false">https://thecontractsignal.com/p/pricing-strategy-lessons-from-shopifys</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Sat, 11 Oct 2025 20:31:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Shopify&#8217;s business model is a master class in pricing strategy.</p><p>They have two main revenue components:</p><ul><li><p><strong>Subscription Solutions (~26%)</strong> &#8211; recurring revenue from monthly subscriptions to access the Shopify platform, plus related activities like app sales and domain registrations.</p></li><li><p><strong>Merchant Solutions (~74%)</strong> &#8211; transaction-based revenue from payment processing, currency conversion, and other services linked to merchant success.</p></li></ul><div><hr></div><h2>Subscription Solutions</h2><p>Subscription solutions are mostly comprised of platform access, and are priced accordingly (mix of fixed costs and variable platform fees). There are different tiers of platform access with different corresponding pricing. The reasoning being that when entrepreneurs are starting out, simplified / entry-level platform access makes sense but as a business grows and has more complex needs it will likely need access to a broader range of features to navigate the complexity involved (for example managing multiple sales/marketing channels or managing more customer accounts). Shopify Plus is mentioned as their premium tier with significantly higher pricing than the more basic out of box offerings.</p><p>It&#8217;s noteworthy that for any given reporting period, no single merchant has accounted for more than 5% of their revenue (which speaks to how diversified the business is).</p><p>Also, there are some other recurring revenue sources such as, sale of apps, registration of domain names and sale of themes (online store/website templates). These do not appear to be significant contributors to revenue but help provide a one-stop-shop in some respects, enabling customers (merchants) to get their needs met without having to explore other alternatives, which provides convenience and an overall better user experience.</p><div><hr></div><h2>Merchant Solutions</h2><p>Merchant solutions are priced on a transaction basis &#8211; as more transaction volume comes through the Shopify platform, Shopify collects payment processing and currency conversion fees, referral fees from partners, Shopify Capital (lending to / financing of qualified merchants), and Transaction Fees.</p><p>In addition, they generate revenue from services and products like sale of shipping labels, sale of point-of-sale (&#8220;POS&#8221;) hardware, advertising on the Shopify App Store, and Shop Campaigns (buyer acquisition offering).</p><p>While individually small, these involve similar dynamics as the subscription solutions segment of their business. Specifically, these offerings reduce friction and keep merchants operating within Shopify&#8217;s ecosystem &#8211; strengthening the user experience and retention.</p><div><hr></div><h2>Incentives and the Flywheel Effect</h2><p>From an incentives standpoint &#8211; when merchants succeed, Shopify succeeds.</p><p>This happens in a few different ways:</p><ul><li><p><strong>Subscription solutions</strong></p><ul><li><p>When a business is starting out &#8211; they don&#8217;t need access to premium platform features</p></li><li><p>Free trials (particularly during times of market slowdown) help incentivize entrepreneurs and up and comers to start using the platform. If they start gaining traction as a business and view the platform as helpful in doing so, they&#8217;ll start paying</p></li><li><p>If the business succeeds over time, it&#8217;s likely growing and will be a prime target to upsell/upgrade to the next tier</p></li><li><p>In addition, while most businesses pay month to month, some elect to pay annually or multi-year subscriptions (with longer terms likely incentivized by discounts, akin to volume-based pricing)</p></li></ul></li><li><p><strong>Merchant solutions</strong></p><ul><li><p>The more business a customer (merchant) does through the platform, the more Shopify collects in transaction-based fees. This is even better aligned in terms of incentives as Shopify immediately benefits while the merchant collects most of the profit associated with the sale, creating a win-win situation</p></li><li><p>Referral fees from partner fees are more likely to be generated as Shopify captures more of the market in its core offerings and develops increased brand recognition, and allow all parties in the ecosystem - including customers (merchants), partners and Shopify itself - to benefit accordingly from the network effect</p></li><li><p>Through Shopify Capital, lending to qualified merchants with strong business prospects generates revenue in the short term (loan interest) while functioning as a form of customer acquisition for the core offerings. As these businesses grow, they are more likely to upgrade to premium subscription tiers and process higher transaction volumes.</p></li><li><p>The other offerings &#8211; while not significant revenue drivers help customers (merchants) focus on their core business by reducing search/switching costs as well as stay in the platform (possibly reducing risk of customer churn over time)</p></li></ul></li></ul><div><hr></div><h2>Conclusion</h2><p>The genius of Shopify&#8217;s model lies in its dynamic, stage-appropriate pricing: it meets merchants where they are and grows with them. Free trials convert to paid plans, paid plans upgrade to premium tiers, and transaction fees scale with success&#8212;all while ancillary services reduce switching costs. It&#8217;s a masterclass in aligning company incentives with customer outcomes, and the 28% YoY revenue growth in 2024 provides strong evidence that it works.</p><p>Next time &#8211; I&#8217;ll explore Shopify&#8217;s profitability and cost structure.</p>]]></content:encoded></item><item><title><![CDATA[Some Things I Learned Reading Shopify’s Latest Annual and Quarterly Filings]]></title><description><![CDATA[Pt 1]]></description><link>https://thecontractsignal.com/p/some-things-i-learned-reading-shopifys</link><guid isPermaLink="false">https://thecontractsignal.com/p/some-things-i-learned-reading-shopifys</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Sat, 04 Oct 2025 20:35:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Shopify is one of the world&#8217;s leading e-commerce infrastructure platforms. It helps merchants of all sizes start, grow, market, and run their businesses.</p><p>Here are some things I learned from reading Shopify&#8217;s Recent Quarterly and Annual Filings:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thecontractsignal.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leonid&#8217;s Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>1. <strong>Two Main Revenue Streams</strong></p><p>Shopify&#8217;s revenue is divided into two broad categories:</p><ul><li><p><strong>Subscription Solutions (~26%)</strong> &#8211; recurring revenue from monthly subscriptions to access the Shopify platform, plus related activities like app sales and domain registrations.</p></li><li><p><strong>Merchant Solutions (~74%)</strong> &#8211; transaction-based revenue from payment processing, currency conversion, and other services linked to merchant success.</p></li></ul><p>Together, these two segments reflect Shopify&#8217;s hybrid model: predictable recurring revenue plus upside from merchants&#8217; transaction volume.</p><div><hr></div><p><strong>2. Customers</strong></p><p>Shopify&#8217;s customers are <strong>merchants</strong>&#8212;ranging from solo entrepreneurs to large enterprises. </p><div><hr></div><p>3. <strong>How Shopify Measures Performance</strong></p><p>Shopify highlights two key <strong>operating metrics</strong> in its filings:</p><ul><li><p><strong>Monthly Recurring Revenue (MRR):</strong> the following month&#8217;s expected subscription revenue based on currently active subscriptions</p><ul><li><p>up from <strong>$144 million in 2023</strong> to <strong>$178 million in 2024</strong>, a <strong>~24% increase</strong>.</p></li></ul></li><li><p><strong>Gross Merchandise Volume (GMV):</strong> this is a &#8220;merchant success&#8221; metric corresponding to the total merchant transactions processed over a period of time, including shipping + taxes, net of all cancellations / refunds</p><ul><li><p>up from <strong>$235.9 billion in 2023</strong> to <strong>$292.3 billion in 2024</strong>, a <strong>~24% increase</strong>.</p></li></ul></li></ul><p>It&#8217;s interesting to note that the growth rates are the same despite corresponding to separate parts of the business. This could be a coincidence but is worth noting when reviewing the results from different periods.</p><div><hr></div><p>4. <strong>Growth and Pricing Strategy</strong></p><ul><li><p>In 2022, Shopify introduced <strong>Paid Trial Incentives</strong>&#8212;low-cost access periods designed to attract new merchants after a post-COVID slowdown.</p></li><li><p>Many of those merchants upgraded in 2023, boosting growth, followed by a more normalized growth rate in 2024.</p></li><li><p>This illustrates how Shopify invests in the long term - providing increased value up front at a time when customers are more price-sensitive and then upselling when the time is right </p></li></ul><div><hr></div><p>5. <strong>Partnerships and the Payment Stack</strong></p><ul><li><p>Shopify relies on third-party partners such as <strong>PayPal</strong> and <strong>Stripe</strong> to process some payments.</p></li><li><p>However, most transactions run through <strong>Shopify Payments</strong>, the company&#8217;s own payment processing system.</p></li></ul><div><hr></div><p>6. <strong>Deferred Revenue Explained</strong></p><ul><li><p>Because merchants often pay upfront for monthly or annual access, Shopify records those payments as <strong>deferred revenue (a liability)</strong> and recognizes them gradually over the service / delivery period.</p></li><li><p>It&#8217;s a classic SaaS accounting principle that provides visibility into future recognized revenue.</p></li></ul><div><hr></div><p>7. <strong>Other Operational Notes</strong></p><ul><li><p><strong>App Store:</strong> Shopify operates its own App Store, where developers can build and sell plug-ins that extend store functionality.</p></li><li><p><strong>Sale of Logistics Business (2023):</strong> Simplified operations and improved margins, but makes year-over-year comparisons more complex.</p></li><li><p><strong>Seasonality:</strong> Q4 (holiday season) is historically the busiest quarter for Shopify merchants, boosting both GMV and Merchant Solutions revenue.</p></li></ul><div><hr></div><p>8. <strong>Open Questions Worth Exploring</strong></p><ol><li><p><strong>How large is the Shopify App Store</strong> in terms of merchant adoption or developer revenue?</p></li><li><p><strong>What impact could tariffs or trade policy</strong> shifts have on cross-border merchant sales?</p></li><li><p><strong>How does Shopify Payments add value</strong> on top of partnerships with PayPal and Stripe?</p></li><li><p><strong>Is Shopify Payments lower-margin per transaction</strong> but higher in operating margin as part of the overall business?</p></li><li><p><strong>Why did Shopify switch from filing Form 40-F to Form 10-K</strong>? Does this mean it transferred its legal presence or main operating presence to the United States?</p></li><li><p><strong>How does the logistics sale affect year-over-year comparability</strong> in Merchant Solutions revenue?</p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thecontractsignal.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leonid&#8217;s Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[What I Learned Reading Duolingo's Annual and Quarterly SEC Filings]]></title><description><![CDATA[Learning About Business, AI and Product Building Through SEC Docs]]></description><link>https://thecontractsignal.com/p/what-i-learned-reading-duolingos</link><guid isPermaLink="false">https://thecontractsignal.com/p/what-i-learned-reading-duolingos</guid><dc:creator><![CDATA[Leonid Prilutskiy]]></dc:creator><pubDate>Sat, 27 Sep 2025 21:25:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZOYk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0af54d34-04dc-4d0d-8bec-798b4ee0629a_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve become increasingly curious about different businesses, so I&#8217;ve been spending more time reading annual and quarterly filings with the SEC.</p><p>Part of this is driven by general curiosity about how companies operate, particularly if they have influenced my life (for example as a customer).</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thecontractsignal.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leonid&#8217;s Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Part of it is because I want to strengthen my understanding of finance and other business fundamentals.</p><p>And part of it is for inspiration as a product manager and builder working at the intersection of contracts, business and technology (mix of Generative AI, traditional machine learning, and deterministic software).</p><p>I started with Duolingo &#8212; in part because I&#8217;m a fan of the products and company, and in part because there are many parallels between contracts and language learning.</p><p>With that, here are some things I&#8217;ve learned reading Duolingo&#8217;s recent 10-Q and 10-K, and some related open questions that I have:<br><br>1. <strong>AI Use</strong> &#8211; Duolingo uses AI in a variety of ways, including personalizing lessons (e.g. predicting the likelihood that a user will get a question correct to help drive the optimal level of difficulty) and using generative AI capabilities in its Video Call product feature. Other examples include significantly accelerating content / lesson creation by leveraging LLM capabilities. Separately but relatedly, they were one of the first companies I saw or heard talking about becoming AI-first.</p><p>2. <strong>Large Data Moat</strong> &#8211; They&#8217;ve collected a massive amount of data corresponding to over 130 million active users. This in turn helps improve the user experience by personalizing lessons and otherwise improving the product, per the above. </p><p>3. <strong>Financial Metrics</strong> &#8211; They&#8217;ve experienced significant revenue and profitability growth driven by an engaging product experience. It&#8217;s interesting that revenue growth for both the quarter and the year is ~41% YoY despite some possible seasonality in the business. It&#8217;s also interesting that their DAU growth is 40% YoY &#8212; unclear if this is a coincidence or if there&#8217;s a more direct connection between these metrics.<br><br>4. <strong>User acquisition</strong> &#8211; This is primarily through word of mouth (driven by an engaging product experience that uses gamification and bite-sized lessons) and brand marketing (e.g. they&#8217;ve had some pretty epic social media marketing). However, there is an increasingly complementary use of paid user acquisition as well, for example, in high-opportunity markets experiencing limited organic growth.<br><br>5. <strong>Mobile as a distribution strategy</strong> &#8211; Early on, they bet that mobile would be a way of getting to as many learners as possible (target users of the product) due to the ubiquity of smartphones. This has paid off significantly as they continue to enjoy significant growth in active users and paid subscriptions.<br><br>6. <strong>Company culture</strong> &#8211; They champion their culture as being distinct from a more typical Silicon Valley culture. I&#8217;m not 100% sure what this means, but it could refer to being more disciplined about aggressive investment to drive growth (e.g., not hiring aggressively during the COVID pandemic/lockdown), living in a more affordable geography, and/or being more ideologically diverse.</p><div><hr></div><p><strong>Open questions that I have:</strong><br><br>1. <strong>New hardware implications on Design &amp; UX</strong> &#8211; There&#8217;s some interesting AI-enabled hardware innovation on the horizon, including Meta&#8217;s VR glasses as well as the OpenAI/Jony Ive collaboration. Is there any plan to start designing for that medium? If I had to guess, it would take years of change management and user adoption to shift from mobile (similar to how it took 10+ years to shift from desktop computers to mobile &#8212; though a remarkable new user experience could accelerate this). <br><br>2. <strong>Scalability and Profitability Growth</strong> &#8211; How much of the profitability growth is driven by one-time or non-recurring events? For example, it looks like costs may have decreased as AI automated some processes, but were any of these one-time decreases? Also, is there a view that features driven by generative AI will drive cost efficiencies as foundation models continue to benefit from performance increases and economies of scale? Finally, given the increasing need for paid user acquisition, is there a concern that profitability will suffer in the future as a result of increased customer acquisition costs?</p><p>3. <strong>Geographic/cultural advantages</strong> &#8211; What are specific examples of how the Pittsburgh geography/non-Silicon Valley culture manifests, and what are the pros and cons relative to Silicon Valley or another large city/tech hub?</p><p>4. <strong>Financial Metrics Breakdown by Region</strong> &#8211; What do revenue and profitability growth look like by region?</p><p></p><p><br></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thecontractsignal.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leonid&#8217;s Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>