No specific human had shown pull toward StartInsight. The newsletter subscriber was anonymous. After eighty days live, zero people had been made hungry for the thing.
StartInsight
2026·01·24 2026·05·10
A capability in search of a customer. An honest record of how a working product can still be a failed company.
The Verdict
On the eighteenth of April, 2026 — six months into building, six weeks into “going live,” six days into a 90-day go-to-market sprint — the founder of StartInsight ran a forcing-question diagnostic on himself, and answered every question with the hardest‑true option available.
The diagnostic produced a single line. It was correct on the day it was written, and it remains correct now. It is the entire post-mortem in twenty‑one words.
Solution in search of a problem. Technical demo dressed as a product. Engineering six months ahead of user discovery.
What follows is not the story of how StartInsight was built. The build was good: 398 tests, 47% coverage, clean Sentry, sub‑100ms APAC latency, three commit‑hours of automated GTM scaffolding. The architecture would survive a code review at any company in any quarter.
This is the story of why none of that mattered, and the three lessons that the next project must begin with — before any code is written.
Four Questions, Four Hardest-True Answers
Most founders, asked to honestly diagnose their own startup, will pick the soft answer on at least one of the four forcing questions. Picking the hardest-true option four times in a row is unusual self-honesty. It is also the single most useful thing the founder did in the entire eighty days.
Founders looking for startup ideas in 2026 use Twitter scrolling, Product Hunt browsing, ChatGPT, friends. None of those workflows are painful enough that switching to a new tool is net‑positive. StartInsight needed to create a research-first idea-discovery behavior. New behavior is the hardest type of GTM there is.
The platform came first; the user, second. Every architectural decision after that — eight scoring dimensions, six ingestion sources, two‑hundred‑and‑thirty‑five endpoints — added capability without adding conviction.
When the founder could not conceive of the product without its automation, the founder was not selling a product. The founder was selling the existence of the platform itself. That is not a market.
Five Root Causes
The four answers above point at one disease in five forms. The disease was not laziness, taste, or technical inadequacy. It was a problem of sequence — the order in which decisions were made.
Capability-first origin
StartInsight began with the question “what can I build with PydanticAI, Gemini, and Firecrawl?” and worked outward toward “who would want this?”. The user remained a category, never a person. The build accumulated capability in the absence of conviction.
No status quo to replace
Most founders do not actively research startup ideas. They stumble into them through job pain, domain exposure, or copying trends. There was no painful current workflow for StartInsight to displace, which meant success required creating a new behavior — without viral mechanics or a forcing function to power that creation.
Eighty percent automation, twenty percent manual — and the manual twenty never executed
In a single forty‑eight‑hour build sprint, fifty-four files and three‑thousand‑eight‑hundred lines of GTM automation shipped: a conviction funnel, a social posting agent, a four-stage email nurture, twelve programmatic SEO pages, an llms.txt, an RSS feed, and a GEO-optimized content prompt suite. By Day 13 of the operational sprint, zero community posts had been made by hand.
Engineering-avoidance-after-ship
The founder named the failure pattern in his own learnings.jsonl on the fourth of April: when sales gets uncomfortable, return to code. Two weeks later, the office-hours diagnostic identified the same pattern from the outside. The 60-day engineering freeze was an attempt to break the loop by removing the comfort.
The freeze did not hold
Within twenty-four hours of the freeze being declared, commits to main resumed: fourteen fix(sentry): commits before shutdown, each individually defensible, collectively a continuation of the pattern. The wedge test — twenty named founders, three RM49 memos, by Sunday — was never started. There is no Google Sheet. There is no DM screenshot in daily-operations.md. The hypothesis under test was never tested.
A Timeline of the Decline
Read this not as a chronicle, but as evidence. Each line on the right is a commit; each line on the left is what was supposed to be happening instead.
2026-04-04 learnings.jsonl << engineering-avoidance-after-ship (the founder writes his own warning, two weeks early) 2026-04-05 GTM SHIP-DAY +54 files / 3,818 lines / 4 commits (the marketing system built, before the marketing began) 2026-04-12 DAY 6 STATUS 1 newsletter sub · 0 traffic · 0 sales 2026-04-18 /office-hours verdict delivered — 60-day engineering freeze 6330756 docs(ops): /office-hours pivot — engineering freeze + wedge test ← freeze begins 2026-04-19 freeze violated << 14 hours after declaration 7b0e3e5 fix(sentry): replace datetime.utcnow() with datetime.now(UTC) ← #1 2a62730 fix(sentry): 4 bugs — null competitor_analysis crash ← #2 2b96277 fix(sentry): UTC-aware timestamps in realtime feed ← #3 042b3c5 fix(sentry): replace non-existent settings.secret_key ← #4 2b01ab7 fix(sentry): replace func.distinct() with distinct() ← #5 1be6aa5 fix(sentry): suppress 3 unused selectin loads ← #6 a164fd7 fix(sentry): suppress N+1 DB queries on admin endpoints ← #7 9a3bac7 fix(sentry): suppress redundant selectin queries on export ← #8 5b1bdde fix(sentry): guard naive ISO timestamps in trend retention ← #9 39db277 fix(sentry): safe JSONB int cast in agent cost queries ← #10 e87eb88 fix(sentry): literal routes shadowed by parameterized routes ← #11 888ef60 fix(sentry): replace non-existent category column ← #12 94cf694 fix(sentry): NaN crash in Trends int() casts ← #13 73f1b0c fix(sentry): skip nurture stage advancement on email error ← #14 (somewhere in here, the wedge test does not happen) no Google Sheet. no DMs. no inbound replies. no test. 2026-05-09 shutdown declared — 38 days before kill-criteria date 4f6c193 chore(ops): disable CI/CD + scheduled workflows for shutdown ← end 2026-05-10 Supabase project deleted. Railway cancelled. Domain expiring.
The 2026-06-17 kill-criteria check never happened, because the test it was meant to evaluate was never run. What sunset on May 9th was Approach C — “honest sunset” — three weeks late, but honest.
What It Cost — In Numbers
Until shutdown, the documented monthly burn was ~$30. The audit during deletion produced a different picture. The cost was small in absolute terms; the documentation was wrong by a factor of three on the controllable lines. Cost-tracking accuracy is a leading indicator of how recently the founder has talked to a paying user.
(documented as $0)
(free tier only)
Ledger
Worth recording, because the next project should reuse what worked and refuse what didn’t.
What Worked
- Glue-coding philosophy. Standard libraries. No custom-LLM-orchestration debt.
- Resilience patterns adapted from World Monitor — circuit breakers, stale-on-error caching, source health registry.
- Sentry-driven self-healing. Daily triage + auto-fix kept production clean with near-zero overhead.
- Office-hours discipline at the right moment. Forcing-question process beat sunk-cost intuition.
- Self-honesty under pressure. The hardest-true answer four times in a row.
What Did Not Work
- Building the marketing system before doing any marketing.
- Trusting automated distribution to surface manual demand.
- A 90-day plan with no Day 7 binary test.
- Treating a freeze as a calendar rule rather than a hard interlock — no git hook, no enforcement, only a sentence in a markdown file.
- Letting Sentry-bug urgency override the freeze. Each fix was a decision to not send a DM.
The Three Lessons
These are the only three lessons worth carrying. Everything else is a special case of these. Print them. Write them down somewhere visible. The next project earns its first commit only after all three are obeyed.
Begin with a person, not a capability.
Before any code: name the human. Name their current workflow. Name the precise moment of pain in that workflow. Name what they are willing to pay today to make that pain stop. If those four answers cannot be written down — in real names, with real numbers — the project is not ready to start. Capability without conviction is the same disease, every time.
The wedge test belongs on Day 1, not Day 90.
Sell the manual version of the product before automating it. RM49, hand-written, forty-eight-hour turnaround, three slots. If three humans cannot be persuaded to pay for the manual version in seven days, no amount of automation will sell the automated version later. This is a one-week test that prevents one-year sunk costs.
Make engineering freezes interlocked, not voluntary.
A pre-commit hook that blocks pushes to main is enforceable. A sentence in a markdown file is not. If a freeze is the right tool, install the lock at the same moment the freeze is declared. Otherwise the freeze is just a stronger feeling about not committing — and feelings lose to the comfort of typing git commit when sales gets hard.
The next project earns the right to be coded only after a specific human has paid cash for the manual version of what it does.
StartInsight · 2026·01·24 — 2026·05·10
Code archived. Project sunset. Founder-attention freed.
A memorial maintained at startinsight.co in lieu of the product that used to live here.