praveen
Solo Developer Project Workflow

From Requirements to Production: How I Ship as a Solo Developer

A detailed solo and freelance delivery playbook: discovery, stack choices, build phases, billing pitfalls, deploy rituals, and maintenance that keeps trust intact.

July 18, 202612 min read

Shipping alone is not heroic. It is a sequence of boring decisions made early enough that Friday night does not become incident theater.

I build client systems and in-house products with a small team at CSSolutions, and plenty of stretches where I am the person who gathered requirements, picked the stack, shipped the release, and answered the "payments look wrong" message. This is the Solo developer project workflow I actually use, from intake to maintenance, shaped by work like Trax, DealGPT, Zesty, Soma, and Mojo-360.

It is not the same as scoping an MVP thesis or using AI as a drafting partner. Those matter. This is the end-to-end delivery path: what to lock, what to build with, how to deploy, and what to stay paranoid about when money or inventory is involved.

Start with the job, not the feature board

Every project begins with the same intake questions, whether the client is a retailer or I am greenlighting an in-house product.

  1. Who pays, and who uses it daily?
  2. What painful job must work every week?
  3. What systems already own truth (ERP, WhatsApp, spreadsheets, a legacy site)?
  4. What is out of scope for v1 even if someone asked for it twice?
  5. What failure would damage trust on day one?

On Trax, the trust failure was a gate pass that lied. On Zesty, it was a kitchen ticket that never arrived during dinner. On Mojo-360, it was a subscription that charged without unlocking content. Name that failure early. It becomes your quality bar.

What I capture in writing

I leave the first discovery call with a short note the client can correct. If they cannot edit it, they never agreed to it.

Discovery outputs I refuse to skip

Product truth

  • One-page problem and buyer note
  • Happy-path workflow in five to eight steps
  • Roles and permission sketch
  • Integrations list with owners and failure modes
  • Definition of done for the first production release

Delivery truth

  • What is explicitly deferred to v1.1 or later
  • Who approves scope changes
  • Where staging will live and who can access it
  • How support will hear about bugs after launch

If those answers are fuzzy, I do not jump into design systems and screens and hope. I schedule another call. Ambiguity is cheaper before you invent tables.

Choose a stack you can operate alone

Portfolio variety is useful for clients. Night-time ops prefers boredom.

My go-to lanes:

LaneDefaultWhen I switch
Web product / adminNext.js or React + ViteExisting WordPress or Webflow brand site only
API / domain logicNode.js (Express, Next route handlers, or Hono)Heavy Python/ML edges, then keep the product API thin
MobileExpo / React Native, Flutter when the client already owns DartPure content apps that can stay responsive web
DataPostgres (often via Supabase or Convex)Redis for queues, cache, and presence
AuthProvider + your own role modelNever "admin boolean" as the whole security story
Files / mediaS3-compatible storage, BunnyStream when video is the productDo not reinvent upload pipelines
PaymentsRazorpay / Stripe with webhook-first designCash/UPI POS flows need explicit settlement states
DeployDocker or platform deploys (Vercel/Fly/AWS) with one stagingMultiple "special" environments that nobody updates

Stack philosophy

I standardize
  • One web framework family
  • Postgres as source of truth
  • Background jobs for anything slow or external
  • Typed contracts between web, API, and mobile
  • One deploy path you can repeat half-asleep
I treat as optional
  • Microservices on day one
  • Custom auth crypto
  • Homegrown video pipelines
  • Five dashboard chart libraries
  • Novel infrastructure for a six-week build

How those defaults show up in real work

  • Trax: Next.js admin, Node API, Expo mobile, Socket updates, role-specific dashboards. The stack was familiar. The hard part was shared language for transfers and gate passes.
  • DealGPT: React + Vite front end, Supabase, AWS pieces, containerized deploy. AI features sit on top of boring auth and tenancy, not the other way around.
  • Zesty / Soma: Multi-tenant SaaS habits, clear module boundaries, mobile access where the floor or field needs it.
  • Mojo-360: Video and subscriptions force resumable uploads, webhook-safe billing, and a mobile offline story you can explain.

