$ until good; do refine; done

I build whole products with a fleet of AI agents — and I'm the one who decides what's correct.

Kamil Obstawski, full-stack developer. Ten years in commercial work, client names stay behind the NDA. The workflow is on the blog, and one production case is written up in full.

The way software gets built has changed, and I changed with it. I run a fleet of AI agents in parallel: one explores the codebase, one writes, one reviews, and I put them in loops that critique and revise their own output until it actually holds up. How much of that is actually faster, and how much is merely different, I measure and write up on the blog, failures included.

The agents don't take the responsibility off me; they concentrate it. I set what 'correct' means: acceptance criteria, tests, review. Every version has to get past that before it reaches the client. What doesn't hold up doesn't ship. What ships, I answer for — not the model.

$ ls ./blog --latest
all posts →
$ ps aux | grep kamil

Six layers, one person accountable. No handoffs.

kamildatabase backend / API frontend infra / deploy design / UX agents / workflow
  • database Postgres, MySQL
  • backend / API Python, Django, FastAPI, WebSockets
  • frontend React, TypeScript
  • infra / deploy Docker, CI, Hetzner, Railway, DigitalOcean
  • design / UX CSS, Claude Design, Figma
  • agents / workflow Claude, Codex, Grok, review loops
$ brief | quote | build

Working together

How it goes

  1. You fill in a short form — what you need, when you need it, and a few sentences.

  2. I reply within one business day, by email, with questions tailored to your case — not a second form. We narrow it down asynchronously.

  3. On that basis you get a ballpark quote.

  4. If it fits, we move on to detailed planning — in writing or on a call, whichever you prefer.

  5. I start building.

$ echo "got a problem worth solving?"

Let's build something.

I reply within one business day, by email. What you need and when is enough to start.

↑