Subagent-Driven Development
In one line: Delegate bounded independent tasks where authorized; keep ownership, evidence and integration decisions explicit.
Subagents are an option for focused implementation, investigation and review. A controller may also implement locally when delegation is unavailable, disallowed or inefficient. Fresh context can reduce interference from unrelated work; it does not guarantee correctness, speed or an independent oracle.
The operational procedure is skill:s4u-loop-dispatch. A task brief identifies the exact objective, approved intent, baseline, ownership, constraints, permitted effects, acceptance checks and evidence expected. Write that brief first; choose the skilled worker type from §5.3 and say why; dispatch; pair with the reviewer whose lens matches the diff at task review. Generic by default is an anti-pattern, and a type never replaces the brief. Children receive only the context their task and audience permit. They must preserve other contributors' work and report overlap. Apply the bounded lifecycle and milestone handoff of §7.10.
Wave dispatch. A wave groups tasks without upstream dependencies or conflicting writes. Check both file ownership and shared resources: generated directories, databases, queues, ports, caches, external services and measured host capacity. File-disjoint tasks are not automatically independent. Choose concurrency from observed workload and the approved budget, not a fixed GB-per-suite formula. Review completed candidates; start dependent work only when its prerequisites have actually passed.
Verification and recovery. Spec-fidelity review and engineering-quality review answer different questions. Reviewers report actual evidence and limitations; a second agent's agreement does not replace protected acceptance or accountable approval. A worker reports DONE, DONE_WITH_CONCERNS, NEEDS_CONTEXT or BLOCKED with task/run identity, changed paths, commands/results, gaps and any still-active child jobs. DONE means ready for review, not merged or released.
Long-running checks use supported asynchronous execution and bounded waits. If logs are captured, use unique private run-owned paths and preserve the original command's exit status. Showing the last log lines does not prove the full check passed or avoid runtime limits. Test counts are derived from required behavior and failures, not capped to fit a brief.
A silent worker is not known to be dead. Before taking over, confirm quiescence or effective fencing of every old writer, then reconcile ownership and inspect the intended diff. git status cannot attribute edits to an agent. Targeted tests cannot alone justify a recovery commit. Transfer stub implementation and its tests together, without weakening independent acceptance expectations.
A blocked task need not stop independent siblings, but shared authority, security or dependency failures can stop the entire wave. Diagnose the reason before retrying. More context, a different decomposition or another approved model route may help; a blocker never grants additional permissions.