Technology is leverage only after the workflow is clear.

Requirements become a build plan

I translate discovery into slices that can ship independently:

  1. Identity and tenants
  2. Core workflow
  3. Money or inventory side effects
  4. Notifications and audit
  5. Admin / support visibility
  6. Hardening and go-live

Delivery phases that survive contact with reality

1

Foundations

Auth, roles, environments, CI, error tracking, empty states that tell the truth.

2

Core loop

The weekly job only. No reports theater.

3

Side effects

Payments, stock moves, emails, webhooks, with retries and logs.

4

Ops skin

Admin tools, impersonation rules, support search.

5

Production bar

Backups, rate limits, staging parity, runbook for the top five failures.

Estimate in outcomes, not hours of "coding." "Store manager can create a transfer and security can clear a gate pass with limited connectivity" is a better ticket than "build inventory module."

A practical sequencing rule

I never start reporting dashboards before the mutation path works. I never start a second role's UI before the first role can finish the job. I never wire payments before the product state machine has names for trial, active, past due, and canceled.

If a stakeholder wants all four at once, I show the dependency order on one page. Most people accept it when they see what breaks otherwise.

Build with production habits from week one

Solo speed dies when staging and production behave like different products.

Non-negotiables early:

  • Environment variables documented in one place
  • Staging that uses the same auth and webhook patterns as production
  • Error tracking before the first external user
  • Migrations that can run forward without folklore
  • Feature flags or simple config for risky releases

I keep UI component-driven and API contracts boring. Mobile and web should not invent parallel domain names for the same thing. That sounds pedantic until you debug "transfer" vs "shipment" vs "gate pass" at 11pm.

What I test while building, not after

Habit checks during the build

Every feature PR

  • Happy path works on staging with a non-admin user
  • Permission denial is enforced on the API, not only hidden in the UI
  • Errors are logged with tenant and actor context
  • Empty and failure states have copy a human can act on

Every external integration

  • Timeout and retry behavior is explicit
  • Idempotency keys exist where providers can replay events
  • A failed call leaves the domain object in a known state
  • Support can see the last provider response without opening a shell

Finance, billing, and inventory: stay paranoid

Anything that moves money or stock needs a different quality bar. Checkout UI is the easy part.

Pitfalls that keep showing up

Webhook denial

Problem: Believing the success redirect more than the provider event.

Better move: Reconcile from webhooks with idempotency keys and visible failures.

Soft permissions

Problem: Hiding buttons instead of enforcing role checks on the API.

Better move: Server-side authorization on refunds, discounts, and stock adjustments.

Tax as an afterthought

Problem: GST and credit notes treated as PDF cosmetics.

Better move: Encode tax rules in the product before launch week.

Trial amnesia

Problem: Paid entitlements left on after trials because status lives in three places.

Better move: One source of truth for plan state, updated by webhooks.

Silent side effects

Problem: Payment captured but inventory not reserved, or invoices sent twice.

Better move: Jobs with retries, dead-letter visibility, and audit logs.

Shared god accounts

Problem: One staff login for everyone.

Better move: Named users and auditable actions on money and stock paths.

For restaurant and retail flows (Zesty, Trax), settlement and gate-pass accuracy beat fancy analytics. For subscription media (Mojo-360), trial, cancel, and resume paths need explicit tests. For deal and finance-adjacent tools (DealGPT, Soma), treat sensitive records like production money even when the invoice is "just software."

A money-path rehearsal I actually run

Before real users, I walk staging with a second brain (or a teammate) and try to break entitlement state:

  1. Start a trial, expire it, confirm access dies.
  2. Pay successfully, then replay the webhook.
  3. Fail a payment mid-flow and recover.
  4. Refund or void and confirm the product state matches finance reality.
  5. Attempt a privileged action as a lower role.

