One person, from Figma to production. Two concurrent projects max. This is the operating system that keeps solo work sustainable.
Most of my client work looks the same on paper — design, code, DevOps, security, launch, one person, one to six weeks. The question I get most is how do you keep quality up when you're solo?
Here's what actually works for me. Not a productivity system. Just habits.
This is the single biggest lever I have. Three projects means every one of them gets a fraction of the attention it deserves. The context-switching alone makes me a worse designer, worse developer, worse security thinker.
Two projects means I can hold each one fully in my head at once. When something breaks on client A, I don't need to page in an hour of context. When a design decision comes up for client B, I still remember why we made the trade-off two weeks ago.
Every project gets mocked in Figma before I write a line of code. Not just the hero — every page, every state. The client signs off, then I quote a fixed price. Then I build.
The two times I skipped this step, I regretted it. Designing in code as you go feels productive. It isn't. It just pushes the hard design decisions to a point where they cost 10x more to change.
I keep the stack small on purpose. Default for me is Supabase, Vercel, Resend. Three services, three dashboards, three billing lines. Everything else in the codebase is TypeScript.
I only deviate when I have to (a client already runs on AWS, a use case that Vercel functions can't cover). Every provider added is another dashboard the client eventually has to log into.
Counterintuitive. Most people say never ship Friday.
I ship on Fridays because weekend traffic is usually lower — a bug affects fewer users. I'm on-call anyway, so a Friday deploy gives me the weekend to catch and fix before Monday. And it forces me to have a rollback plan and monitoring in place BEFORE I hit deploy, since I can't just “check on it Monday morning.”
If a deploy is uncertain, it doesn't ship Friday. It ships Monday after a Friday internal preview. But when the deploy is disciplined, Friday is actually the safest day.
Every client gets a Loom video every Friday. What shipped, what's next, what I'm blocked on. Watchable at 2x, no meeting on the calendar.
Two things happen. Clients feel informed without needing a status call. And I catch my own drift — recording the video forces me to see my week from outside my head, and I catch unclear decisions before the client does.
Every site I ship gets a VAPT pass before launch. OWASP Top 10. Security headers. Rate limits. Honeypots on public forms. Auth cookies scoped correctly. Payment webhooks verified.
This isn't an upsell. It's the baseline. Skipping it is how clients end up with a live site that gets popped in month two.
Every project ships with preview deploys per PR, type check + lint on every commit, one-command DB migrations, and a one-page runbook (deploy, rollback, logs, who to call if something's on fire).
Not luxuries. These save me on hour 40 of a build week when something breaks and needs to ship now.
Not “here's what I did” updates. Real conversations. “I'm making this trade-off — does it match your priorities?”
Three times a week, minimum. This isn't relationship management. It's a design tool. The client's pushback catches assumptions I made that are wrong, before I've built too much on top of them.
I fail at this constantly. But the days I actually manage it are the days I ship the best work the next morning. The 9pm-to-midnight code I write is almost always code I rewrite the next day.
There's a real diminishing return past a certain point in the evening. The tenth hour of a coding day is worse than the second hour of the next one. I'm still working on trusting that.
None of this is clever. It's just habits I've built up over years of solo work. If you're also solo and building for clients, the goal isn't to work harder. It's to make each hour count more, and to protect the hours you're not working like they're the actual product.
Because they are.