[KongchangAI]
· 4 min read· 2,035 words

Lessons from Shipping 3 AI Side-Project MVPs: How to Actually Deliver a Product

Lessons from Shipping 3 AI Side-Project MVPs: How to Actually Deliver a Product

AI side projects die from over-planning, not bad ideas — small scope, fast shipping, and lightweight models are the way to survive.

A developer shipped three MVPs in two months, after twelve prior projects that never even produced a screenshot. The core lessons: scope it small enough to finish in a weekend, model choice matters far less than you think, and the real hard part was never the technology. The article compares three projects — the over-engineered version took 40 hours with 0 users; the Slack decision-extraction version took 6 hours with $4.20 in API costs and 16 users; the audio-summary version took 14 hours with $12.80 in costs and 31 users. From this, the author distills three lessons: compress the scope to the "minimum pain path," don't agonize over model choice, and instrument it even if it's rough. He ultimately recommends a pay-as-you-go API gateway over self-hosting, and offers a repeatable seven-day delivery workflow.

Building an AI Side Project That Actually Ships — Lessons from Shipping 3 MVPs

Most AI side projects die from over-planning, not from bad ideas. One developer shipped three MVPs with real users in two months, after twelve prior projects that never even produced a screenshot. The core lessons he distilled are worth reading for anyone building an AI product: scope it small enough to finish in a weekend, model choice matters far less than you think, and the real hard part was never the technology.

How Over-Engineering Kills a First Version

The first project was a tool that summarizes meetings and auto-generates action items. Sounds useful — but the author spent three weeks building a custom fine-tuning pipeline, configuring a vector database, and developing a React frontend with drag-and-drop. Six weeks later, the user count was zero, and he didn't even want to open the GitHub repo himself.

The problem wasn't the concept. It was that he was solving an infrastructure problem, not a user problem. He was too fixated on building the "correct" AI system and forgot the actual deliverable: a simple way for people to get meeting summaries. This is a classic trap — many developers fall into the same pattern on their first project, equating technical complexity with product value.

The Power of Shipping Minimal

The second project was the exact opposite: extracting key decisions from messy Slack conversations. The author set a hard deadline for himself — 48 hours. No vector database, no fine-tuning, just an API call wrapped in a command-line tool.

The core code was only thirty lines of Python, using the gpt-4o-mini model with temperature set to 0.2, truncating input to control token limits. He wrapped it in a simple FastAPI endpoint, threw together a barely passable HTML page, and posted it to a small Slack community. Sixteen people used it in the first week, and one of them even asked if they could pay for it.

The key insight here: nobody cares how complex your infrastructure is. They only care whether it works and whether it solves an annoying problem.

About gpt-4o-mini and the temperature parameter

gpt-4o-mini is a lightweight multimodal model from OpenAI, positioned as "cheap, fast, good enough" — its input and output costs are far lower than flagship models (roughly a few percent of them), yet it retains solid instruction-following and structured-output capabilities. For tasks like summarization, classification, and information extraction, its output quality often differs very little from flagship models, making it the go-to choice for side projects. temperature is the parameter controlling generation randomness, typically ranging from 0 to 2: lower values make output more deterministic and biased toward the highest-probability next token; higher values make it more divergent and creative. For meeting notes, decision extraction, and summaries — tasks that need stability and fidelity to the source — temperature is usually set between 0 and 0.3 to prevent the model from "freelancing" and fabricating content. Truncating input is necessary because models have a token limit on their context window, and anything beyond it gets rejected or billed extra, so engineering practice commonly uses splitting, truncation, or summary compression to control length — which is also why "making the problem smaller" tends to reduce both cost and complexity.

Three Lessons That Actually Worked

1. Shrink the Scope to the "Minimum Pain Path"

The third project turned technical blog posts into audio summaries. During planning, he again wanted to add multilingual support, podcast-grade voice, and a mobile app. He eventually forced himself to write down the "minimum pain path" version: paste a URL, get a 3-minute audio file. No accounts, no history, no download feature.

It shipped in a single weekend. Text extraction used readability-lxml, and the audio was just a TTS API call. The result was rough — the TTS voice sounded a bit robotic, and the summary occasionally mispronounced technical terms — but users kept using it because it solved a real friction point. The minimum pain path isn't a compromise; it is the product.

2. Model Choice Matters Less Than You Think

The cost comparison across the three projects is telling:

  • Project one (over-engineered version): API cost $0, ~40 hours invested, 0 users
  • Project two (Slack decision extraction): API cost $4.20, 6 hours invested, 16 users
  • Project three (audio summaries): API cost $12.80, 14 hours invested, 31 users

The projects that delivered value had almost negligible API costs. The author used the cheapest available models (gpt-4o-mini for text, basic-tier TTS for audio), and it was enough. For 90% of AI side projects, the difference between a decent model and a frontier model is imperceptible to users. Users don't A/B test your prompts — they just want to get the task done.

3. Instrument It, Even If It's Rough

The third project added a simple analytics event: send a JSON to a free endpoint on every request. The questions he tracked: how many people who pasted a URL completed processing? How many listened to the full audio? Where did they drop off?

The findings: 40% of people abandoned the "processing" page because the wait was too long. After switching to a faster and cheaper TTS model, completion rate jumped from 60% to 82%. That kind of insight only comes from shipping and observing — you won't find it in a design doc.

One Architecture Decision That Saved a Ton of Time

The author spent an entire weekend trying to self-host a smaller open-source model, reasoning that it would be "cheaper and cooler." The result: 16 hours wasted on CUDA versions, Docker container memory limits, and GPU thermal throttling. On top of that, the self-hosted model was noticeably worse at extracting decisions from informal Slack language.