Money-path checklist before real users

  • Webhook handlers are idempotent and logged
  • Refund / void / credit paths are permissioned and audited
  • Invoice or receipt numbers cannot collide
  • Failed payment leaves the account in a known state
  • Support can answer "what happened to this charge?" without SQL spelunking

Deploy like you will be paged

My production path is intentionally dull:

  1. Main branch protected
  2. CI runs lint/tests on pull requests
  3. Staging deploy on merge or release candidate
  4. Smoke the core loop manually: login, main job, one payment or inventory action
  5. Production deploy with migrations first or in a controlled step
  6. Watch error spike and webhook health for an hour

Hosts change. The ritual does not. Docker images, platform builds, or static frontends in front of an API: pick one pipeline and write the rollback in plain language.

What I keep in the go-live kit

Runbook

Top failures and first responses

Auth down, webhook backlog, migrate fail

Backup proof

Restore tested once

Untested backups are fiction

Status channel

Where stakeholders hear truth

Not twelve WhatsApp groups

Support entry

How a human reports a bug

With tenant and timestamp

Rollback is a product feature

If you cannot say how you undo the release in two sentences, you do not have a release plan. For database migrations, that means expand/contract steps when needed. For feature risk, that means a flag. For content or config, that means a previous known-good artifact.

Maintenance is part of the product

Launch is the start of the cheaper, quieter work: keeping trust.

Weekly solo ops rhythm:

  • Scan error tracker and slow queries
  • Confirm backups and certificate expiry
  • Review failed jobs / webhooks
  • Patch dependencies on a cadence, not a panic
  • Touch one piece of tech debt that protects money, auth, or data integrity

Monthly, I also review:

  • Unused admin powers and stale invites
  • Storage growth and log retention
  • Provider dashboard anomalies (auth, payments, email)
  • The top five support themes, then decide if the product or the docs need to change

Clients and co-founders hear "maintenance" as optional. It is not. The alternative is rebuilding trust after a silent billing bug.

Client and stakeholder communication that saves weeks

Solo delivery fails socially more often than technically.

What works:

  • A shared definition of done for the milestone, not a vague "almost ready"
  • Staging demos with real roles, not only founder admin accounts
  • Change requests written as scope swaps, not free additions
  • A single channel for launch decisions

What burns calendar:

  • Redesigning the homepage while the core loop is unfinished
  • Parallel "quick" mobile apps before the API contract is stable
  • Launch dates announced before webhook and backup proof exist

What teams should stay mindful of

Whether you are solo or three people:

  • Do not start UI before the workflow sentence is boringly clear
  • Do not add a second mobile stack because someone saw a demo
  • Do not treat staging as optional if payments or inventory exist
  • Do not skip audit logs on money and stock mutations
  • Do not confuse shipping features with reducing operational risk
  • Do not let AI-generated scope override a buyer you have not interviewed

The goal is a product a stranger can use, you can explain, and you can keep alive without heroics.

A compact end-to-end map

From first call to steady state

1

Discover

Buyer, job, constraints, out-of-scope list.

2

Design the loop

Roles, entities, happy path, failure path.

3

Build foundations

Auth, data model, CI, environments, tracking.

4

Ship the core

One workflow end to end on staging.

5

Attach side effects

Billing, inventory, notifications, audits.

6

Harden and release

Smoke, rollback plan, monitoring, support path.

7

Maintain

Weekly ops, dependency hygiene, trust-first debt.

If you want the product-strategy companion to this delivery path, read SaaS app development from MVP to production. If AI is in your loop, keep the judgment rules from using AI without the generic output.

The stack will change. The sequence does not: clear job, boring foundations, paranoid money paths, deploy ritual, maintenance you actually do.

Frequently asked questions

Discovery and scope, architecture choices, build and review, staging, production deploy, monitoring, and a maintenance rhythm. You do not need a big team. You need a clear workflow and the discipline to cut scope before it cuts you.

Building a SaaS product?

Tell me what you're shipping. I'll help you scope an MVP that can grow into a real product.