The biggest bottleneck in AI-assisted development isn’t the speed of individual agents — it’s the quality of task decomposition. Breaking a project down well is the difference between agents that deliver exactly what you need and agents that produce work you need to redo.
An agent-sized task has four characteristics:
Focused — It touches one area of the codebase or addresses one concern. Tasks that span multiple unrelated systems are hard for agents to reason about.
Completable — An agent can start and finish it in one session. Tasks that require multiple feedback loops or long-running external processes don’t fit the agent execution model well.
Verifiable — You can tell when it’s done. “Fix the login bug” is verifiable; “improve the codebase” is not.
Independent — It doesn’t depend on the output of a task that hasn’t been dispatched yet, unless you’ve explicitly modeled that dependency.
Layer decomposition — Split work by architectural layer: data model first, then business logic, then API, then UI. Each layer is a separate task with a clear dependency chain.
Feature slice decomposition — Split by vertical feature slice: each task implements one end-to-end capability. Good for features that need to be demoed incrementally.
Risk-based decomposition — Do the riskiest, most uncertain work first in its own task. If it fails or requires rethinking, you haven’t built a pile of dependent tasks on a broken foundation.
When tasks depend on each other, make those dependencies explicit in the task description. For example: “This task assumes the database migration in Task #12 has been completed and the users table includes an oauth_provider column.”
Explicit dependencies help agents avoid making assumptions, and help you sequence dispatch correctly.