Curtis FosterCurtis Foster
All posts

What a solo founder learned shipping AI from 0 to 1

Building Ziggyloo and Zentoko alone changed how I think about scope, reliability, cost, and the work that turns an AI demo into a product.

October 6, 2026· 13 min read· Curtis Foster Team
Hero image for blog post: What a solo founder learned shipping AI from 0 to 1

At 11:47 p.m., my laptop was open beside a cold mug of coffee, and an AI request had failed for the third time that night. A solo founder shipping AI from 0 to 1 learns quickly that speed does not come from skipping the hard parts. It comes from choosing which hard parts deserve attention right now.

Building Ziggyloo, a children's AI tutor, and Zentoko, a multi-brand AI marketing platform, taught me that shipping is less about producing more code and more about controlling the number of decisions the product makes under pressure. The model is only one component. The product is the path around it.

That sounds obvious until a real user asks a question your demo never saw, a provider times out, or a retry quietly doubles your bill. I have spent more than 20 years shipping technical programs at Verizon, HP, and InterContinental Hotels, and the solo-builder version of that work has one sharp advantage: there is nowhere to hide from the consequences.

A production system is a chain of decisions; one visible failure tells you where to inspect next.
A production system is a chain of decisions; one visible failure tells you where to inspect next.

0 to 1 starts with a narrow promise

The usual startup advice is to move fast and build an MVP. For AI products, that advice is incomplete. A thin product built on ordinary software fails in predictable ways. An AI product can produce a different answer every time, invent a fact, burn through tokens, or fall apart only when the user asks the fourth question.

So the first shipping decision is not which model to call. It is which promise you are willing to defend.

For Ziggyloo, the useful promise was not that an AI tutor could teach every subject to every child. That would have created a product with no practical boundary. The useful promise was narrower: give a child a patient conversation partner for guided learning, while giving the parent enough visibility to understand what is happening.

That boundary shaped the build. It affected the system prompt, the memory rules, the review flow, and the places where the product had to stop and ask for help. Narrow scope was not a limitation I planned to remove later. It was the frame that made shipping possible.

When I built Zentoko, the promise changed. The platform had to help brands create and review marketing material across several AI models. That meant repeatable inputs, visible outputs, and a way to compare results. The work was not simply generating copy. It was making model differences useful instead of confusing.

A narrow 0 to 1 promise usually has four parts:

  • A named user with a real situation, such as a parent helping with homework at 8 p.m.
  • A single painful job, such as producing a draft campaign brief without starting from a blank page.
  • A visible result the user can judge without trusting the model blindly.
  • A clear failure boundary that tells the product when to stop.

What I'm telling you is simple: write the promise before you choose the architecture. If the promise cannot fit in one sentence, the product is probably carrying too much weight for its first release.

Shipping AI means building a control surface

Every production AI product needs a Control Surface. I use that term for the places where I can inspect, constrain, retry, replace, or stop model behavior.

A prompt is not a control surface by itself. It is one input. The actual surface includes the model adapter, request timeout, token limit, retrieval settings, output schema, moderation checks, logging, cost tracking, and the fallback behavior when something breaks.

During an early build, it is tempting to send a request straight from the user interface to one model provider. That path feels clean, but it is also a trap. The moment you need to switch from Claude to GPT-4o, add a timeout, record latency, or test a cheaper model, the direct call becomes a wall around the product.

I learned to put a small service between the interface and the provider. That service did not need to be a grand platform. A typed request, a provider adapter, structured logs, and a consistent response shape were enough to create room for change.

A practical control surface answers these questions:

  • Which model received the request?
  • What instructions and retrieved content did it receive?
  • How long did the request take?
  • How many input and output tokens did it use?
  • What happened after a timeout or malformed response?
  • Can a human inspect the result without reproducing the entire session?

Postgres with pgvector can support retrieval for an early product. OpenAI Whisper can handle speech transcription. Stripe can manage billing. Vercel can simplify deployment. None of these tools removes the need for decisions around failure, cost, or inspection.

Here's the part most people miss: teams treat vendor choice as architecture. Vendor choice matters, but the surrounding control surface matters more, because providers change prices, models, context limits, and behavior without warning. If your product cannot survive a provider change, you did not ship a product. You shipped a dependency with a landing page.

