<?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[Mykyta Pavlenko]]></title><description><![CDATA[PM with 5+ years in telecom and travel-tech, now building my own AI products. Writing about product management, building from zero, and AI that actually works.]]></description><link>https://letters.mktpavlenko.com</link><image><url>https://substackcdn.com/image/fetch/$s_!eO0F!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffebb19bf-8bc5-45d7-8642-0c7cbb7d4f03_1024x1024.png</url><title>Mykyta Pavlenko</title><link>https://letters.mktpavlenko.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 14 May 2026 09:04:36 GMT</lastBuildDate><atom:link href="https://letters.mktpavlenko.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Mykyta]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[mktpavlenko@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[mktpavlenko@substack.com]]></itunes:email><itunes:name><![CDATA[Mykyta]]></itunes:name></itunes:owner><itunes:author><![CDATA[Mykyta]]></itunes:author><googleplay:owner><![CDATA[mktpavlenko@substack.com]]></googleplay:owner><googleplay:email><![CDATA[mktpavlenko@substack.com]]></googleplay:email><googleplay:author><![CDATA[Mykyta]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Opus 4.7 Is the Best Model I’ve Used. It’s Also the One I Trust Least.]]></title><description><![CDATA[Opus 4.7 beats every benchmark. But Anthropic quietly removed the one thing serious builders needed - predictable control. Here&#8217;s what Default Drift means.]]></description><link>https://letters.mktpavlenko.com/p/opus-47-is-the-best-model-ive-used</link><guid isPermaLink="false">https://letters.mktpavlenko.com/p/opus-47-is-the-best-model-ive-used</guid><dc:creator><![CDATA[Mykyta]]></dc:creator><pubDate>Thu, 16 Apr 2026 16:15:10 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b39e7b34-b8a0-4660-b3af-dd6dc53a324e_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>1. Introduction - I got a smarter model and a bigger bill on the same day</h2><p>Okay so. Today Anthropic shipped Opus 4.7. I ran the same prompt I ran a week ago on 4.6. The answer was better. Cleaner plan, fewer tool errors, one fewer retry.</p><p>Then I opened the billing dashboard.</p><p>My API spend for the last 30 days is up 27% on the same workload. Same users. Same product. Same prompts, give or take. And none of that is because I chose to spend more.</p><p>Here&#8217;s the part that took me a minute to process: the model never asked me how much thinking to do. It decided. And it decided to think more. Sometimes a lot more. I did not notice until the bill showed up.</p><p>This is not a story about Opus 4.7 being bad. On the benchmarks it is a clear step up. +13% on Anthropic&#8217;s 93-task coding set. 70% on CursorBench versus 58% for 4.6. 87.6% on SWE-bench Verified, ahead of both GPT-5.4 and Gemini 3.1 Pro on the metrics that map to actual engineering work. The model is real, the gains are real, and for a lot of people it will just feel like a free upgrade.</p><p>This is a story about something else. Something you only see if you run a product on top of Claude.</p><p>Between February 9 and March 3, Anthropic made two changes to how Claude thinks. On February 9, they moved Opus 4.6 to adaptive thinking by default. On March 3, they dropped the default effort level from high to medium. No release notes in your inbox. No migration guide you had to sign off on. The API still works. Your code still compiles. Your users still get responses. The behavior of your product changed anyway.</p><p>Opus 4.7 is the moment this stops being a temporary default and becomes the architecture. The old <code>budget_tokens</code> parameter - the one where you told the model &#8220;you have 10,000 tokens to think, no more&#8221; - is deprecated. Adaptive thinking is now the only supported thinking mode on 4.7. You cannot go back. You can ask for <code>effort: high</code>. You cannot ask for predictability.</p><p>So I want to write about the thing most people are going to miss this week while they trade benchmark screenshots on X. We got a smarter model. And we lost the thermostat.</p><p>I am calling the pattern <strong>Default Drift</strong>. And if you build anything on top of an LLM, I think it is the most important AI story of 2026.</p><div><hr></div><h2>2. Perspective - The thermostat is gone, and nobody voted</h2><p>Here is the way most people will cover the Opus 4.7 release.</p><p>They will put up a table. They will highlight +13% on coding, 94.2% on GPQA Diamond, a new tokenizer, a bigger vision input, <code>claude-opus-4-7</code> in the model string. They will conclude that Opus is still the best agentic coding model on the market and move on. All of that is accurate. None of it is the story.</p><p>The actual story is architectural. Anthropic shipped the first flagship model in Claude&#8217;s history that removes a control knob developers had since extended thinking launched. It is not a feature deprecation. It is a philosophy change.</p><p>Old world - call it &#8220;extended thinking&#8221; - worked like a thermostat. You told Claude: &#8220;think up to 10,000 tokens on this.&#8221; Claude did that. Your latency was bounded. Your cost was bounded. You could tune per endpoint - expensive reasoning for the &#8220;plan&#8221; step, cheap quick answers for the &#8220;clarify&#8221; step. If your billing alert triggered, you dropped the budget. If users complained about speed, you dropped the budget. You were the operator.</p><p>New world - adaptive thinking - works like a smart home. Claude looks at the request, decides it is complex, and spends what it thinks the request deserves. You get an <code>effort</code> knob with three positions - low, medium, high - but those positions are not promises. Claude still decides how much to think inside each position. At the default (high), Claude almost always thinks. At medium, sometimes. At low, rarely. None of those are numbers. They are moods.</p><p>Interleaved thinking is on by default, which means Claude also thinks between tool calls. For a long-running agent that is great. For cost predictability it is a second multiplier you cannot turn off.</p><p>Here is how you feel this in practice.</p><p>In late February, an AMD engineer named Stella Laurenzo ran telemetry across 6,852 Claude Code sessions, 234,760 tool calls, and 17,871 thinking blocks from January through March. Her GitHub issue claimed a 67% drop in sustained reasoning compared to before the February changes. Boris Cherny, the Claude Code lead, had to respond publicly on Hacker News within a few hours. Anthropic&#8217;s counter was not &#8220;nothing changed.&#8221; Anthropic&#8217;s counter was &#8220;we changed defaults, we did not downgrade the model.&#8221; Which is technically true and beside the point.</p><p>The point is that for 52 days, every person building on Claude Code was running a different product than they thought they were running. Not because the model got worse. Because the controls Anthropic shipped underneath the model quietly moved.</p><p>Think about that for your product.</p><p>Your product&#8217;s behavior is downstream of Claude&#8217;s behavior. When Claude suddenly spends 2x the thinking tokens on the same user action, three things happen on your side. One, margin compresses. Two, p95 latency shifts and users notice. Three, you have to explain to a support request why &#8220;the AI is acting differently today&#8221; when you did not ship anything.</p><p>The same thing just happened to every serious developer on Claude Code. And 4.7 is not a reversal. It is the consolidation of the new model.</p><p>Here is the aha. The benchmarks are measuring capability. They are not measuring controllability. And in 2026, for anyone building a real product on AI, controllability is where the game is actually played.</p><p>You can write a great model review that says &#8220;4.7 is better than 4.6.&#8221; Every benchmark I looked at supports it. You can also write a true PM review that says &#8220;my product got harder to run this month,&#8221; and have that be true at the same time. Those two things are not in conflict. They are happening on two different axes, and most of the industry only looks at one.</p><p>The common frame is &#8220;new model, better.&#8221; My frame is &#8220;new model, new defaults, new operating contract - read it carefully.&#8221; I am calling this Default Drift because that names the actual threat. Defaults shift under you. You did not sign anything. Your product is running on someone else&#8217;s moving floor.</p><p>Anthropic is not the villain here. Anthropic is optimizing for the median developer - the one who never tuned <code>budget_tokens</code>, who wants the model to &#8220;just work,&#8221; who is building a chat app or a support bot where controllability matters less than raw capability. For that audience, adaptive thinking is a real win.</p><p>The trade-off is this: the better the defaults get for the median user, the more invisible the drift becomes for the operator user. And if you are reading this, you are almost certainly the operator.</p><div><hr></div><h2>3. Gamify - Five things I am doing this week because of Opus 4.7</h2><p>I am not going to tell you to panic. I am not going to tell you to switch to GPT-5.4. I use Claude every day in my work. I am probably going to keep using it. The model is genuinely strong and the Routines feature Anthropic shipped alongside 4.7 is a real upgrade for agentic workflows.</p><p>But I am changing five things this week, and if you build on top of any LLM, you probably should too.</p><h3>Step 1: Log your baselines before the next default moves</h3><p>The biggest mistake I made in February was not having a &#8220;before&#8221; snapshot. When people started complaining about 4.6, I had no way to prove or disprove what they were saying. I was arguing from vibes.</p><p>Tonight I am going to do what I should have done in December. I am picking 20 real prompts from my own production traffic - a mix of easy ones, hard ones, agentic flows, and single-shot questions. I am going to run each of them once on Opus 4.7, and I am going to log three numbers per run: total output tokens, thinking tokens, end-to-end latency.</p><p>That is my new baseline. The next time Anthropic tweaks a default, I will know within a day. You cannot defend a position you did not measure.</p><p>Bonus: those 20 prompts become my regression suite. Every release, I rerun them. Every drift, I see it. This is the single highest-leverage change you can make.</p><h3>Step 2: Pin your effort, do not inherit it</h3><p>The default effort on Opus 4.7 is high. That sounds great until you remember the February story, when the default quietly dropped to medium and a lot of builders did not notice for weeks.</p><p>Every production call I make is now going to set <code>effort</code> explicitly. If I need deep reasoning, I write it. If I want fast and shallow, I write it. Nothing is left to inheritance. The two lines of code it adds are cheaper than a surprise outage.</p><p>The meta-point: treat defaults like you treat magic constants in code. Extract them, name them, own them. The moment a default is implicit, it belongs to whoever owns the upstream, and that is not you.</p><h3>Step 3: Build a 10-prompt eval suite and run it weekly</h3><p>Your product depends on the model behaving a certain way. That dependency is not tested. Fix that.</p><p>Pick 10 prompts that represent what your real users do. For each, define what &#8220;right&#8221; looks like - not a strict string match, but a structured rubric. Did it use the right tool? Did it include the key data point? Did it finish without looping? Did thinking tokens stay in the expected band?</p><p>Run this once a week. Manually, if you have to. Script it if you can. The goal is not perfection. The goal is an early-warning system. If next month your rubric score drops 15 points, you know the conversation to have with your users before they have it with you.</p><p>This is the analog to application monitoring from the pre-AI era. You would not run a web app without APM. You should not run an AI product without an eval harness. The drift is already happening. The only question is whether you see it.</p><h3>Step 4: Write a fallback path into your architecture this quarter</h3><p>I do not think GPT-5.4 is a better everyday model than Opus 4.7. But I do think a product that can only run on one upstream is fragile.</p><p>This quarter I am refactoring my AI layer so that every call goes through an internal abstraction that can route to Claude, GPT, or Gemini based on a config flag. That does not mean I am going to swap providers. That means when Anthropic makes its next quiet default change, I can move the 5% of my workload that is most sensitive to the change in one afternoon instead of one sprint.</p><p>This is not multi-cloud maximalism. It is insurance. The premium is a couple of weeks of engineering. The payout is every future default drift and every future outage. For a real product, that math is easy.</p><p>If you are pre-revenue or solo, make the abstraction small. One function. Two providers. The point is the optionality, not the elegance.</p><h3>Step 5: Push back in public when something breaks</h3><p>This is the part most builders skip, and it is the most important.</p><p>The February changes got addressed because Stella Laurenzo wrote a GitHub issue with numbers, ran telemetry, forced a public response. Not because thousands of people tweeted vibes. Anthropic reacts to specific, reproducible, measured evidence. If you see behavior change and you have the data, file the issue. Post the chart. Reply to Boris Cherny with your numbers, not your opinion.</p><p>I say this without snark - Anthropic is one of the more responsive labs in the industry. But they cannot read your mind and they cannot prioritize what they cannot see. The eval suite from step 3 is not just for your benefit. It is the evidence base for every future conversation you will have with a model vendor. And every builder who files a real issue raises the floor for every other builder.</p><p>You are not a customer. You are a counterparty. Act like one.</p><div><hr></div><h2>Closing</h2><p>There is a version of this post that reads &#8220;Claude got nerfed, I am mad.&#8221; That is not the post I wanted to write because that post is not true and it is not useful. Opus 4.7 is the strongest model I have used. Anthropic shipped real, measurable improvements, and they are going to ship more.</p><p>The post I wanted to write is the one that nobody else seems to be writing this week.</p><p>When your product runs on top of a model that decides how much to think, you are no longer fully the product manager of your own product. You share the role with whichever team inside your vendor owns the default configuration. That team optimizes for their objective function, not yours. Right now those objectives happen to align most of the time. They will not always. And the places they diverge are exactly the places your users feel it first.</p><p>Default Drift is the name I am giving this because it describes what is actually happening. Defaults drift. Products built on those defaults drift with them. And most of the drift is invisible unless you measure it.</p><p>We are early. Every builder on AI right now is building on infrastructure that is being redesigned underneath us in real time. That is the nature of being early. The people who will win this decade are not the ones with the best prompts. They are the ones who notice when the floor moves, and who built the sensors to notice in time.</p><p>Go measure something this week. Pick the 20 prompts. Log the tokens. Pin the effort. Then do the same thing next week, and the week after. You will be shocked at how much information you have been leaving on the table.</p><p>Opus 4.7 is a great model. It is also a reminder that the contract between you and your upstream is shorter and softer than you thought. That is fine. But read it carefully.</p><p>And bring your own measurements.</p><div><hr></div><p><em>If you run a product on top of Claude, GPT, or Gemini - reply and tell me what your baseline looks like. I am collecting examples for a follow-up, and the cleaner the data, the more useful the next piece will be.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://letters.mktpavlenko.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 Mykyta Pavlenko! 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[Who Owns Your AI Memory? Because It Probably Isn’t You.]]></title><description><![CDATA[I spent three years feeding ChatGPT context. Then I realized the memory it built wasn&#8217;t mine. So I took it back - with a vector DB on a Mac Mini.]]></description><link>https://letters.mktpavlenko.com/p/who-owns-your-ai-memory-because-it</link><guid isPermaLink="false">https://letters.mktpavlenko.com/p/who-owns-your-ai-memory-because-it</guid><dc:creator><![CDATA[Mykyta]]></dc:creator><pubDate>Tue, 14 Apr 2026 16:59:01 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b8a54a6a-cb2a-4e65-88a6-f8718591df58_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>1. Introduction - The version of me inside ChatGPT does not exist anymore</h2><p>Okay so. I was using ChatGPT the other day and it gave me advice that would have been great - if I were still the person I was in 2023.</p><p>Same thing happened the week before. And the month before. I have been using ChatGPT since late 2022, and somewhere around the two-year mark I started feeling it: the model was responding to a version of me that no longer exists. Old priorities. Old preferences. Projects I had already killed. Opinions I had reversed.</p><p>I tried to fix it inside ChatGPT. I could not. I could not inspect what it remembered. I could not reliably overwrite it. The memory layer was there, somewhere, but it was the vendor&#8217;s copy of me, not mine.</p><p>Try this for yourself. Ask ChatGPT: &#8220;what do you actually remember about me?&#8221; You will get a tidy summary. Your name, your job, that you like short emails. That is the shallow layer. The &#8220;nice to meet you&#8221; layer. The real memory lives underneath - the decisions, the reasoning, the way you have changed your mind over two years of conversations. And none of that belongs to you. It lives inside somebody else&#8217;s database, behind a chat interface that hands you the summary and hides everything else.</p><p>So I did something a year ago would have sounded crazy: I built my own memory system. Local vector database on a Mac Mini, plugged into Claude, ChatGPT, Claude Desktop, and every MCP-aware tool I use. One brain, many clients. I control what goes in. I control what stays.</p><p>This article is not really about the code. It is about the question underneath it: <strong>who owns the context of your life with AI?</strong> If the answer is &#8220;a company whose retention policy I have not read,&#8221; that is worth sitting with.</p><div><hr></div><h2>2. Perspective - The lock-in nobody talks about</h2><p>Here is the thing most people miss.</p><p>At the macro level, the top AI models have converged. Blindfold-test Claude, ChatGPT, and Gemini on a hundred real tasks and most people could not tell which is which. The differences are in the micro - tone, edge cases, specific reasoning quirks. Real differences, yes, but not the reason you keep coming back to one tool every day.</p><p>So what actually locks you in? Not the model. The model is interchangeable. What keeps you in place is <strong>the memory the tool has accumulated about you.</strong> That is the moat. And every major AI vendor is quietly building it higher while everyone argues about benchmark charts.</p><p>People usually only notice this when they try to switch. They open a new tool, realize it does not know them, feel the friction of re-briefing, and go back. The memory did not just help them - it trapped them. And they call it &#8220;preference&#8221; because it feels like their choice.</p><p>The part I want you to think about: <strong>the AI market is not stable.</strong> It is not browsers where Chrome won. It is not search where Google won. We are going to be switching tools. We are going to be running three, four, five AI products in parallel for years - one for coding, one for writing, one for research, some that do not exist yet. If your memory lives inside one of them, every switch costs you context. Every new tool starts from zero.</p><p>Back to ChatGPT. The reason it kept quoting 2023-me at me was not that it was dumb. It was that its memory was append-only from my side. I could add. I could not really curate. When old facts and new facts conflicted, it often went with the older one because that version had more repetitions backing it up. I was the product manager. I had no admin panel.</p><p>So I stopped thinking of memory as a feature of the tool. I started thinking of it as an asset of mine that I had stupidly let the tool hold for me.</p><p>I call the alternative <strong>BYOM - Bring Your Own Memory.</strong></p><p>The analogy is BYOD (bring your own device) and BYOK (bring your own key). In BYOM the vendor brings the model. You bring the memory. The two meet at an open protocol - in my case MCP (Model Context Protocol). The vendor does what vendors are good at: train huge models, run them cheap, ship them fast. You do what only you can do: own the truth about yourself.</p><p>Once memory lives behind a protocol instead of inside a product, everything changes. It becomes portable, inspectable, backup-able, forkable. You can delete entries. You can hand a copy to a new tool and it knows you before you have typed a word. The shift - from &#8220;feature inside a product&#8221; to &#8220;service I own&#8221; - is the whole point of this piece.</p><div><hr></div><h2>3. Gamify - How to build this in a weekend</h2><p>Now the practical part. I am going to show you how the whole thing fits together and give you the actual commands. If you are a developer comfortable with Node and a terminal, you can be running by Sunday evening. About 1800 lines of JavaScript total. Five dependencies. No cloud services.</p><h3>The architecture in one picture</h3><pre><code><code>   Claude Code / Claude Desktop / your custom agents
                      &#9474; (MCP over STDIO)
                      &#9660;
                   mcp.js          &#8592; thin STDIO bridge, spawned/killed freely
                      &#9474; (HTTP on 127.0.0.1:3110)
                      &#9660;
                  server.js        &#8592; persistent Fastify daemon, owns the DB
                      &#9474;
         &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
         &#9660;            &#9660;              &#9660;
       db.js       embed.js      judge.js
       SQLite +    Ollama        (optional)
       sqlite-vec  nomic-embed   auto-tag
       + FTS5                    + rerank
