Direct Answer
A software factory is a repeatable path from a task to a reviewed change, with enough isolation and evidence that several coding agents can work without turning every result into a forensic exercise. In Greg Isenberg's course with Ras Mic, also known as Michael Shimeles, that path has four stages: isolate, build, prove, and ship.
The useful idea is not “run fifteen agents.” It is that every agent receives the same operating method. A new task gets its own branch and worktree. Architecture guidance shapes the implementation. Tests and before-and-after evidence show whether behavior changed. A pull request then enters an independent review loop before a person decides whether to merge it.
Watch the Full Software Factory Course
Credit and evidence note: the workflow and demonstrations come from Greg Isenberg's full course with Michael Shimeles, published on 14 September 2026. The current public skills, workflow wording, privacy cautions, and review requirements were checked against Michael's repository on 15 September 2026. Claims about running fifteen features and individual performance gains are creator-reported examples.
What a Software Factory Actually Is
Michael defines the factory as a workflow, a set of skills, and domain knowledge packaged in Markdown. That definition separates the operating system from the model and the coding interface. The same repository-level process can guide Claude Code, Cursor, Codex, or another agent capable of using Git, tests, a browser, and review tools.
The public repository currently contains an AGENTS.md template and focused skills for new features, code structure, evidence-driven testing, before-and-after capture, Greptile review loops, and copy cleanup. The file is short enough to inspect, version, and change with the codebase.
| Factory component | Question it answers | Durable artifact |
|---|---|---|
| Workflow | What happens next? | AGENTS.md |
| Skills | How is this stage performed? | Focused SKILL.md files |
| Domain rules | What must remain true here? | Repository-specific constraints |
| Evidence | How do we know it worked? | Tests, captures, metrics, and logs |
| Review | Who challenges the implementation? | Comments, scores, and resolutions |
| Handoff | What can a person safely decide? | Pull request and rollback path |
The Four-Stage Loop
| Stage | Factory action | Exit condition | Human concern |
|---|---|---|---|
| Isolate | Create a task branch and worktree from the approved base | Ownership and scope are clear | Overlap, secrets, shared services |
| Build | Implement within repository architecture and constraints | Checks pass and change stays scoped | Readability, maintainability, risk |
| Prove | Reproduce before, verify after, retain evidence | Acceptance criteria have receipts | Method validity and missing cases |
| Ship | Open a PR, review, fix, recheck, and present | Gates pass and reviewer comments close | Merge, deploy, rollback, accountability |
Each stage exists because model capability alone does not create an accountable development process. A strong model can still edit the wrong branch, follow a weak architecture, test only the happy path, or persuade itself that a screenshot proves more than it does.
1. Isolate Every Task
The new-feature skill starts work from origin/main in a fresh Git worktree. A worktree gives one repository another checked-out working directory tied to its own branch. Several agents can therefore edit separate filesystem trees instead of touching one shared checkout.
This prevents a common failure: one agent rewrites files that another agent is actively changing. It does not guarantee conflict-free integration. Two branches may still change the same function, schema, dependency, lockfile, or interface. The conflict appears later during rebase or merge.
- Use one branch and one worktree per task and agent.
- Check open pull requests and uncommitted changes for overlapping files before work begins.
- Assign ownership for database migrations, lockfiles, generated code, and shared configuration.
- Give each worktree its own ports, test data, queues, and temporary storage where needed.
- Keep the worktree until its pull request is merged or closed.
2. Build to Explicit Architecture
Michael's code-structure skill guides agents toward a service-layer architecture. Boundaries or actions coordinate why and when work occurs, while services own reusable implementation logic through explicit inputs and structured returns.
The broader principle matters more than one architecture style: encode the rules that a fresh agent cannot reliably infer. A mature repository may prefer vertical slices, domain modules, functional cores, ports and adapters, or framework-native patterns. The factory should teach the local choice and show examples from the codebase.
A build stage needs more than a style preference. It should define permitted dependencies, authentication boundaries, data ownership, error behavior, accessibility expectations, migration rules, performance budgets, and exact commands for linting, tests, types, and builds.
- Read the task, repository instructions, and nearby implementation.
- State the files and contracts likely to change.
- Implement the smallest complete behavior.
- Run repository checks and inspect the diff.
- Remove unrelated edits and generated noise.
- Stop when an unresolved product or security decision requires a person.
3. Prove the Behavior Changed
The evidence-driven-testing skill requires the broken or previous state to be captured before implementation, then the working state after it. Visible changes may use screenshots or recordings. Invisible changes need measured output, such as test results, response pairs, query plans, or performance numbers.
In the course, Michael shows a page moving from about 815 milliseconds to roughly 60 milliseconds. That is useful project evidence, not a universal performance result. A credible comparison holds the environment, route, data, cache state, sample size, and measurement method steady. One fast run is weaker than a distribution across repeated runs.
| Change type | Before evidence | After evidence | Additional check |
|---|---|---|---|
| UI defect | Screenshot or recording reproducing it | Same viewport and flow corrected | Mobile, keyboard, and console |
| API behavior | Request, response, and status | Same request with expected response | Auth, errors, retries, idempotency |
| Performance | Repeated baseline measurements | Repeated measurements after change | Behavior and resource use preserved |
| Data migration | Fixture and starting schema | Result and rollback test | Duplicates, nulls, partial failure |
| Security rule | Authorized failing test or trace | Blocked path and passing controls | Independent review |
Evidence should correspond to the ticket's definition of done. A polished recording can prove that one flow worked once; it cannot establish security, absence of regressions, or production readiness on its own.
4. Ship Through an Independent Review Loop
The ship stage assembles the pull request, includes before-and-after proof, and invokes the Greploop skill. Greptile reviews the change, the agent addresses findings, and the loop continues until the configured target is met. Michael's public template requires a Greptile score of 5/5 with zero unresolved comments before presenting the PR URL.
That threshold is a workflow gate, not a guarantee. Automated reviewers can miss design mistakes, misunderstand product intent, or agree with code produced by another model. Repository checks, domain review, security review, and a human merge decision remain separate gates.
The course mentions CodeRabbit and Macroscope as alternatives. The correct reviewer is the one your team can evaluate, configure, and monitor. For high-risk changes, use a genuinely independent method: another model, static analysis, security tooling, or a person with relevant expertise.
Why Five or Six Markdown Files Can Be Enough
Markdown makes the factory portable, inspectable, and version-controlled. A team can review the workflow in the same pull request as the code, trace when a rule changed, and adapt it across model providers. The instructions remain company assets instead of disappearing into one person's chat history.
Small files also force useful separation. The repository-wide AGENTS.md should define sequence, hard boundaries, and local commands. A skill should explain one repeated operation. Ticket content should hold the task-specific outcome. Tests should encode behavior. Mixing all four into one giant instruction file makes maintenance and debugging harder.
| File | Keep inside | Keep outside |
|---|---|---|
AGENTS.md | Workflow, safety rules, commands, ownership | Temporary task details |
| Stage skill | Reusable method and exit criteria | Whole repository description |
| Ticket | Outcome, scope, acceptance, risk | Generic coding advice |
| Tests | Executable behavior contracts | Unverifiable prose promises |
| Pull request | Change, proof, risks, rollback | Hidden reasoning transcript |
Controls for Parallel Agents
Michael reports running as many as fifteen features in parallel and reviewing visual proof instead of reading every line first. That is an experienced operator's current workflow, not a sensible starting target for every team. The bottleneck moves from typing code to defining tasks, managing shared dependencies, validating evidence, reviewing changes, and integrating branches.
- Dependency map: identify tickets that must run sequentially.
- Scope check: flag overlapping files and contracts before agents start.
- Resource namespace: give each task isolated ports, fixtures, databases, and queues.
- Permission tiers: keep production deploys, credentials, destructive migrations, and merges human-owned.
- Evidence contract: define what must be captured before implementation begins.
- Merge order: rebase and retest each branch against the latest approved base.
- Capacity limit: never start more work than people and systems can review.
A factory's throughput is accepted, stable changes per week. Agent sessions, pull requests opened, lines generated, or a review score can support that measure, but none of them replace it.
Build a Starter Factory in One Afternoon
- Choose one repository. Use a project with tests, a working local setup, and no urgent production incident.
- Write the factory contract. Add the four stages, exact check commands, forbidden actions, and escalation rules to
AGENTS.md. - Create one task skill. Start with worktree creation, branch naming, scope inspection, and cleanup.
- Define one evidence pattern. Use a visible UI defect or a small API behavior with a repeatable before state.
- Add one independent review. Use existing CI plus a second reviewer or approved automated review tool.
- Run two non-overlapping tasks. Measure intervention, correction, test failure, review time, and merge conflict rate.
- Improve the instructions. Turn repeated corrections into narrow rules, examples, or tests.
Do not begin by copying every skill. Start with the failure your team actually experiences. If agents overwrite work, build isolation first. If they ship plausible but broken interfaces, build proof first. If implementations are unreadable, encode architecture and review rules.
A Factory Scorecard That Measures Accepted Work
| Measure | Why it matters | Warning sign |
|---|---|---|
| Accepted change rate | Tracks useful output, not activity | Many PRs, few merges |
| Human review minutes | Shows whether proof reduces cognitive load | Review grows faster than throughput |
| Rework after merge | Captures escaped defects and weak acceptance | Fast merge, frequent repair |
| Evidence completeness | Tests whether agents return decision-ready work | Screenshots without reproducible steps |
| Integration conflict rate | Tests task slicing and branch ownership | Parallel work repeatedly overlaps |
| Cost per accepted change | Combines model, review, retry, and tool cost | Cheap generations, expensive correction |
| Lead time | Measures request-to-accepted-change speed | Work waits in review queues |
Video Chapters
| Time | Topic | Time | Topic |
|---|---|---|---|
| 00:00 | Intro | 14:48 | Step 3: Prove With Evidence-Driven Testing |
| 02:17 | Software Factory Definition | 22:25 | Step 4: Ship With Grep Loop and Greptile |
| 03:44 | Why the Software Factory Matters | 26:52 | The Physical Factory Analogy |
| 05:23 | Step 1: Isolate With Git Work Trees | 29:21 | A Software Factory Is Markdown Files |
| 11:34 | Step 2: Build With the Code Structure Skill | 30:02 | Closing Thoughts |
Verdict
Michael Shimeles's factory works as a useful minimum because it turns agent coding into a visible production line with named gates. Isolation reduces accidental interference. Architecture guidance protects maintainability. Evidence makes behavior inspectable. Review loops give the agent a reason to revisit weak work before a person spends attention on it.
The factory still needs human ownership. Worktrees cannot resolve product ambiguity. Screenshots cannot prove every requirement. A third-party score cannot authorize a merge. The durable advantage is the process encoded in the repository and improved after every failure, not the number of agents running at once.