Governance Design
Agentic Development Workflow Guide
A step-by-step reference for running a project through three core phases: Planning, Development, and Delivery. Designed to define what agents own, where humans stay in the loop, and how quality is controlled across the full lifecycle.
Annotations in amber explain the design reasoning behind each decision: why this gate exists, why agents are excluded from this step, why the structure is what it is.
At a glance
- Requirements Gathering
- Design Discovery
- Initial Presentation
- Requirements Sign-off
- Step 1: Environment Setup
- Step 2: Architecture Guidelines & Base Code Generation
- Step 3: Test Suite Generation
- Step 4: First-Pass Review
- Step 5: Client Review and Iteration
- Step 6: Issue Resolution and Pull Requests
- Final QA and Client Sign-off
- Production Deployment
- Documentation Handoff
- Post-Launch Support
- Dependency and tool introduction
Project Planning
Requirements Gathering
Collect the initial list of features and requirements from the client.
Design Discovery
The core design work remains a manual process led by a designer rather than an agent. Design is not just determining the look and feel. It involves mapping complex workflows and defining user roles. These decisions inform the requirements.
Design stays human-led because it requires judgment about how work actually flows, something agents cannot derive from requirements alone. Agents may assist with minor tweaks later, but they never lead initial creation. The design system then becomes the boundary within which agents must operate.
Initial Presentation
Walk the client through the design to reach a shared understanding before moving into development.
Requirements Sign-off
Document the scope and obtain written client approval before development begins.
This gate exists to prevent agents from generating against an ambiguous or moving target. A signed scope is the agent's contract: it defines what good output looks like before a single line of code is written.
Development
Step 1: Environment Setup
Confirm every dependency needed to start the workflow is in place before writing code. Each team member has their stack set up, GitHub accounts are created, development and staging environments are configured, and test accounts exist for both environments.
Environment setup is a hard prerequisite gate: agents cannot begin generation until the environment is verified. An agent generating code for a misconfigured environment produces output that cannot be tested, reviewed, or trusted.
Step 2: Architecture Guidelines & Base Code Generation
Before generation begins, the agent receives explicit architecture guidelines covering the stack, folder structure, naming conventions, data model patterns, and key constraints. The agent then generates the initial codebase against the full requirements list.
Architecture guidelines are not optional context: they are the agent's decision framework. Without them, the agent fills gaps by inference, producing a codebase that appears functional in isolation but accumulates structural inconsistencies across files. Defining the architecture upfront is what makes generated code reviewable, maintainable, and extensible by a human team. The quality of the output is determined before the agent starts, not after.
Step 3: Test Suite Generation
Generate a test suite covering unit tests, regression tests, and end-to-end tests alongside the initial codebase.
Tests are generated in the same pass as the code, not after. This ensures coverage is tied to the requirements rather than reverse-engineered from the implementation. Generated tests are reviewed for meaningful behavior: passing tests are not sufficient evidence of quality.
Step 4: First-Pass Review
The development team reviews and tests the generated code locally. Bugs, missing features, and improvements are logged as issues in GitHub.
Human review happens before the client sees anything. This gate filters output quality and prevents scope creep: only issues that survive team review become client-facing.
Step 5: Client Review and Iteration
Review one screen or feature at a time with the client, either live in a meeting or via a test account on staging. New issues are logged in GitHub with a clear description, intended vs. actual result, screenshots, and location in the app. Development continues based on client feedback.
Reviewing one screen or feature at a time constrains the feedback surface. Showing everything at once produces unfocused feedback that is hard to convert into actionable issues. Structured issue logging, with intended vs. actual result and location, gives agents and developers enough context to act without back-and-forth.
Step 6: Issue Resolution and Pull Requests
Developers pick up issues from GitHub based on priority. Work follows the project specifications documented in the README/AGENTS file. Once a fix is complete, the developer opens a pull request. A second team member reviews the PR before merging. After approval, the change is merged to main and deployed to staging.
The README/AGENTS file serves double duty: it keeps human developers and agents aligned on the same architectural decisions throughout the project, not just during initial generation. Cross-review on PRs is a quality gate. No single agent or developer approves their own work.
Delivery
Final QA and Client Sign-off
Once all planned issues are resolved, run a final round of testing, including the full test suite from Step 3, and walk the client through the finished product on staging for sign-off.
Re-running the original test suite at delivery catches regressions introduced during iteration. Client sign-off on staging, not production, preserves a rollback point if anything unexpected surfaces.
Production Deployment
Deploy the approved build from staging to the production environment.
Documentation Handoff
Deliver project documentation to the client, including environment access details and any admin or user guides.
Post-Launch Support
Define the support and maintenance plan, including how bugs found after launch are reported, prioritized, and fixed.
Standing Constraints
The phases above describe gates: controls that fire once, at a defined point in the lifecycle. Some controls do not fit that shape. A standing constraint applies whenever its triggering condition occurs, regardless of which phase the project is in.
Dependency and tool introduction
Before any package, library, or tool proposed by an agent is installed, verify it independently. Confirm the exact name against the registry, since impostor packages rely on near-misses. Check for recent compromise reports covering both the package and the wider ecosystem it belongs to. Review maintenance signals: last publish date, adoption, whether the source repository resolves. Install the verified name only, never a close suggestion.
This constraint exists because of something an agent cannot know, rather than something it does badly. A model's training has a cutoff, and supply-chain compromises are by definition recent. When an agent recommends a package, it is not merely uncertain about that package's current safety, it has no access to the information at all. No amount of better prompting closes that gap. The general form of the rule: any agent action whose safety depends on facts newer than the model's training requires an external check. Dependency installation is the most common instance, not the only one. The check also has to be able to return no and stop the install, otherwise it is ritual rather than control.