Workshops ... Continuing development with an agent team

Continuing development with an agent team

We have a deployed app and a pipeline that ships changes. We drove it with one assistant, one prompt at a time. That's the right speed for going from nothing to a first version.

Once the codebase is real and growing, that loose style starts to drift. The assistant forgets earlier decisions, skips tests, and calls work done too early. Once the first version is live, I move to a different way of working.

Specification-driven development

The habit that scales is to write a change down before anyone builds it.

Each feature starts as a short specification with three parts:

  • a user story that says who wants the change and why
  • the acceptance criteria that decide when it's done
  • the test scenarios that prove it

We already have the raw material for this. The openapi.yaml from Part 3: OpenAPI spec from the frontend already specifies the API, and the test suites from Part 7: Real persistence with SQLite turn acceptance criteria into checks. A new feature extends the spec first, and the code follows.

A team of agents

One assistant that grooms, codes, tests, and approves in a single chat is where shortcuts creep in. The next step up gives each job to a separate agent with its own instructions and routes every task through a fixed process.

I run four roles:

  • a product manager that turns a request into the specification above, then checks the result against the user story
  • a software engineer that implements the code and writes the tests
  • a QA tester that runs the tests and verifies each acceptance criterion with evidence
  • an on-call engineer that watches the CI/CD pipeline after a push and fixes what breaks

An orchestrator session ties them together like a project manager and makes the commits.

Every task then moves through the same sequence, and no agent grades its own work:

  • grooming, where the product manager writes the spec
  • implementation, where the engineer builds it
  • verification, where QA checks it against the acceptance criteria
  • a rejection loop back to the engineer when a check fails
  • final acceptance by the product manager, then a commit by the orchestrator

Keeping the writer and the approver separate is what stops an agent from declaring half-finished work done.

Built on what we already have

This way of working reuses what we already built:

  • the product manager writes specifications against the same openapi.yaml
  • QA runs the existing pytest and vitest suites to check them
  • the on-call agent watches the GitHub Actions pipeline from Part 12: CI/CD with GitHub Actions

The deployment loop is already automated, so an approved change reaches the live site on its own.

You don't need the full setup to get the benefit. Even with one assistant, keep the discipline. Write the spec, implement it, verify it against the acceptance criteria, then commit. The AGENTS.md file from Part 4: FastAPI backend from the spec already holds the house rules, and a short PROCESS.md can hold the steps. I wrote up the full agent-team version, with the role files and the task flow, in I built an AI agent team for software.

Questions & Answers

Sign up to ask questions, track your progress, and get access to other workshops · Already have an account? Sign in