Switching back to an API took one hour. Each request cost less than a cent, quality was better, and the time saved went into talking to users.

The practical middle ground he eventually landed on: use a pay-as-you-go API gateway rather than locking into a single provider or self-hosting. That way you can switch models at any time without rewriting your integration code. The platform he used is essentially a unified API layer that calls different models through a single endpoint, billed by usage, with no monthly commitment — change one string and you can A/B test different models.

That flexibility matters when you're shipping fast — you don't have to rearchitect because a vendor changed pricing or deprecated a model.

Why self-hosting open-source models is often a trap for side projects

Self-hosting means downloading model weights to run on your own machine or cloud GPU instead of calling someone else's API. Its appeal is theoretically lower unit cost, data staying on your machine, and freedom to fine-tune. But the reality is:

  • High environment cost: CUDA, drivers, and PyTorch versions are tightly coupled, and configuring Docker with GPU passthrough is error-prone;
  • Hardware barrier: open-source models that can actually run usually need VRAM, and renting cloud GPUs isn't necessarily cheaper than an API, especially at low concurrency;
  • Quality gap: small models tend to be noticeably weaker than same-priced APIs at understanding colloquial, informal text (like Slack conversations);
  • Operational burden: model versions, concurrency, timeouts, and thermal throttling are all on you.

For a side project, time is the most expensive resource — spending money on a pay-as-you-go API and putting the saved time into talking with users is the more rational trade-off. Self-hosting only pencils out when call volume is enormous or data compliance forbids sending data off-premises.

A Repeatable Delivery Workflow

The author compressed two months of experience into a repeatable process:

  • Day 1: Write the minimum pain path in one sentence and stick it on a Post-it
  • Days 2-3: Build with the simplest stack — Python or Node, one API, a minimal frontend
  • Day 4: Have 5 people with a real pain point use it in person, and observe quietly
  • Days 5-7: Fix only the three obstacles they actually hit, ignore everything else
  • Week 2: Add one feature they explicitly asked for, then stop

That last bit — "then stop" — cannot be emphasized enough. Feature creep is a slow death; it feels productive but is really just procrastination in another form.

Why "Day 4 in-person observation" is so critical

Having users use your product in front of you (commonly called usability testing or user observation) is valuable because it exposes friction points you can't see yourself. Users won't follow the path you envisioned — they'll hesitate in front of a button, misread copy, and abandon midway, and in backend logs these behaviors often show up only as "churn." When observing in person, you can note what they said, where they clicked, and the exact moment they got stuck, rather than reverse-engineering it from analytics afterward. The design of "having 5 people with a real pain point use it" is also deliberate: a group of 5 is enough to surface most common problems early, without waiting until you have dozens of users. Combined with the delivery cadence, this forms a tight "small steps, fast correction" loop — ship it first, then let real feedback decide what to do next, instead of guessing in a meeting room what users want.

The Tech Is the Easy Part

If he could go back to the start of the experiment, the author would tell himself: the first project doesn't need to be impressive — it needs to get finished. The confidence that comes from watching a stranger use your tool is worth more than any architectural elegance.

Another counterintuitive realization: the tech is the easiest part. The API handles the heavy lifting, and models are absurdly capable. The hard part is choosing a problem small enough that a weekend's work can make a difference.

The process is simple: pick a small annoyance, hook up an API, put it in front of people, and let feedback decide the next step. If you're stuck on infrastructure choices, stop being stuck — find a pay-as-you-go gateway, call a model, and ship the ugly first version. Nobody will applaud your microservices architecture; they'll applaud when the problem goes away.

Background Notes

readability-lxml and TTS

readability-lxml is a Python library ported from Firefox's Reader Mode algorithm. Its job is to automatically extract the "main content" from a full webpage's HTML, stripping out navigation bars, ads, comments, sidebars, and other noise. When building tools like "convert an article to audio," it's almost unavoidable, because raw webpage HTML is often messy and inconsistently structured. TTS stands for Text-to-Speech — the usual approach is to send your extracted plain text to a vendor's endpoint and get back an audio file (mp3 or wav). TTS models are typically billed by character count or audio duration, and different tiers differ noticeably in audio quality, tone naturalness, and latency — which is exactly why the article later mentions "switching to a faster and cheaper TTS model": higher-tier voices sound more natural but take longer to synthesize, causing users to drop off on the "processing" page. Understanding these two layers (extraction + synthesis) is key to understanding why this project could be finished in a weekend.

One-line Summary

AI side projects die from over-planning, not bad ideas — small scope, fast shipping, and lightweight models are the way to survive.

Paragraph Summary

A developer shipped three MVPs in two months, after twelve prior projects that never even produced a screenshot. The core lessons he distilled: scope it small enough to finish in a weekend, model choice matters far less than you think, and the real hard part was never the technology. The article compares three projects — the over-engineered version took 40 hours with 0 users; the Slack decision-extraction version took 6 hours with $4.20 in API costs and 16 users; the audio-summary version took 14 hours with $12.80 in costs and 31 users. From this, the author distills three lessons: compress the scope to the "minimum pain path," don't agonize over model choice, and instrument it even if it's rough. He ultimately recommends a pay-as-you-go API gateway over self-hosting, and offers a repeatable seven-day delivery workflow.

#AI side project#MVP shipping#over-engineering#gpt-4o-mini#model selection#TTS#self-hosting#API gateway#delivery workflow
Share:

Related articles