</code></code></pre><p>Two processes, not one. This is the single most important structural decision so I will explain why.</p><p>Claude Code and Claude Desktop spawn MCP servers as child processes over STDIO, and they kill those processes on every restart. If the SQLite database lived inside the STDIO process, every Claude restart would mean re-opening the DB, losing the WAL journal, risking race conditions with other clients. Bad.</p><p>So: a thin STDIO wrapper (<code>mcp.js</code>, ~40 lines) that Claude freely spawns and kills. A persistent HTTP daemon (<code>server.js</code>) that actually owns the database, stays up, and speaks plain HTTP on port 3110. The wrapper proxies calls to the daemon. Both share the same tool schemas from <code>mcp-tools.js</code>.</p><p>Bonus: because the daemon speaks HTTP, anything else can hit it too - custom agents, scripts, a web dashboard, future tools. One memory, many clients.</p><h3>The stack - five dependencies and nothing else</h3><p>Component Technology Why Language JavaScript (CommonJS) No TypeScript, no build step. <code>node server.js</code> and done. HTTP Fastify 5 Fast, minimal, handles JSON well. Database <code>better-sqlite3</code> + <code>sqlite-vec</code> + FTS5 One file, zero ops, ACID, vectors and text in one transaction. Embeddings <code>nomic-embed-text</code> via Ollama 768-dim, runs locally on M-series Mac, zero API keys. MCP SDK <code>@modelcontextprotocol/sdk</code> Official SDK, both STDIO and HTTP transports. Validation Zod 4 Schema per MCP tool.</p><p><code>package.json</code> dependencies: 5. That is the whole list.</p><h3>The schema - the fields that actually matter</h3><p>One SQLite file, three real tables plus two virtual. The core is <code>entries</code>:</p><pre><code><code>CREATE TABLE entries (
  id              TEXT PRIMARY KEY,
  parent_id       TEXT,                  -- links a chunk to its parent entry
  kind            TEXT DEFAULT 'document', -- document | chunk | fact | preference | event
  type            TEXT NOT NULL,         -- feedback | user | project | reference
  title           TEXT NOT NULL,
  content         TEXT NOT NULL,
  content_hash    TEXT NOT NULL,         -- SHA-256, for exact dedup
  tags            TEXT,                  -- JSON array
  source_tool     TEXT NOT NULL,         -- claude-code | claude-desktop | ...
  source_reason   TEXT NOT NULL,         -- WHY this was written
  source_session  TEXT,                  -- which session produced it
  confidence      REAL DEFAULT 1.0,      -- 1.0 = human, 0.6 = auto, 0.3 = inferred
  created_at      INTEGER NOT NULL,
  updated_at      INTEGER NOT NULL,
  verified_at     INTEGER,               -- last confirmed still true
  expires_at      INTEGER,               -- when to re-check
  supersedes      TEXT,                  -- ID of entry this replaces
  superseded_by   TEXT,                  -- ID of entry that replaced this
  archived_at     INTEGER,               -- soft delete
  access_count    INTEGER DEFAULT 0      -- popularity signal for ranking
);
</code></code></pre><blockquote><p>Simplified view. The full schema has ~22 columns plus a few indexes and an <code>extra</code> JSON field for arbitrary metadata. Above is what matters for understanding.</p></blockquote><p>Two virtual tables sit on top: <code>entries_fts</code> (FTS5 for keyword search, with <code>porter unicode61</code> tokenizer so it handles Cyrillic), and <code>entries_vec</code> (sqlite-vec, <code>FLOAT[768]</code> for embeddings).</p><p>Every field above earns its place. <code>parent_id</code> + <code>kind</code> are how chunking works: long content splits into chunks, each chunk is a row with <code>kind: 'chunk'</code> pointing at its parent, and embeddings live on the chunks so search can find the specific part instead of a diluted average of a long document. <code>confidence</code> lets the AI distinguish &#8220;user explicitly said this&#8221; from &#8220;I inferred this.&#8221; <code>verified_at</code> lets a maintenance agent mark old facts as still true. <code>supersedes</code> turns updates into an audit trail instead of destructive edits. <code>access_count</code> is a popularity signal the ranker uses.</p><p><strong>And the part that sold me on SQLite in the first place: backup is one command.</strong> <code>cp memory.db backup.db</code> and you have a complete snapshot of your entire AI memory - text, vectors, audit log, everything, in a single 3.4 MB file. Try doing that with Pinecone. Try exporting your memory out of ChatGPT. This is what &#8220;you own it&#8221; looks like in practice - three-second backup, zero vendor involvement, a file you can git-commit if you want version history. SQLite also runs in WAL mode, which is why Claude Code, Claude Desktop, and my background maintenance agent can all read the database concurrently without stepping on each other.</p><h3>Embeddings: Ollama locally, and the one detail nobody mentions</h3><p>Install Ollama, pull the model, and embeddings run on your laptop forever free:</p><pre><code><code>brew install ollama
ollama pull nomic-embed-text
</code></code></pre><p>The flow: text -&gt; POST <code>http://127.0.0.1:11434/api/embeddings</code> -&gt; <code>Float32Array(768)</code> -&gt; <strong>L2 normalize</strong> -&gt; write to SQLite.</p><p>The L2 normalization step is the detail that costs two hours of debugging if you skip it. sqlite-vec computes Euclidean distance, but if your vectors are unit-length, Euclidean distance equals cosine similarity (<code>cos_sim = 1 - L2&#178; / 2</code>). Without normalization your results feel vaguely wrong. With it they feel right.</p><pre><code><code>function l2Normalize(vec) {
  let sumSq = 0;
  for (let i = 0; i &lt; vec.length; i++) sumSq += vec[i] * vec[i];
  const norm = Math.sqrt(sumSq) || 1;
  const out = new Float32Array(vec.length);
  for (let i = 0; i &lt; vec.length; i++) out[i] = vec[i] / norm;
  return out;
}
</code></code></pre><p>Real numbers from my running system: 441 ms per embed, 3 ms for FTS5 search, 3 ms for vector search. The bottleneck is embedding, not search.</p><h3>Search: hybrid, filterable, fast</h3><p>Three modes: keyword only, semantic only, hybrid (default). Hybrid runs FTS5 and vector search in parallel, then fuses the results with <strong>Reciprocal Rank Fusion</strong>:</p><pre><code><code>const RRF_K = 60;
ftsHits.forEach((h, rank) =&gt; {
  scores.set(h.id, (scores.get(h.id) || 0) + 1 / (RRF_K + rank));
});
vecHits.forEach((h, rank) =&gt; {
  scores.set(h.id, (scores.get(h.id) || 0) + 1 / (RRF_K + rank));
});
</code></code></pre><p>Entries that show up in both lists get a higher final score. Then I layer post-fusion boosts - confidence multiplier, access-count boost, recency bump, expiry decay. A handful of lines each.</p><p>But the part that makes this <strong>actually</strong> beat vendor memory is the filters. Every search call accepts <code>type</code>, <code>tags</code>, <code>source_tool</code>, <code>confidence</code>, date ranges. My top tags right now: <code>personal-brand</code> (54), <code>active</code> (52), <code>substack</code> (40), <code>profile</code> (34). Each one a slice I can narrow into with a single filter.</p><p>The concrete example that made this click for me: working on Temporal.day, I do not need the AI to recite my age and job title. I need it to surface <strong>which pricing models I tried, which I killed, and why</strong>. <code>type: project, tags: ["temporal-day", "decision"]</code> returns the list in milliseconds. Built-in memory cannot do that. The fidelity lives in the tags.</p><h3>Write discipline: the rule that keeps the memory clean</h3><p>Every write hits a validator before it touches the DB. Required fields (<code>type</code>, <code>title</code>, <code>content</code>, <code>source_tool</code>, <code>reason</code>). Min content length 20 chars. Real-character check to block junk. Then two-stage dedup:</p><ol><li><p><strong>Exact</strong>: SHA-256 hash of content. If match, return 409.</p></li><li><p><strong>Fuzzy</strong>: embed the new entry, run <code>vectorSearch(embedding, 1)</code>, and if cosine similarity &gt; 0.85, return a <code>similar_exists</code> warning with the existing ID.</p></li></ol><p>The AI client can either force the write with <code>confirm_duplicate: true</code> or, better, call <code>memory_update</code> on the existing record. This single rule cut my duplicate rate from &#8220;everywhere&#8221; to &#8220;basically never.&#8221;</p><p>Plus rate limiting (60 writes/minute per tool) and an append-only <code>write_log</code> that records every mutation with a 100-char snippet. You always know who wrote what and why.</p><h3>The eight MCP tools the AI actually uses</h3><p>The whole interface is eight tools, registered via <code>@modelcontextprotocol/sdk</code>:</p><p>Tool What it does <code>memory_describe</code> Self-description: current vocabulary, rules, config. Called first in every session. <code>memory_search</code> Hybrid search with filters (type, tags, source_tool, confidence, dates). <code>memory_get</code> Fetch one entry by ID. <code>memory_list</code> Recent entries, newest first. <code>memory_write</code> Create entry. Runs dedup, chunking, optional auto-tag. <code>memory_update</code> Update entry. Re-embeds if content changed. <code>memory_verify</code> Confirm entry is still accurate (stamps <code>verified_at = now</code>). <code>memory_delete</code> Soft-delete (sets <code>archived_at</code>). <code>memory_supersede</code> Replace old entry with new, linked via <code>supersedes</code> chain.</p><h3>Self-describing: how the AI learns to use it without you micromanaging</h3><p><code>memory_describe</code> returns the live vocabulary - which <code>type</code> values already exist and how often, which tags are popular, what the validation thresholds are, which filters are available. Right now mine returns: <code>feedback</code> (31), <code>reference</code> (29), <code>project</code> (26), <code>user</code> (25) as the top types.</p><p>Why it matters: when Claude sees <code>feedback</code> has 31 entries, it uses <code>feedback</code> instead of inventing <code>feedback-notes</code> or <code>user-feedback-misc</code>. The vocabulary converges organically. No hardcoded taxonomy. No drift across tools.</p><h3>The fifteen-line prompt that wires it into Claude</h3><p>The server is half. The other half is <code>~/.claude/CLAUDE.md</code>, which Claude Code reads automatically:</p><pre><code><code>## Memory

