For the team of one

The Solo Developer's
Engineering Manifesto

The best software engineering practice for a solo developer is the one that automates the roles you cannot hire for. You are the PM, the QA, the DevOps, and the support team. The methodology has to absorb that.

Direct answer. If you are a solo developer building production software, the practice that matters most is Shippable States Development (SSD): keep the main branch deployable at all times, ship something to production every working day, and put every new feature behind a flag. Everything else follows from that.

The premise: you are five people, not one

A solo developer is not a developer with a smaller team. A solo developer is the entire engineering organization compressed into one person: product manager, quality assurance, DevOps engineer, release manager, incident responder, and developer. Five roles. One brain. One day.

The way solo devs fail is not by writing bad code. They fail by drowning in the roles they didn't hire out — silently doing PM work in their head, deferring QA until the customer finds the bug, treating "deployment" as something they'll set up "soon." The compound interest on that deferred work is what kills the project at the 90% mark.

The discipline that survives this is one that automates each role you cannot hire for. CI handles QA. Feature flags handle release management. Observability handles incident response. The daily ship handles project management. SSD is the name for the integrated form of that discipline.

The Five Commitments

Commitment 01

I will deploy on day one

Before the first business logic exists, "Hello World" is in production. The deploy pipeline is solved before anything else. If I cannot deploy, I do not have a product — I have a research project.

Commitment 02

I will ship every working day

Every day I work on this project, something ships. A bug fix, a feature behind a flag, a performance improvement, a documentation update — but something ships. A day without a ship is a process failure.

Commitment 03

I will put CI in charge of quality

I cannot QA my own code in my own head. CI runs the tests, the linter, the type checker, and any production smoke checks. If CI is green and the feature flag is off, I sleep at night. If CI is red, the system is broken.

Commitment 04

I will hide unfinished work behind flags

No long-lived branches. Everything lands on main, behind a feature flag, off by default. The code lives in production from the moment it's written. The user sees it when I flip the switch — not before.

Commitment 05

I will end every day shippable

The Nightly Ritual: tests pass, code committed and pushed, CI green, flags set, tomorrow's first task identified. Future me should be able to pick up cold and produce value in fifteen minutes.

The Solo Stack

A concrete starting point. Not the only stack — just one that works on day one for a single person:

  • AI coding partner: Claude Code. Treat it as your junior engineer, your reviewer, and your rubber duck.
  • Source + CI/CD: GitHub + GitHub Actions. Free, ubiquitous, fast enough.
  • Hosting: Vercel, Fly.io, or Cloudflare for web; TestFlight for iOS; Play Internal Testing for Android.
  • Feature flags: A simple flag library (Unleash, GrowthBook, or even a config file in the repo). Do not build your own at first.
  • Observability: One error tracker (Sentry), one log aggregator (the platform's built-in), one uptime check.
  • Database: Postgres on a managed host. Migrations run from CI. No "I'll back it up later."

The four anti-patterns that kill solo developers

  1. "I'll set up deployment when there's something to deploy." No. There is always something to deploy. Deploy "Hello World" today. The pipeline is the foundation, not the finish line.
  2. "I'll write tests once the design stabilizes." The design stabilizes by being tested. Without tests, you cannot refactor. Without refactoring, the codebase ossifies. Without an evolving codebase, you cannot ship.
  3. "I'll merge the feature branch when it's ready." It is never ready. Land on main behind a flag. Iterate in public-but-invisible.
  4. "I'll fix this technical debt later." Later is a fiction. The debt compounds and the interest payment is your future velocity. Pay debt incrementally, today, in every commit. The Ratchet only moves forward.
Quotable. "Deployment fear is a process smell. The cure is to deploy more, not less." — Alex Horovitz, InsanelyGreat

Further reading

Stop drowning in roles

Automate what you cannot hire.

Read the full SSD methodology — designed for the team of one.

Read SSD