Solo founder speed comes from reducing decisions

A solo founder has one resource that a large team often wastes: direct attention. But that attention disappears when every small choice becomes a fresh debate with yourself.

I needed defaults. Without them, each feature pulled me into another round of decisions about frameworks, providers, storage, deployment, and interface behavior. That creates what I call decision drag. The work looks busy, but the product does not get closer to a reliable user outcome.

For my platforms, I settled on a small set of standard choices: familiar web tooling, a relational database where structured data mattered, API boundaries around model calls, and simple background jobs before reaching for elaborate orchestration. The point was not that these tools were perfect. The point was that they were already understood.

This is where previous program work helped. At Verizon and HP, a delivery plan had to make ownership and handoffs visible. Solo building removes the handoff, but it does not remove the need for an explicit operating plan. I still needed to know what was blocked, what was risky, and what could wait.

My weekly shipping list became more useful when every item fit one of these categories:

  • A user-visible improvement.
  • A reliability or security repair.
  • An observation tool that would reduce uncertainty.
  • A deployment or maintenance task.
  • An experiment with a defined decision afterward.

That list prevented a common failure mode: polishing a screen while an unmeasured model call sat underneath it.

I also learned to cap work in progress. If a feature was not deployed, tested with real inputs, or rejected, it did not count as finished. GitHub Actions handled repeatable checks. A small set of saved prompts gave me fast regression tests. The setup was not glamorous. It kept half-built ideas from occupying my head for weeks.

Speed is not a personality trait. It is the result of fewer active decisions and shorter feedback loops, and that is good news for any solo founder because neither requires a larger team.

Production teaches you where the product really is

The first live users of Ziggyloo did not care how elegant the model routing was. They cared whether the conversation stayed useful when a child changed subjects, gave a vague answer, or asked for help in a way the test script never predicted.

That is the difference between a demo and a product. A demo proves that one path works. Production reveals which paths people actually take.

A parent might open the tutor from a phone while standing in a kitchen in Phoenix. The child types one word, disappears for ten minutes, and comes back with a completely different question. The system has to handle a broken session, stale context, and uncertain intent without turning the experience into a support ticket.

Zentoko exposed a different version of the same problem. Marketing requests often arrive as fragments: a product name, a rough audience, a deadline, and a request for five variations. The platform had to decide what to ask, what to infer, and what to leave visible for review. A polished generation step could not compensate for poor input structure.

Production changes the order of priorities. These usually move upward:

  • Clear error messages that tell the user what to do next.
  • Safe handling for empty, oversized, or malformed inputs.
  • Logs that connect a user action to a model request.
  • A way to revise or regenerate without losing useful work.
  • A human review point for high-impact outputs.

NIST published the AI Risk Management Framework in 2023. Its language around measuring, managing, and governing AI risk maps directly to a practical product habit: do not wait for a failure to decide who should see it, who should fix it, and how you will know the repair worked.

I also stopped trusting anecdotal success. One impressive conversation proves very little. A saved evaluation set with 50 or 100 representative prompts is more useful, because it lets me compare a prompt change, a model change, or a retrieval change against the same cases. If you've ever watched a demo fall apart on the third question, you already know this.

Once you frame it this way, production is not the final stage of shipping. It is the environment that tells you what you should have built next.

Build the smallest team around the bottleneck

Solo does not mean doing every task forever. It means keeping the product decisions close while you decide which work should leave your hands.

The first work to hand off is usually not product strategy. It is repeatable work that consumes attention without improving judgment. Design cleanup, test case entry, documentation formatting, and routine infrastructure maintenance can all become distractions when the founder is also debugging model output at midnight.

But hiring too early creates a different problem. A new engineer cannot remove ambiguity that the founder has not resolved. If the request is "build an AI assistant," the engineer inherits a fog of choices about users, boundaries, data, evaluation, and failure behavior.

I would rather hand someone a small, testable problem:

  • Add request tracing from the browser action through the model adapter.
  • Build a review screen for low-confidence answers.
  • Create a regression set for 75 saved conversations.
  • Reduce duplicate retries in the background worker.
  • Make the provider response conform to one typed schema.