Primary memory is `personal-memory` MCP (HTTP :3110).
Always use memory_* MCP tools:
- Read: memory_describe (first call per session), then memory_search
- Write: memory_write with source_tool: "claude-code"
- Update stale facts: memory_update + memory_verify
- Supersede: memory_supersede when an old entry is replaced

### What to save
- Stable facts about user, projects, preferences
- Explicit feedback ("don't do X, prefer Y")
- Reference paths, endpoints, decisions and reasoning

### What NOT to save
- Anything in current code/git/files
- Ephemeral task state
- Conversation summaries
</code></code></pre><p>Without this file, the AI does not know the memory exists. With it, the behavior is automatic on every session. The same prompt works for Claude Desktop, custom agents, anything MCP-aware.</p><h3>The actual setup - copy-paste this</h3><pre><code><code># 1. Install Ollama and the embedding model
brew install ollama
ollama pull nomic-embed-text

# 2. Create the project
mkdir -p ~/.personal-memory/server &amp;&amp; cd ~/.personal-memory/server
npm init -y
npm install better-sqlite3 sqlite-vec fastify @modelcontextprotocol/sdk zod

# 3. Create .env
cat &gt; ../.env &lt;&lt; 'EOF'
OLLAMA_URL=http://127.0.0.1:11434
EMBED_MODEL=nomic-embed-text
PORT=3110
HOST=127.0.0.1
EOF

# 4. Write the code:
#    server.js, mcp.js, mcp-tools.js, db.js, embed.js, search.js, rules.js
#    (architecture above tells you what each does)

# 5. Start the daemon
node server.js

