Feature Development: Parallel Module Pattern
Overview
Each teammate owns an independent module or component. They build in parallel without interfering. An integrator ensures cross-module consistency.
Core principle: Conway's Law as a tool — structure the team to mirror the desired architecture.
Management theory: Conway's Law (team structure → system architecture), T-Shaped Skills (specialists who understand the whole), Belbin role coverage.
When to Use
- •New feature with 2+ independent components
- •Each component can be built and tested in isolation
- •Components have well-defined interfaces/contracts
- •Code ownership is clear (no two people editing same file)
Don't use when:
- •Components are tightly coupled
- •Interface contracts are undefined
- •Single module that can't be split
Team Composition
coordinator (lead, delegate mode recommended) ├── architect × 1 (designs interfaces, reviews contracts) ├── implementer × 2-3 (one per module) ├── reviewer × 1 (code quality + spec compliance) └── integrator × 1 (optional: cross-module consistency)
Belbin coverage:
- •Thinking: architect (Plant) + reviewer (Monitor-Evaluator)
- •Action: implementers (Implementer)
- •People: coordinator (Coordinator) + integrator (Teamworker)
Sizing by feature scope:
| Feature Size | Team | Notes |
|---|---|---|
| 2 modules | 3-4 | coordinator + 2 implementers + reviewer |
| 3-4 modules | 4-5 | + architect for interface design |
| 5+ modules | 5-7 | + integrator, or split into sub-teams |
The Process
Phase 1: Forming — Architecture & Contracts
Before spawning implementers:
- •Coordinator or architect defines module boundaries
- •Define interface contracts between modules (API signatures, data shapes)
- •Create task list with dependencies
- •Each module is a task assigned to one implementer
Critical: Interface contracts MUST be locked before implementation starts (Tuckman's Norming). Changing contracts mid-build invalidates parallel work.
Contract template:
Module A provides: - function doX(input: TypeA): TypeB - emits event "x-complete" with payload TypeC Module B consumes: - calls A.doX() with [specific inputs] - listens for "x-complete" Agreed data types: [shared types file]
Phase 2: Storming — Plan Review
- •Architect presents module split + contracts
- •Reviewer checks for gaps, ambiguities
- •Devil-advocate (or reviewer) challenges: "What if module A fails? What's the error contract?"
- •Iterate until contracts are solid
Phase 3: Performing — Parallel Implementation
Each implementer:
- •Works only on their assigned module
- •Follows the agreed interface contract
- •Writes tests for their module in isolation
- •Commits independently (no file conflicts)
File ownership rule: No two implementers touch the same file. If shared code is needed, the integrator or architect handles it.
Coordinator in delegate mode:
- •Does NOT implement anything
- •Tracks progress via task list
- •Unblocks stuck implementers
- •Routes cross-module questions to architect
Phase 4: Integration
Integrator (or coordinator):
- •Verifies all modules implement their contracts
- •Writes integration tests
- •Checks cross-cutting concerns (error handling, logging, auth)
- •Resolves any interface mismatches
Phase 5: Adjourning — Review & Reflect
- •Reviewer runs full review on integrated code
- •team-orchestrator:session-reflection captures learnings
Conway's Law: Team ↔ Architecture Mapping
Structure your team to produce the architecture you want:
| Desired Architecture | Team Structure |
|---|---|
| Microservices | 1 implementer per service |
| Monolith with modules | 1 implementer per module, shared integrator |
| Frontend + Backend | 1 FE impl + 1 BE impl (see cross-layer pattern) |
| Plugin system | 1 impl for core + 1 per plugin |
Anti-pattern: Splitting by file instead of by feature. This produces files that "work" in isolation but features that don't cohere.
Common Mistakes
| Mistake | Fix |
|---|---|
| Start implementing before contracts locked | Norming gate: plan must be approved |
| Two implementers editing same file | Assign file ownership explicitly |
| No integration phase | Integrator role exists for this |
| Coordinator starts coding | Enable delegate mode |
| Contracts too vague | Include data types + error cases |
| No shared types file | Architect creates it before implementation |
Integration
Pre-requisite: team-orchestrator:orchestrating-work routes here Post-requisite: team-orchestrator:session-reflection records learnings Related: superpowers:subagent-driven-development for single-session alternative