Those tasks have an observable outcome. They also teach the contributor how the product works.

This is where my patent work has shaped how I build. Invention is not just a flash of an idea, it requires stating a mechanism clearly enough that another person can inspect it. Production software has the same demand. If a behavior cannot be explained, tested, or monitored, it is not ready to carry a user outcome.

A small team should gather around the bottleneck, not around a fantasy org chart. If model failures are the bottleneck, bring in evaluation help. If the interface prevents adoption, bring in product design. If deployments are unsafe, fix release operations before adding another generation feature.

And let people challenge the plan. Solo work can make your assumptions feel like facts because nobody interrupts the narrative in your head (I have done this more than once, usually after convincing myself that a clever abstraction would save time).

Turn shipping into a repeatable operating system

The best result of building two platforms was not a particular prompt or model choice. It was a repeatable shipping rhythm.

I now think in terms of a Shipping Loop: define a narrow user outcome, build the smallest path, observe real behavior, evaluate representative cases, repair the largest failure, and release again. The loop is intentionally plain. Plain systems are easier to run when the builder is tired.

The loop needs evidence at each stage. Before implementation, I write down what success looks like. During development, I use fixtures and saved requests. After release, I watch latency, error rate, retry count, model cost, and user completion. The dashboard can be small. It just needs to answer whether the last change helped.

For a new AI feature, I would now take these steps:

  • Write one user promise and one failure boundary.
  • Select one model path and one fallback behavior.
  • Create a small evaluation set before changing the prompt.
  • Log model, latency, tokens, status, and retry data.
  • Release to a narrow group with a visible feedback path.
  • Review failures on a fixed schedule, not only when something feels wrong.

This process also protects the 0 to 1 builder from endless expansion. A product can always support another file type, another model, another channel, or another user segment. The loop forces a question: which change will improve the current outcome enough to justify its new failure modes?

The teams I have worked with often want a roadmap that makes the future feel certain. AI products do not offer that comfort. The best you can do is create a system that turns uncertainty into the next useful decision.

So the practical next step is small. Pick the live AI feature that matters most, save 25 real inputs, and run them through the current version today. Record what failed, what cost more than expected, and what a user would misunderstand. Then ship one repair before you add another feature.

That is what building two production AI platforms solo taught me: shipping is not the act of putting software online. It is the discipline of making the next release more knowable than the last. The model is part of the product. The shipping loop is what makes the product trustworthy.

FAQ

What does a solo founder need to ship an AI product from 0 to 1?

A solo founder needs a narrow user promise, a defined failure boundary, a model adapter, basic logging, and a small evaluation set. You do not need a large platform before you have evidence that users want the outcome.

How is shipping AI different from shipping ordinary software?

AI output can vary even when the input appears similar. You need to monitor output quality, model cost, latency, retries, and unsafe or malformed responses along with normal software errors.

How many evaluation examples should an early AI product have?

Start with 25 to 100 representative inputs, including normal requests and known failure cases. The exact count matters less than using the same set to compare changes over time.

Should a solo founder use multiple AI models?

Use multiple models when they solve a real product or reliability problem, such as latency, cost, or a different modality. Add a provider adapter and consistent response format before expanding the model set.

What should a solo founder ship next after the first AI release?

Review real user sessions and repair the largest repeated failure before adding breadth. Instrumentation, clearer recovery paths, and better evaluation often create more value than another visible feature.

0 comments

Join the conversation

Subscribe to comment

Join Curtis Foster's newsletter to leave a comment and get new posts in your inbox.

Read next

Hero image for blog post: Multi-agent systems: when they help, and when one good agent wins

Multi-agent systems: when they help, and when one good agent wins

Oct 13, 2026
Hero image for blog post: AI memory architecture: the five layers behind reliable LLM products

AI memory architecture: the five layers behind reliable LLM products

Sep 29, 2026
Hero image for blog post: The eval loop is the product: measuring whether your AI is actually right

The eval loop is the product: measuring whether your AI is actually right

Sep 22, 2026
Solo founder lessons from shipping AI from 0 to 1