# 6. Sanity check
curl http://127.0.0.1:3110/health
</code></code></pre><p>Then register it in Claude Code (<code>~/.claude/settings.json</code>) and Claude Desktop (<code>~/Library/Application Support/Claude/claude_desktop_config.json</code>):</p><pre><code><code>{
  "mcpServers": {
    "personal-memory": {
      "command": "/path/to/node",
      "args": ["/Users/you/.personal-memory/server/mcp.js"]
    }
  }
}
</code></code></pre><p>Drop the <code>CLAUDE.md</code> snippet from above into <code>~/.claude/CLAUDE.md</code>. Restart Claude. You are running.</p><h3>What it looks like when it works</h3><p>A real <code>memory_search</code> response from my system, query = &#8220;writing style&#8221;, hybrid mode, limit = 2:</p><pre><code><code>{
  "results": [
    {
      "id": "feedback_mnxikwm3_588da6e4b3c1",
      "type": "feedback",
      "title": "Use short dashes, not em dashes",
      "tags": ["writing", "style", "substack"],
      "confidence": 1, "access_count": 84, "score": 0.0391
    },
    {
      "id": "feedback_mntv57h4_c0281c034edb",
      "type": "feedback",
      "title": "Keep Substack Notes short (100-150 words)",
      "tags": ["writing", "substack", "length"],
      "confidence": 1, "access_count": 62, "score": 0.0358
    }
  ],
  "timing": { "fts_ms": 3, "embed_ms": 441, "vec_ms": 3 }
}
</code></code></pre><p>Two entries. Both tagged <code>writing</code> and <code>substack</code>. Together they have been retrieved 146 times - which means 146 times across months of sessions my AI tools already knew how I want to write, and I did not type a single reminder.</p><h3>One more thing: let an AI maintain the memory for you</h3><p>I do not curate entries by hand. A separate workflow - an agent I call OpenClaw - reads the memory periodically, finds stale entries, and either verifies them, updates them, or supersedes them. It uses the same MCP tools every other client does. It writes back with <code>source_tool: "openclaw-agent"</code>. Every maintenance action ends up in the audit log.</p><p>This is the piece that turns a database into something alive. Facts do not need humans to stay fresh. They need another process with the same API access as the humans.</p><div><hr></div><h2>Closing</h2><p>The technical part is the easy part. Hundred entries, 3.4 MB, 3 ms searches, five dependencies, zero API keys, one command to back up. A weekend of work and you are running.</p><p>The harder part is the question I want you to actually sit with.</p><p><strong>Who controls how you show up to AI?</strong></p><p>For most people right now the answer is: the vendor whose product they use most. And people push back on this with &#8220;well, I can always ask it what it knows about me.&#8221; So try it. You will get the shallow layer - your name, your job, a couple of preferences. What you will miss is everything that actually matters. The project decisions. The half-formed opinions. The pattern of how you change your mind. The texture.</p><p>Memory lives in the details, and details only surface when you can slice them - by tag, by project, by time, by confidence. A chat interface flattens. A vector database with filters does not. And no built-in memory is going to close that gap for you, because closing it would mean handing you the tools to leave.</p><p>If you are fine with where your context lives right now, fine. That is a real choice.</p><p>But I do not think most people have actually made the choice. They defaulted into it, because the tool is convenient and the cost of the default is invisible until the day they want to switch.</p><p>We are early. I think each of us is eventually going to carry a digital twin - a persistent, portable memory of who we are that any AI can plug into and understand us immediately. That is where this is going. We are just not taking memory seriously enough yet to see it.</p><p>Worth fixing. Bring your own memory.</p><div><hr></div><p><em>If you want the full source layout, the schema, or the exact setup commands, reply to this post and I will send the detailed build guide.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://letters.mktpavlenko.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 Mykyta Pavlenko! 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[Vibe Coding Won’t Save You. This PM Skill Will.]]></title><description><![CDATA[Vibe coding is everywhere, but most PMs use it wrong. A Senior PM building an AI product shares the one skill that actually matters - and it&#8217;s not prompting.]]></description><link>https://letters.mktpavlenko.com/p/vibe-coding-wont-save-you-this-pm</link><guid isPermaLink="false">https://letters.mktpavlenko.com/p/vibe-coding-wont-save-you-this-pm</guid><dc:creator><![CDATA[Mykyta]]></dc:creator><pubDate>Tue, 07 Apr 2026 17:10:26 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7805a8ee-f435-4593-a31f-b2f9f9a28550_2752x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>The Vibe Coding Trap</h2><p>Six months ago, I was a skeptic.</p><p>When the whole vibe coding wave started, I looked at it and thought - this is terrifying. Someone else&#8217;s AI writes your code, you don&#8217;t fully understand what&#8217;s happening under the hood, and if something breaks in production, you&#8217;re the one holding the bag.</p><p>I work in travel-tech. When I think about a bug in our flight booking flow, I don&#8217;t think about a Jira ticket. I think about money. Real money. A single bug in an airline ticket purchase can cost more than a developer&#8217;s monthly salary. So when people started telling me &#8220;just let the AI write it,&#8221; my gut reaction was simple: no way.</p><p>But here&#8217;s the thing about gut reactions. Sometimes they&#8217;re right. And sometimes they&#8217;re just fear dressed up as wisdom.</p><p>94% of product professionals now use AI frequently in their workflows. Nearly half have embedded it deeply into their daily work. The tools got better - fast. Claude Code, Cursor, Copilot - they went from &#8220;interesting toy&#8221; to &#8220;legitimate workflow&#8221; in what felt like weeks, not months.</p><p>And I realized my skepticism wasn&#8217;t protecting me. It was holding me back.</p><p>But - and this is the part nobody talks about - the opposite extreme is just as dangerous. The PMs who think vibe coding will replace their engineering team. The founders who believe they can ship production software by typing prompts into an AI. The product people who confuse &#8220;I can build a prototype&#8221; with &#8220;I can build a product.&#8221;</p><p>Both extremes are wrong. And I learned this the hard way.</p><p>The real skill isn&#8217;t vibe coding. It&#8217;s knowing exactly where AI belongs in your product process - and where it absolutely doesn&#8217;t. I call it the <strong>Precision Placement</strong> approach. And it changed how I build products.</p><div><hr></div><h2>The Problem With How PMs Think About AI Coding</h2><p>Let me paint you a picture of how most product managers approach vibe coding right now.</p><p><strong>Camp 1: The Ignorers.</strong> These are the PMs who still don&#8217;t use AI at all. Not for code, not for docs, not for anything meaningful. If I&#8217;m being direct - this is a red flag. If you&#8217;re a PM in 2026 and you haven&#8217;t found a single workflow where AI makes you better, you&#8217;re not being careful. You&#8217;re being left behind.</p><p><strong>Camp 2: The Replacers.</strong> These are the ones reading headlines about &#8220;one-person billion-dollar companies&#8221; and thinking they&#8217;ll fire their dev team by next quarter. They vibe-coded a landing page once and now they believe they can ship enterprise software solo.</p><p><strong>Camp 3: The FOMO Builders.</strong> This is where I found myself. The ones who see the potential, start building everything, creating side projects, spinning up apps, prototyping features - and then one day stop and ask: &#8220;Wait, is this actually moving me forward?&#8221;</p><p>Here&#8217;s the uncomfortable truth I discovered. Vibe coding creates a very specific kind of FOMO. You see what&#8217;s possible. You see people shipping products in a weekend. And something clicks in your brain that says - I should be building MORE. Faster. Everything.</p><p>But that FOMO is a trap. Because as a PM, your job was never to build everything. Your job is to decide what gets built, why, and in what order. Vibe coding doesn&#8217;t change that equation. It just makes the &#8220;building&#8221; part faster. Which means the &#8220;deciding&#8221; part becomes even more critical.</p><p><strong>Here&#8217;s what I mean with a real example.</strong></p><p>I manage a Chrome extension for travel agents - it works across GDS systems like Amadeus, Sabre, and Galileo. For over a year, users kept asking: &#8220;Is this available on mobile? Can we use it on a phone?&#8221;</p><p>We kept saying no. Not because it was a bad idea - it was a perfectly good idea. But it was never P1. It never directly impacted revenue. There were always bigger fires to fight - bugs that affected the core booking flow, features that directly moved the needle on retention, integrations that clients were waiting for.</p><p>That mobile version was the classic P2 backlog ghost. Important but never urgent. The kind of task that lives in your backlog for 18 months and eventually gets archived with a sad little &#8220;won&#8217;t do&#8221; label.</p><p>Then we tried something different. We gave it to AI.</p><p>In three days - not three sprints, three days - we had an 80% functional mobile prototype. Working. Usable. Not a mockup, not a Figma file - actual working software that users could touch and click and test.</p><p>And here&#8217;s the kicker: we spent more time on organizing the repo and setting up the sprint than on the actual development.</p><p>That project would have NEVER happened without vibe coding. Not because it was technically impossible. But because in the traditional prioritization model, it would have never earned its spot at the top of the queue. The ROI calculation would have never justified pulling a developer off P1 work.</p><p><strong>This is the &#8220;aha&#8221; moment.</strong> Vibe coding doesn&#8217;t replace your developers. It gives your P2 and P3 backlog a chance to exist.</p><p>Think about that. How many features are sitting in your backlog right now that are genuinely good ideas but will never see the light of day because you can&#8217;t justify the development time? Vibe coding changes that calculation entirely.</p><div><hr></div><h2>Precision Placement: The Skill That Actually Matters</h2><p>So if it&#8217;s not about coding everything with AI, and it&#8217;s not about ignoring AI entirely - what is it?</p><p>I call it <strong>Precision Placement</strong>. It&#8217;s the skill of knowing exactly where AI-generated code belongs in your product - and where it doesn&#8217;t.</p><p>Here&#8217;s how it works in practice.</p><h3>Step 1: Map Your Risk Zones</h3><p>Not all code is created equal. In every product, there&#8217;s a spectrum:</p><p>On one end - features where a bug is annoying but harmless. A settings page that doesn&#8217;t save preferences. A notification that fires twice. Ugly, sure. But nobody loses money.</p><p>On the other end - flows where a single bug costs real money. In my case, that&#8217;s the flight booking engine. A pricing error, a double charge, a failed cancellation - these aren&#8217;t bugs. These are financial incidents.</p><p>Before you vibe-code anything, map this spectrum for your product. Draw a line. Everything on the &#8220;safe&#8221; side is a candidate for AI-assisted development. Everything on the &#8220;dangerous&#8221; side gets human hands, human eyes, human accountability.</p><p>The mobile prototype I mentioned? Safe side. Low risk, high learning potential, zero revenue impact if something breaks. Perfect candidate.</p><p>The core booking flow? That&#8217;s the other side. I get nervous when AI touches that. And I think that nervousness is healthy.</p><h3>Step 2: Redefine Your Backlog Categories</h3><p>We started doing something new in our sprint planning. When we look at a task and estimate that AI can handle 55% or more of the execution, we assign the task differently. AI becomes the &#8220;executor.&#8221; A developer becomes the &#8220;curator&#8221; - someone who reviews, adjusts, and ensures quality.</p><p>This isn&#8217;t about replacing people. It&#8217;s about creating a new role dynamic. The developer isn&#8217;t writing code from scratch for these tasks - they&#8217;re supervising, catching edge cases, ensuring the output meets production standards.</p><p>Think of it like this: you wouldn&#8217;t hand a junior developer a critical production system on day one. But you&#8217;d absolutely let them work on internal tools, experiments, or non-critical features with a senior developer reviewing their work. AI is your extremely fast, extremely tireless junior developer. Treat it accordingly.</p><h3>Step 3: Build to Learn, Not to Ship</h3><p>Here&#8217;s where most PMs get it wrong with vibe coding. They try to ship AI-generated code directly to production. That&#8217;s the wrong frame.</p><p>Use vibe coding to learn. Build a prototype in half an evening to test if an idea even makes sense. Show it to users. Get reactions. Gather data. THEN decide if it&#8217;s worth proper engineering investment.</p><p>I can build a clickable mobile prototype in half an evening now. Not production-ready - but good enough to put in front of a user and ask: &#8220;Would this solve your problem?&#8221; That answer used to cost us two sprints of design and development. Now it costs an evening.</p><p>The prototype isn&#8217;t the product. The prototype is the question. And vibe coding lets you ask questions 10x faster.</p><h3>Step 4: Start From Pain, Not From Courses</h3><p>I see PMs signing up for &#8220;AI for Product Managers&#8221; courses from self-proclaimed gurus who teach you to paste a prompt into ChatGPT, get another prompt, paste it into Lovable, and call it a product. That&#8217;s not learning. That&#8217;s following a recipe without understanding cooking.</p><p>Instead - look at your actual day. Where do you waste time? Where do you repeat yourself? Where do you wish you could see something quickly but can&#8217;t justify the development effort?</p><p>Start there. Start from the pain you can see and touch, not from a curriculum someone designed to sell you a $997 course.</p><p>And if you want actual AI education? The courses from Anthropic&#8217;s documentation are some of the best out there. Free. Practical. Built by people who actually develop AI, not people who make content about AI.</p><h3>Step 5: Accept the PM-Dev Tension</h3><p>Here&#8217;s something I haven&#8217;t seen anyone write about - the identity crisis that vibe coding creates for PMs.</p><p>When you can build things yourself, you start blurring the line between product management and development. And that feels exciting at first. You&#8217;re not just deciding what to build - you&#8217;re building it. You&#8217;re a PM AND a developer. A PM-Dev.</p><p>Anthropic actually has an interesting internal principle: if a feature or project takes less than two weeks to launch, the developer IS the PM. They talk to users, coordinate with other teams, make the calls. No separate PM needed.</p><p>This is where things are heading. And it creates a genuine tension. Because when you&#8217;re building, you&#8217;re not doing PM work. You&#8217;re not talking to users, analyzing data, thinking about strategy, prioritizing the bigger picture.</p><p>I feel this tension constantly. With Temporal.day, with side projects, with the FOMO of &#8220;I could build this tonight.&#8221; And the honest answer is - I don&#8217;t have it perfectly figured out. Nobody does.</p><p>But here&#8217;s my rule of thumb: if building this thing teaches me something about my users or my product that I can&#8217;t learn any other way - build it. If I&#8217;m building because it feels productive and exciting but doesn&#8217;t actually move the needle - stop. Close the laptop. Go talk to a customer instead.</p><div><hr></div><h2>The Long Game Nobody&#8217;s Talking About</h2><p>Here&#8217;s my final thought, and it&#8217;s the one I want you to remember.</p><p>Right now, if you compare a PM who uses AI to one who doesn&#8217;t - the AI user wins. Obviously. It&#8217;s a massive productivity multiplier.</p><p>But zoom out. In a year, in two years, everyone will use AI. It&#8217;ll be as unremarkable as using Google Docs or Slack. The tool becomes table stakes.</p><p>And when everyone has the same tool, what differentiates you?</p><p>Your skills. Your judgment. Your understanding of users. Your ability to make the right call when the data is ambiguous and the stakes are high. The things that AI can assist with but never replace.</p><p>I see products flooding the market right now - apps that were clearly vibe-coded in a weekend, full of bugs, solving problems that don&#8217;t exist. The barrier to building dropped. But the barrier to building something GOOD - something users trust, something that works reliably, something that solves a real problem - that barrier hasn&#8217;t moved at all.</p><p>In the short term, the person who uses AI best wins. In the long term, the person with the deepest skills who ALSO uses AI wins. There&#8217;s a difference.</p><p>Vibe coding is a tool. A powerful one. But it&#8217;s not a strategy, it&#8217;s not a skill, and it&#8217;s definitely not a replacement for knowing what the hell you&#8217;re building and why.</p><p>Figure out where you want to be on the map. Understand what you want to develop - in your product and in yourself. Then use every tool available - including AI - to get there deliberately. Not frantically. Not because of FOMO. Deliberately.</p><p>That&#8217;s the skill that matters. And no amount of vibe coding will teach it to you.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://letters.mktpavlenko.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 Mykyta Pavlenko! 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></p>]]></content:encoded></item><item><title><![CDATA[Your Competitors Are Laughing at You. Good.]]></title><description><![CDATA[Why the best products start as jokes - and how to find the market nobody&#8217;s fighting for]]></description><link>https://letters.mktpavlenko.com/p/your-competitors-are-laughing-at</link><guid isPermaLink="false">https://letters.mktpavlenko.com/p/your-competitors-are-laughing-at</guid><dc:creator><![CDATA[Mykyta]]></dc:creator><pubDate>Tue, 31 Mar 2026 14:55:15 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/71030403-de09-4578-8adb-b883cfeb332e_2752x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In 2007, Steve Ballmer stood in front of a camera and laughed.</p><p>&#8220;$500? Fully subsidized with a plan?&#8221; He could barely hold it together. &#8220;That is the most expensive phone in the world. And it doesn&#8217;t appeal to business customers because it doesn&#8217;t have a keyboard.&#8221;</p><p>He was talking about the iPhone.</p><p>Nokia controlled 51% of the global mobile phone market at the time. Microsoft was everywhere. BlackBerry owned the enterprise. Apple had just 5% and a device that most industry experts called a toy.</p><p>Six years later, Nokia lost 90% of its market value. BlackBerry became a cautionary tale. And that &#8220;toy&#8221; redefined how 4 billion people interact with technology.</p><p>Here&#8217;s what I find fascinating about this story. It&#8217;s not that the experts were wrong. It&#8217;s that they were wrong <em>because</em> they were experts. They knew the phone market. They knew what customers wanted. They knew what worked. And all of that knowledge became the exact thing that blinded them.</p><p>Tony Fadell - the guy who built the iPod and co-created the iPhone - writes about this in his book <em>Build</em>. His core argument is simple: the first version of your product should be disruptive, not evolutionary. You&#8217;re not supposed to make a better version of what exists. You&#8217;re supposed to make something that changes how people think about the category entirely.</p><p>That idea has been living in my head for the past few weeks. Not as theory - but as a lens for what I see happening in the market right now.</p><p>Because we&#8217;re in a moment where disruption isn&#8217;t just possible. It&#8217;s <em>easier than ever</em>. And almost nobody is doing it right.</p><div><hr></div><h2>The Problem With How Most Founders Think About Products</h2><p>Here&#8217;s the standard playbook in 2026:</p><p>You open ChatGPT. You type &#8220;give me a startup idea&#8221; or &#8220;what&#8217;s a good niche for a SaaS product.&#8221; The AI gives you something that sounds reasonable - habit trackers, finance apps, productivity tools. You think &#8220;great, that makes sense&#8221; and start building.</p><p>This is the most expensive mistake you can make. And I don&#8217;t mean expensive in money. I mean expensive in time - months or years spent in a market where the math doesn&#8217;t work in your favor.</p><p>Let me show you why.</p><p>The habit tracking app market is projected to reach $14.94 billion by 2026. Sounds massive, right? Now look deeper. Over 52% of users quit within the first 30 days. The market is so oversaturated that differentiation is nearly impossible. CPC for paid acquisition keeps climbing. Organic growth? Good luck ranking when there are hundreds of competitors with established SEO and millions in funding.</p><p>And here&#8217;s the trap: if you ask AI &#8220;is the habit tracking market a good opportunity?&#8221; - it will say yes. Because the market IS big. Because the data IS positive at a surface level. AI pulls from existing information, from articles that analyze these markets favorably, from optimistic projections. It doesn&#8217;t know what it&#8217;s like to actually try to acquire users in a space where every keyword costs $3+ per click and retention is garbage.</p><p>This is what I call the &#8220;AI research trap.&#8221; You&#8217;re not getting bad information. You&#8217;re getting <em>incomplete</em> information. And incomplete information in market selection is worse than no information - because it gives you confidence in the wrong direction.</p><p>The same pattern plays out in finance apps, subscription trackers, to-do lists, note-taking tools. Massive markets. Thousands of competitors. Brutal unit economics for anyone without venture capital.</p><p>Meanwhile, there are hundreds of niches where the opportunity is wide open. But nobody looks at them because they seem too small.</p><div><hr></div><h2>The Disruption Nobody Sees Coming</h2><p>Here&#8217;s what most people miss about the current moment.</p><p>We have roughly 4.7 billion smartphone users globally. A huge chunk of them have never meaningfully used AI. Not ChatGPT. Not AI features in their apps. Nothing. When you show these people a product that uses AI to solve a real problem they have - something as simple as automating a workflow they do manually every day - their reaction isn&#8217;t &#8220;oh, another AI tool.&#8221; Their reaction is &#8220;wait, this is possible?&#8221;</p><p>That reaction - that genuine surprise - IS disruption. Not in the Silicon Valley &#8220;we&#8217;re disrupting the $50B market&#8221; sense. In the real sense. You&#8217;re fundamentally changing how someone thinks about what&#8217;s possible.</p><p>And this is where it connects back to the iPhone story. Apple didn&#8217;t make a better phone. They made a product so different that competitors literally couldn&#8217;t evaluate it using their existing frameworks. Nokia looked at the iPhone and saw a phone without a keyboard. They missed that it wasn&#8217;t a phone at all - it was a pocket computer that happened to make calls.</p><p>The same thing is happening right now with AI products. Incumbents in most industries look at AI features and see them through the lens of their existing product. &#8220;We&#8217;ll add AI to our dashboard.&#8221; &#8220;We&#8217;ll use AI for better recommendations.&#8221; They&#8217;re building better keyboards while someone is about to remove the keyboard entirely.</p><p>Tony Fadell has this concept in <em>Build</em> that I love: &#8220;The best ideas are painkillers, not vitamins.&#8221; Vitamins are nice to have. You forget to take them and nothing happens. Painkillers solve an immediate, urgent problem. You know instantly if they&#8217;re working.</p><p>Most AI products being built right now are vitamins. They make existing workflows slightly faster or slightly easier. The real opportunity is building painkillers - products that solve problems people didn&#8217;t even know could be solved.</p><div><hr></div><h2>Why &#8220;Too Small&#8221; Is Your Biggest Advantage</h2><p>Now here&#8217;s where my thinking diverges from what most people teach.</p><p>Conventional wisdom says: find a big market. Total addressable market of $1 billion+. Growth rate of 20%+ year over year. That&#8217;s what investors want to hear. That&#8217;s what accelerators teach. That&#8217;s what every startup book recommends.</p><p>But there&#8217;s a math problem with big markets: big markets attract big teams. Big teams have big budgets. Big budgets mean they can outspend you on acquisition, out-hire you on engineering, and out-market you on brand.</p><p>Now flip it. What about a market that&#8217;s $10 million? $50 million? Too small for a venture-backed startup with 20 employees and $3 million in annual burn. Way too small for an enterprise team. Nobody writes TechCrunch articles about $10 million markets.</p><p>But for a solo founder? A market where one competitor has 60%+ market share and only a handful of other players exist? Where the market grows 15-20% year over year? Where the dominant player hasn&#8217;t innovated in years because the market isn&#8217;t big enough to justify their R&amp;D budget?</p><p>That&#8217;s not a bad market. That&#8217;s the <em>perfect</em> market.</p><p>Solo-founded startups now represent 36.3% of all new companies - up from 23.7% in 2019. And 38% of seven-figure businesses are run by solopreneurs. The reason is simple: AI has collapsed the cost of building. What used to require a team of 10 can now be done by one person with the right tools and workflow. Operating margins for AI-powered solo founders hit 60-80%, compared to 10-20% for traditionally staffed businesses.</p><p>This means the &#8220;minimum viable market&#8221; has shrunk dramatically. Markets that were economically unviable five years ago are now goldmines for solo founders. You don&#8217;t need millions of users. You don&#8217;t need venture capital. You need a niche where real pain exists, competition is thin, and you can build something genuinely different.</p><div><hr></div><h2>How to Find Your Disruption: A Practical Framework</h2><p>Theory is great. But what do you actually do on Monday morning? Here are five steps.</p><h3>Step 1: Stop Asking AI for Ideas. Start Giving It Parameters.</h3><p>The biggest mistake is treating AI as a creative partner for market selection. It&#8217;s not. It&#8217;s a research assistant - and a good one - but only if you give it the right constraints.</p><p>Don&#8217;t ask: &#8220;What&#8217;s a good SaaS idea?&#8221; Ask: &#8220;Find me markets where one competitor holds 60%+ market share, there are fewer than 10 significant players globally, and the market has grown 15%+ year over year for the last 3 years.&#8221;</p><p>Don&#8217;t ask: &#8220;Is the habit tracking market saturated?&#8221; Ask: &#8220;What is the CPC for the top 20 keywords in the habit tracking space? What&#8217;s the average 30-day retention rate for the top 10 habit tracking apps? How many new habit tracking apps launched in the last 12 months?&#8221;</p><p>The difference is night and day. The first type of question gets you generic, optimistic answers. The second gets you data you can actually make decisions with.</p><h3>Step 2: Use Sensor Tower to See What Nobody Else Sees</h3><p>Most founders do their market research on Product Hunt and Twitter. That&#8217;s like trying to understand the ocean by looking at the waves on the surface.</p><p>Sensor Tower gives you the submarine view. You can see estimated downloads, revenue, user engagement, and retention by country, category, and platform. You can track how specific apps are performing over time. You can see which markets are growing and which are stagnating.</p><p>The key move: look for categories where the top app is making real revenue but hasn&#8217;t updated meaningfully in 6-12 months. Where user reviews mention the same complaints over and over. Where the market is growing but the product experience is stuck in 2020.</p><p>That&#8217;s your opening.</p><h3>Step 3: Talk to Humans (And Watch Their Eyes)</h3><p>This is the test from <em>Build</em> that I think about constantly. When you describe your product idea to someone - not another founder, not a tech person, a normal person - watch their reaction.</p><p>If they say &#8220;oh cool, interesting&#8221; and change the subject - you have a vitamin.</p><p>If they lean in and start asking questions - &#8220;wait, how does that work? Can it do X? What about Y?&#8221; - you have a painkiller. That curiosity, that pull toward wanting to understand more - that&#8217;s the reaction that predicts product-market fit better than any survey or market analysis.</p><p>Don&#8217;t skip this step. Don&#8217;t rationalize your way past lukewarm reactions. The humans will tell you the truth faster than any data set.</p><h3>Step 4: Look Where Nobody&#8217;s Looking</h3><p>The AI boom has created a gold rush mentality. Everyone is building AI-powered productivity tools, AI writing assistants, AI analytics dashboards. These are the habit trackers of 2026 - crowded, commoditized, and brutal for newcomers.</p><p>Meanwhile, entire industries are barely touched by AI. Think about markets where the users are 40+ years old. Where the existing software looks like it was built in 2012. Where &#8220;digital transformation&#8221; is still a buzzword, not a reality. Healthcare admin. Construction management. Local government. Small-scale agriculture. Trade services.</p><p>These aren&#8217;t sexy markets. They&#8217;re not going to get you on the front page of Hacker News. But they&#8217;re markets with real pain, low competition, and users who will be genuinely amazed by what AI can do - because they&#8217;ve never seen it applied to their problems before.</p><h3>Step 5: Escape the Mediocrity Trap</h3><p>This is the most dangerous part, and nobody talks about it.</p><p>You build your product. You launch. And the results are... mediocre. Not terrible. Not great. You get some users. Some of them stick around. Revenue trickles in. And your brain starts rationalizing.</p><p>&#8220;I haven&#8217;t run ads yet.&#8221; &#8220;I haven&#8217;t built feature X yet.&#8221; &#8220;People are looking at it - they just haven&#8217;t converted.&#8221; &#8220;I need to give it more time.&#8221;</p><p>This is the mediocrity trap. And it will eat years of your life if you let it.</p><p>Mediocre results are not a sign that you&#8217;re close to product-market fit. They&#8217;re a sign that you&#8217;re probably not. Real product-market fit feels like being pulled forward. Users tell other users. Growth accelerates on its own. People get angry when the product is down.</p><p>If you&#8217;re three months in and constantly explaining to yourself why the results aren&#8217;t better - stop. Go back to Step 1. Rerun your analysis. Find a different market or a different angle.</p><p>The courage to kill a mediocre product is worth more than the persistence to keep a mediocre product alive.</p><div><hr></div><h2>The Bottom Line</h2><p>The best products in history started as jokes. The iPhone was a toy with no keyboard. The Nest thermostat was a &#8220;fancy temperature dial.&#8221; Airbnb was &#8220;who would sleep on a stranger&#8217;s couch?&#8221;</p><p>Competitor laughter isn&#8217;t a warning sign. It&#8217;s a leading indicator. If everyone in your space immediately understands what you&#8217;re building - you&#8217;re probably building something evolutionary, not disruptive. And evolutionary products in crowded markets are a death sentence for solo founders.</p><p>The opportunity right now is enormous. Billions of people who haven&#8217;t used AI for anything meaningful. Hundreds of niches too small for big teams but perfect for one person with the right tools. Markets where the dominant player is asleep at the wheel.</p><p>Don&#8217;t ask AI for ideas. Give it parameters. Use tools like Sensor Tower to see what others can&#8217;t. Talk to humans and watch their eyes. Build where nobody&#8217;s looking. And if the results are mediocre - have the courage to walk away and find a better fight.</p><p>The market is waiting for products that make people lean in and say &#8220;wait - how does that work?&#8221;</p><p>Go build one.</p><div><hr></div><p><em>Inspired by Tony Fadell&#8217;s &#8220;Build: An Unorthodox Guide to Making Things Worth Making&#8221; - one of the best books on product thinking I&#8217;ve read this year.</em></p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://letters.mktpavlenko.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://letters.mktpavlenko.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[PMs Don’t Manage Backlogs Anymore. They Manage AI Agents.]]></title><description><![CDATA[73% of PMs use AI tools daily. But most use them wrong. Here&#8217;s the framework for leading AI agents instead of blindly following them&#8202;&#8212;&#8202;from a PM building an AI product.]]></description><link>https://letters.mktpavlenko.com/p/pms-dont-manage-backlogs-anymore</link><guid isPermaLink="false">https://letters.mktpavlenko.com/p/pms-dont-manage-backlogs-anymore</guid><dc:creator><![CDATA[Mykyta]]></dc:creator><pubDate>Tue, 24 Mar 2026 20:49:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/938a1f8c-20d3-4e9e-b7bf-c23f7e3b98b0_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Over 73% of product managers now use AI tools in their daily workflow. That&#8217;s nearly double from just two years ago.</p><p>Scroll through LinkedIn for five minutes and you&#8217;ll see it everywhere. &#8220;10x your PM productivity with AI.&#8221; &#8220;How I replaced my entire research process with Claude.&#8221; &#8220;This one prompt writes your PRDs for you.&#8221;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://letters.mktpavlenko.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 Mykyta Pavlenko! 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>Here&#8217;s what nobody says out loud: most of them are doing it wrong.</p><p>I know because I&#8217;m a PM who builds an AI-powered calendar app&#8202;&#8212;&#8202;Temporal.day. I use AI agents every single day. Not as a novelty. Not for LinkedIn content. As my actual workflow. And the more I use them, the more I see the same pattern everywhere.</p><p>Product managers in 2026 fall into two camps. Both are losing.</p><p>The first camp treats AI like a magic oracle. They copy-paste every question, every decision, every piece of thinking into ChatGPT or Claude. They let it write their PRDs, run their research, draft their emails. They essentially outsource their brain. And their work reads like it. Flat. Generic. Missing the context that only a human who&#8217;s deep in the problem can provide.</p><p>The second camp refuses to touch it. &#8220;I prefer to do things properly.&#8221; &#8220;AI can&#8217;t understand my users.&#8221; &#8220;It&#8217;s just a fad.&#8221; Meanwhile, the market moves at 10x speed, their competitors ship faster, and they&#8217;re stuck in 2023.</p><p>The winning move? Neither. It&#8217;s something different entirely.</p><p>And it starts with understanding one thing: AI is not your replacement. It&#8217;s not your assistant either. It&#8217;s your junior PM&#8202;&#8212;&#8202;and you need to manage it like one.</p><div><hr></div><h3>The Problem With How Most PMs Think About AI</h3><p>Here&#8217;s the conventional wisdom: AI tools make you faster. Just plug them in, ask your questions, get your answers, move on.</p><p>Sounds logical. It&#8217;s also wrong.</p><p>When you let AI do your thinking, something subtle happens. Your own skill level starts dropping. Not overnight&#8202;&#8212;&#8202;slowly. Like a muscle you stop using. You stop forming hypotheses before looking at data. You stop connecting dots between user complaints and product architecture. You stop thinking.</p><p>I see this constantly. PMs who generate beautiful-looking PRDs with AI&#8202;&#8212;&#8202;but can&#8217;t defend a single decision in the document when challenged. Research summaries that sound impressive but miss the one insight that actually matters. Strategy docs that read like they were written by someone who&#8217;s never talked to a customer.</p><p>And here&#8217;s the kicker&#8202;&#8212;&#8202;readers can tell. Studies show AI-generated content receives 43% lower trust ratings. Over 50% of people say they&#8217;d lose respect for a writer who relies on AI. Your stakeholders, your engineers, your users&#8202;&#8212;&#8202;they feel it even if they can&#8217;t articulate why.</p><p>It&#8217;s the same problem as in user research. You can ask users whether a button should be blue or yellow. That&#8217;s fine. But you can&#8217;t ask them how the underlying system should work to solve their problem. That requires deep product thinking. That&#8217;s YOUR job. The moment you outsource that to AI, you&#8217;re building a product based on an algorithm&#8217;s best guess&#8202;&#8212;&#8202;not on real understanding.</p><p>I had a concrete moment that crystallized this for me. I needed to research how to implement document uploading through a browser extension for Temporal.day. The old me would have gone straight to a developer. We&#8217;d sit together, brainstorm solutions, research APIs, evaluate tradeoffs. Days of work.</p><p>Instead, I opened Claude. We did several iterations. I asked targeted questions. I challenged its suggestions. I pushed it in directions based on what I knew about our architecture and users. Within hours, I had three viable implementation approaches to bring to the team.</p><p>Here&#8217;s the important part&#8202;&#8212;&#8202;one of those solutions was something none of us knew was even possible. The AI found a technical path we&#8217;d never considered. But it only found it because I kept steering the conversation with context the AI didn&#8217;t have. My knowledge of our users. Our technical constraints. Our business priorities.</p><p>The AI didn&#8217;t make the decision. I did. But it expanded the solution space dramatically. That&#8217;s the difference.</p><h3>The Shift: From Context Consumer to Context Engineer</h3><p>There&#8217;s a new term floating around in 2026&#8202;&#8212;&#8202;&#8220;context engineering.&#8221; Gartner published a formal definition. Companies are hiring for it. And it perfectly describes what the best PMs actually do with AI.</p><p>Context engineering isn&#8217;t about writing better prompts. It&#8217;s about designing the entire information environment that AI operates in. Your system instructions. Your conversation history. Your persistent knowledge. The documents you feed it. The tools you connect. And&#8202;&#8212;&#8202;critically&#8202;&#8212;&#8202;what you deliberately exclude.</p><p>For a PM, this translates to something practical. Before you ever ask AI a question, you set up the playing field. Who are you? What does your company do? What are your constraints? What decisions have you already made, and why?</p><p>Here&#8217;s my actual process. I don&#8217;t just open Claude and start typing. I talk to it first in a regular chat. I explain the task. Then I ask it to understand me as a person and my business. I let it ask ME questions. From that conversation, it forms an instruction set&#8202;&#8212;&#8202;a project context. And that&#8217;s what I bring into the actual working project.</p><p>The result? AI that actually knows what it&#8217;s talking about. Not generic advice you could get from any Google search&#8202;&#8212;&#8202;specific, contextual thinking that&#8217;s grounded in my reality.</p><p>This is what separates PMs who use AI well from PMs who use AI a lot. Volume doesn&#8217;t matter. Context does.</p><div><hr></div><h3>5 Steps to Lead AI Instead of Following It</h3><p>Here&#8217;s how to make this real in your daily work. Not theory&#8202;&#8212;&#8202;actual steps I use while building Temporal.day.</p><h3>Step 1: Build Your AI&#8217;s Understanding Before Asking It Anything</h3><p>Think of it like onboarding a new team member. You wouldn&#8217;t throw a fresh hire into a sprint planning meeting on day one and expect useful input. You&#8217;d give them context first.</p><p>Do the same with AI. Start a conversation where the sole purpose is context transfer. Tell it about your product, your users, your market, your tech stack. Let it ask you questions. The more it understands before you start working, the better every interaction will be afterward.</p><p>What this gives you: AI responses that are specific to your situation instead of generic best practices. The difference is night and day.</p><h3>Step 2: Talk Through Decisions&#8202;&#8212;&#8202;Don&#8217;t Just Ask for Answers</h3><p>Most PMs use AI like a search engine. &#8220;What&#8217;s the best way to prioritize features?&#8221; That gets you a textbook answer.</p><p>Instead, talk through your actual decision. &#8220;I&#8217;m choosing between building notifications and improving onboarding. Here&#8217;s our current activation rate, here&#8217;s what users are saying, here&#8217;s our runway. What am I not seeing?&#8221;</p><p>Use AI as a thinking partner, not an answer machine. Share your reasoning. Explain your constraints. Let it challenge your assumptions. But always remember&#8202;&#8212;&#8202;you make the call. It expands your perspective. You own the decision.</p><p>What this gives you: better decisions, faster. Not because AI decides for you, but because it stress-tests your thinking in real time.</p><h3>Step 3: Run AI in Parallel&#8202;&#8212;&#8202;Not in Series</h3><p>Here&#8217;s something most people miss. The real power of AI agents isn&#8217;t that they answer faster. It&#8217;s that they work while you work.</p><p>My morning routine includes checking Amplitude AND checking my Claude Cowork scheduled tasks. I set up agents that run automatically&#8202;&#8212;&#8202;monitoring competitors, surfacing trends, preparing research briefs. They run in the background while I sleep, while I&#8217;m in meetings, while I&#8217;m doing deep work.</p><p>This is the &#8220;junior PM&#8221; analogy in practice. You don&#8217;t sit next to your junior and watch them work. You give them clear tasks, check their output, and redirect when needed. Same with AI agents.</p><p>What this gives you: your time goes to high-value thinking while AI handles the information gathering. You review and decide. You don&#8217;t wait.</p><h3>Step 4: Start Small With Agents&#8202;&#8212;&#8202;And Obsess Over Security</h3><p>If you&#8217;re new to AI agents, don&#8217;t try to automate your entire workflow on day one. Find one simple problem. Something repetitive. Something low-risk.</p><p>Build a solution with minimal cost&#8202;&#8212;&#8202;even free tiers work. Deploy it. Watch it run. Learn how it breaks. Because it will break.</p><p>And here&#8217;s something the LinkedIn &#8220;AI guru&#8221; crowd never mentions&#8202;&#8212;&#8202;security matters enormously. I see cases constantly where admin panels get compromised, user data gets exposed, paid customer lists leak. When you&#8217;re building with AI agents, security isn&#8217;t optional. It&#8217;s your first constraint, not your last thought.</p><p>The best course on building agents? Not some influencer&#8217;s $499 masterclass. Go read Anthropic&#8217;s documentation on how to create agents, how they work, how LLMs function. It&#8217;s free. It&#8217;s from the people who actually build this technology. It gives you the real understanding&#8202;&#8212;&#8202;not just a prompt template.</p><p>What this gives you: real experience with agents without risking your product or your users&#8217; data.</p><h3>Step 5: Protect Your Thinking Muscle</h3><p>This is the most counterintuitive step. As you get better at using AI, deliberately maintain skills it could do for you.</p><p>Write some PRDs manually. Do some research the old way. Make decisions without asking AI first. Not because AI can&#8217;t help&#8202;&#8212;&#8202;but because your judgment is the thing that makes AI useful in the first place. If you let that muscle atrophy, your AI output gets worse too. Garbage in, garbage out&#8202;&#8212;&#8202;and &#8220;garbage&#8221; here means a PM who&#8217;s lost the ability to think critically about the problem.</p><p>Remember&#8202;&#8212;&#8202;the reason people can spot AI-generated content isn&#8217;t that AI writes badly. It&#8217;s that the content lacks the specific, hard-won perspective that only comes from doing the work yourself. Keep doing the work. Then use AI to amplify it.</p><p>What this gives you: the rare combination of speed AND depth. That&#8217;s the real competitive advantage.</p><div><hr></div><h3>The One Thing to Remember</h3><p>Here&#8217;s what it all comes down to.</p><p>Don&#8217;t give AI 100% of your work. Keep it at your level&#8202;&#8212;&#8202;or slightly behind you. You lead. It follows. You include it in your process, you customize it, you teach it your context. But you never hand over the steering wheel completely.</p><p>The PMs who will thrive in 2026 and beyond aren&#8217;t the ones who use AI the most. They&#8217;re the ones who use it the best&#8202;&#8212;&#8202;as a force multiplier for thinking they&#8217;re already doing, not a replacement for thinking they&#8217;ve stopped doing.</p><p>The backlog isn&#8217;t dead. But the PM who only manages a backlog? That role is gone. The new PM manages context, leads agents, and&#8202;&#8212;&#8202;most importantly&#8202;&#8212;&#8202;never stops thinking for themselves.</p><p>Because the moment you outsource your judgment to a machine, you&#8217;re not a product manager anymore. You&#8217;re just a very expensive copy-paste operator.</p><p>And your Claude already knows that.</p><div><hr></div><p><em>Target keywords: agentic product management, PM managing AI agents, AI product manager skills 2026, context engineering, product management AI workflows</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://letters.mktpavlenko.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 Mykyta Pavlenko! 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[I'm Not a Developer. I Built an AI Product in 2 Months. Here's My Entire $150/Month AI Stack.]]></title><description><![CDATA[The exact AI workflow behind building Temporal.day from scratch.]]></description><link>https://letters.mktpavlenko.com/p/ai-workflow-built-product-no-code</link><guid isPermaLink="false">https://letters.mktpavlenko.com/p/ai-workflow-built-product-no-code</guid><dc:creator><![CDATA[Mykyta]]></dc:creator><pubDate>Sun, 22 Mar 2026 08:57:29 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7e02f197-367b-4902-87b3-25b70843d208_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><h3>Most people use AI to write emails faster or summarize articles.</h3><p>I used it to replace a team I couldn&#8217;t afford&#8202;&#8212;&#8202;and build a product I couldn&#8217;t build alone.</p><p>Let me back up. I&#8217;m a Product Manager. Five years of experience across telecom and travel-tech. I can write a solid PRD, run a user interview, and prioritize a backlog in my sleep. But I can&#8217;t code. Not really. I understand architecture at a high level, I can tell you how I want services to talk to each other, but writing production code? That&#8217;s not me.</p><p>And yet, two months ago, I shipped <a href="https://temporal.day/">Temporal.day</a>&#8202;&#8212;&#8202;an AI-powered calendar that auto-schedules your tasks. A real product. With real users. Built almost entirely with AI tools.</p><p>Not a landing page. Not a Figma prototype. A working product with AI auto-scheduling, natural language input, Google Calendar sync, payments, and a live user base.</p><p>My total AI spend: roughly <strong>$150 per month</strong>.</p><p>A developer alone would cost me $5,000+ per month. Add a designer, a content person, someone to help with distribution&#8202;&#8212;&#8202;you&#8217;re looking at $10K+ easily. And it would take significantly longer to ship.</p><p>I&#8217;m not writing this to brag. I&#8217;m writing this because most &#8220;how I use AI&#8221; articles are useless. They list 10 tools, describe each one in two sentences, and leave you with nothing actionable. You&#8217;ve read that article. I&#8217;ve read that article. It didn&#8217;t change how I work.</p><p>This is different. This is my actual daily workflow&#8202;&#8212;&#8202;tool by tool, hour by hour, decision by decision. What I use, why I use it, where AI saves me hours, and where I deliberately don&#8217;t use it at all.</p><p>If you&#8217;re a PM thinking about building your own product, a founder trying to do more with less, or anyone curious about what an AI-first workflow actually looks like in practice&#8202;&#8212;&#8202;this is everything I know.</p><div><hr></div><h3>The $150 Team</h3><p>Here&#8217;s a mental exercise. Imagine you&#8217;re hiring a team to build and launch a product.</p><p>You need a developer to write code. A researcher to dig through competitors, find the right tools, analyze markets. A content person to write tweets, blog posts, and product updates. A distribution assistant to monitor Reddit, find relevant conversations, and spot opportunities. And someone to QA everything, find bugs, and write test cases.</p><p>That&#8217;s five roles. Conservatively $10&#8211;15K per month. Realistically more.</p><p>Or you can do what I did: pay $150/month and build the team out of AI tools.</p><p>Here&#8217;s who&#8217;s on my team.</p><p><strong>Claude&#8202;&#8212;&#8202;my CTO and Head of Content (~80% of my work)</strong></p><p>Claude is the center of everything. I use it for research, strategy, content creation, writing documentation, brainstorming features, analyzing competitors, and building artifacts.</p><p>Why Claude over ChatGPT? Three things. First, it holds context significantly better over long sessions. When I&#8217;m deep in a product strategy conversation that spans 30+ messages, Claude still remembers what we discussed at the beginning. ChatGPT starts drifting.</p><p>Second, it adapts to me. After working with Claude consistently, the responses feel calibrated to how I think and what I need. ChatGPT never quite got there&#8202;&#8212;&#8202;the personalization felt off, and I could never get comfortable with its responses.</p><p>Third, the artifacts. When I need a structured document, a comparison table, a framework&#8202;&#8212;&#8202;Claude&#8217;s artifacts are cleaner and more usable than anything I&#8217;ve gotten from other tools.</p><p>If Claude is one person on my team, it&#8217;s the one I&#8217;d keep if I had to fire everyone else.</p><p><strong>Claude Code&#8202;&#8212;&#8202;my developer</strong></p><p>This is the big one. I&#8217;m not a developer, and Claude Code writes all of Temporal&#8217;s production code.</p><p>My process looks like this: I describe the architecture I want. How services should interact. What the user experience should feel like. What the edge cases are. Claude Code writes the implementation. I test. We iterate.</p><p>Is the code perfect? Probably not by senior engineer standards. But the product works. It ships. It handles real users. And the speed is incomparable&#8202;&#8212;&#8202;Claude Code writes faster than any human developer. Not better, necessarily. But faster. And when you&#8217;re building 0&#8594;1, speed of iteration is everything.</p><p>The alternative was spending months finding a technical co-founder or burning through savings hiring a freelance dev. Claude Code let me go from idea to working product in two months.</p><p><strong>Perplexity&#8202;&#8212;&#8202;my analyst</strong></p><p>Perplexity handles research that Google can&#8217;t.</p><p>Here&#8217;s a real example. I needed a payment processor for Temporal. Sounds simple, right? Google &#8220;best payment processors&#8221; and pick one. Except I&#8217;m a resident of a specific country, which means half the popular services won&#8217;t work for me. And the ones Google surfaces are all the same big names&#8202;&#8212;&#8202;Stripe, Paddle, LemonSqueezy. The SEO game is dominated by the biggest players.</p><p>I needed something smaller. Something niche but reliable, with lower commissions, that actually works in my jurisdiction.</p><p>Google was useless. I kept seeing the same top-10 lists recycled across every blog.</p><p>Perplexity found it. It took a few hours of back and forth&#8202;&#8212;&#8202;trying different criteria, evaluating options, checking availability. But it surfaced a service I never would have discovered through traditional search. A smaller provider, popular in certain circles, with better terms for my situation.</p><p>That&#8217;s the pattern: when you need to go beyond the SEO-optimized surface of the internet, Perplexity digs deeper.</p><p><strong>ChatGPT Codex&#8202;&#8212;&#8202;my QA engineer</strong></p><p>I still pay for ChatGPT, but my usage dropped to about 5%. Here&#8217;s why I keep it: Codex.</p><p>Claude Code and ChatGPT Codex have fundamentally different personalities. Claude Code is the fast developer who wants to ship everything now. Codex is the careful reviewer who reads the entire codebase and says, &#8220;Hey, did you notice this bug on line 847?&#8221;</p><p>I use Codex for full project reviews, finding bugs that Claude Code introduced while moving fast, and writing test cases. It&#8217;s a different kind of thinking&#8202;&#8212;&#8202;slower, more thorough, more concerned with the whole picture. Claude Code builds. Codex audits. They complement each other.</p><p>Plus, OpenAI&#8217;s $20 subscription gives access to the API, which I use for my OpenClaw bot. And honestly&#8202;&#8212;&#8202;if I pause my subscription, ChatGPT keeps working for another four weeks while sending polite reminders about the failed payment. So effectively it&#8217;s $20 per two months. I&#8217;m not proud of it. But I&#8217;m being honest.</p><p><strong>OpenClaw&#8202;&#8212;&#8202;my distribution assistant who never sleeps</strong></p><p>This one changed my mornings completely.</p><p>OpenClaw is an open-source AI agent that runs on your machine and connects to messaging apps. I configured mine to work as an automated assistant that operates around the clock.</p><p>Every morning when I wake up at 5&#8211;6 AM, OpenClaw has already prepared my briefing:</p><ul><li><p>Ideas people are discussing online that could inspire new features or products</p></li><li><p>A summary of what&#8217;s new in the AI and productivity space&#8202;&#8212;&#8202;things I might have missed</p></li><li><p>Interesting tweets that accumulated overnight in my niche</p></li><li><p>Reddit posts where people are discussing productivity apps, calendars, or looking for tools like Temporal&#8202;&#8212;&#8202;opportunities for me to engage and mention my product</p></li></ul><p>This used to be an hour of manual scrolling. Now it&#8217;s a curated feed waiting for me before my first coffee.</p><p><strong>The supporting cast</strong></p><p>SuperWhispy converts my voice recordings to text&#8202;&#8212;&#8202;I often brainstorm by talking, then turn those recordings into tweets, notes, or article drafts. AI image generators handle TikTok avatars and visual content. Small tools, but they close gaps that would otherwise require hiring a designer for quick tasks.</p><p><strong>Total cost: ~$150/month. Total roles covered: 5+.</strong></p><div><hr></div><h3>5 AM to 10 AM: What an AI-First Workday Actually Looks Like</h3><p>I wake up between 5 and 6 AM. My main job starts later, so mornings are for Temporal.</p><p><strong>First 15 minutes: The OpenClaw briefing.</strong></p><p>I check my phone. OpenClaw has already sent me a Telegram summary: trends, ideas, relevant Reddit threads, interesting tweets in my niche. I scan it, star anything worth acting on, and move to my desk.</p><p><strong>Next 30&#8211;60 minutes: Research and planning in Claude.</strong></p><p>Before I write a single line of code, I think. I open Claude&#8202;&#8212;&#8202;lately through Claude Code on desktop because the research feels more thorough there&#8202;&#8212;&#8202;and we work through whatever problem I&#8217;m tackling.</p><p>Say I&#8217;m building a new feature. The session looks like this:</p><p>First, I research with Claude. What are competitors doing? What are the technical options? What are the tradeoffs? We go back and forth until I have a clear picture.</p><p>Then, we formulate the approach together. Not a formal spec, but clear theses: &#8220;This is what we&#8217;re building. This is how it should work. These are the edge cases.&#8221;</p><p>I write this down as structured notes. This part is critical&#8202;&#8212;&#8202;and I&#8217;ll explain why in the next section.</p><p><strong>Next 2&#8211;3 hours: Building with Claude Code.</strong></p><p>I take those notes and move to Claude Code. Now it&#8217;s execution mode.</p><p>I describe what I want. Claude Code writes it. I test. Something breaks. I describe the issue. Claude Code fixes it. We iterate.</p><p>On a good morning, I ship a complete feature before my day job starts. On a normal morning, I make solid progress on something complex. Either way&#8202;&#8212;&#8202;the product moves forward every single day.</p><p><strong>Throughout the day: Content in the gaps.</strong></p><p>Between meetings at my main job, during lunch, on my commute&#8202;&#8212;&#8202;I use Claude to draft tweets, brainstorm content ideas, or think through Temporal&#8217;s positioning. These micro-sessions add up. Most of my Twitter content is born in 5-minute bursts throughout the day.</p><p><strong>Evenings: If time allows, one more session.</strong></p><p>After work, gym, or English classes&#8202;&#8212;&#8202;if I have energy left, I do another 1&#8211;2 hour session with Claude Code. But mornings are the sacred time.</p><div><hr></div><h3>What AI Can&#8217;t Do (And Where I Refuse to Use It)</h3><p>This is the part most AI articles skip. And it&#8217;s the most important part.</p><p>Because if all you hear is &#8220;AI can do everything,&#8221; you&#8217;ll use it wrong. You&#8217;ll delegate the things that only you should do. And you&#8217;ll end up with a product that technically works but doesn&#8217;t make sense.</p><p>Here&#8217;s where I deliberately keep AI out of my process.</p><p><strong>Product vision is mine. Period.</strong></p><p>I don&#8217;t ask AI to write my product requirements. Ever.</p><p>This might sound counterintuitive. Claude is great at writing documentation. It can generate a PRD in seconds. But here&#8217;s the problem: if AI writes your spec, you stop understanding your own product.</p><p>When I sit down to define how a feature should work, I need to think through every scenario. What happens when a user has 12 meetings and 20 tasks in one day? What should the AI prioritize? What does &#8220;urgent&#8221; mean in the context of someone&#8217;s Tuesday vs. their Friday?</p><p>These aren&#8217;t technical questions. They&#8217;re product questions. And the answers come from my 5+ years of experience, my understanding of the user, and my vision for what Temporal should feel like.</p><p>If I outsource this thinking to AI, I become a project manager for a machine. I stop being the product person. And the product becomes generic&#8202;&#8212;&#8202;because AI will always default to the most common patterns, not the most interesting ones.</p><p>So I write the specs. I define the logic. I draw the boundaries. Then, and only then, does AI help me execute.</p><p><strong>Testing is human work.</strong></p><p>AI can write test cases. And I use AI-generated test cases as a starting point. But the actual testing&#8202;&#8212;&#8202;clicking through flows, feeling the friction, noticing that something is technically correct but feels wrong&#8202;&#8212;&#8202;that&#8217;s me.</p><p>You have to use your own product obsessively. Every day. As a real user, not as a builder. The moment you stop testing personally is the moment your product starts drifting from what users actually need.</p><p><strong>Distribution strategy needs a human brain.</strong></p><p>AI handles maybe 10% of my distribution work&#8202;&#8212;&#8202;OpenClaw finding Reddit threads, Claude drafting tweets. But the strategy behind it&#8202;&#8212;&#8202;which conversations to join, what tone to strike, when to mention my product and when to just help someone&#8202;&#8212;&#8202;that requires judgment AI doesn&#8217;t have.</p><p>AI doesn&#8217;t understand context the way a human does. It doesn&#8217;t know that this particular Reddit thread is the wrong place to self-promote, or that this tweet needs to be vulnerable, not polished. Social intelligence is still a human skill.</p><p><strong>The honest limitations.</strong></p><p>AI hallucinates. It confidently tells you things that aren&#8217;t true. I&#8217;ve caught Claude inventing features that don&#8217;t exist in competitors&#8217; products. I&#8217;ve caught Codex suggesting code patterns that would break other parts of the system.</p><p>And context degrades. In long sessions&#8202;&#8212;&#8202;50+ messages&#8202;&#8212;&#8202;AI starts losing the thread. It forgets constraints you mentioned earlier. It contradicts its own recommendations. You have to manage this actively: break complex work into focused sessions, summarize the state regularly, and never blindly trust a response just because it sounds confident.</p><p><strong>The bottom line: AI is a multiplier, not a replacement.</strong></p><p>Here&#8217;s how I think about it. AI multiplies whatever you bring to the table.</p><p>If you have strong product vision, AI multiplies it with speed and execution power. You get a product shipped in 2 months instead of 8.</p><p>But if your vision is zero? Zero multiplied by anything is still zero. You&#8217;ll just get generic output faster.</p><p>The skill isn&#8217;t using AI. The skill is knowing what to ask, what to keep for yourself, and when to override the machine.</p><div><hr></div><h3>The Math That Changed My Mind</h3><p>Let me put this in perspective.</p><p>Before AI, my options for building Temporal were: find a technical co-founder (months of searching, equity dilution), hire a freelance developer ($5K+/month, slower iteration, communication overhead), or learn to code myself (6&#8211;12 months before I could build anything real).</p><p>With AI, the math looks like this:</p><ul><li><p><strong>$150/month</strong> in AI tools</p></li><li><p><strong>2 months</strong> from idea to working product</p></li><li><p><strong>0 team members</strong> to manage</p></li><li><p><strong>5 AM to 10 AM</strong> daily&#8202;&#8212;&#8202;my main job stays untouched</p></li></ul><p>This isn&#8217;t theoretical. Temporal.day is live. People use it. It has AI auto-scheduling, natural language task input, Google Calendar sync, and a payment system.</p><p>Am I saying the code is as clean as what a senior engineer would write? No. Am I saying the product is perfect? Absolutely not&#8202;&#8212;&#8202;there&#8217;s plenty to improve.</p><p>But it exists. It works. Users interact with it daily. And it shipped at a fraction of the cost and time that any traditional approach would require.</p><p>That&#8217;s the real insight: AI didn&#8217;t make me a developer. It made development accessible to someone with strong product instincts and no engineering skills. The barrier to building products didn&#8217;t disappear&#8202;&#8212;&#8202;it shifted. It used to be &#8220;can you code?&#8221; Now it&#8217;s &#8220;do you know what to build and why?&#8221;</p><p>That second question? That&#8217;s where 5 years of PM experience actually matters.</p><div><hr></div><h3>Start Here</h3><p>If this resonated and you want to try building your own AI-first workflow, here&#8217;s what I&#8217;d suggest:</p><p>Pick one tool and go deep. Don&#8217;t sign up for 10 things. Start with Claude or ChatGPT and use it for everything for two weeks. Research, writing, planning, analysis. Get a feel for what it&#8217;s good at and where it breaks down.</p><p>Build a real workflow, not a toy demo. Don&#8217;t just &#8220;try AI.&#8221; Apply it to an actual problem you&#8217;re solving at work. A competitive analysis. A project plan. A first draft of something real. The value clicks when the stakes are real.</p><p>Keep a &#8220;human only&#8221; list. Decide upfront which decisions stay with you. For me, that&#8217;s product vision, final testing, and distribution strategy. Your list will be different. But have one. Otherwise AI will slowly take over the thinking you should be doing yourself.</p><p>Start before you&#8217;re ready. Two months ago, I had an idea and zero technical ability. If I&#8217;d waited until I &#8220;knew enough&#8221; to start, I&#8217;d still be waiting. The tools are here. The gap between &#8220;I have an idea&#8221; and &#8220;I have a product&#8221; has never been smaller.</p><p>I&#8217;m building <a href="https://temporal.day/">Temporal.day</a> in public&#8202;&#8212;&#8202;sharing every decision, metric, and mistake along the way. If you&#8217;re on this path too, come say hi <a href="https://twitter.com/mktpavlenko">@mktpavlenko</a>.</p><p>The best time to start building was yesterday. The second best time is this morning at 5 AM with a cup of coffee and Claude open on your screen.</p>]]></content:encoded></item></channel></rss>