Feature Decomposition
Purpose
Decomposition commonly earns its cost through work that can be validated
independently, work that must be ordered because of a real dependency, and work that will
be shared across people or sessions. Outside those, a breakdown is a table of contents for a
change that would have been easier to read as a diff.
The output that always matters is the resource list. Child Product/Tech Features above it are
optional and must remain valuable, independently decidable/deliverable, and testable; resources are
what gets implemented, validated and tracked.
Workflow
- Test whether to decompose at all. If the feature is one resource, say so and produce a
one-line list. That is a complete answer.
- Produce the resource list first, from the impact map. Each element in the map becomes a
resource or joins one; nothing in the map is unaccounted for.
Reuse the current map/scope revision. If none exists, record a minimal source-to-resource
mapping for the known work; leave material unknowns open rather than inventing files or scope.
- Give each resource a
RES-* identifier, a dependency list and a validation — the fields are in
references/resource-catalogue.md. A resource with no stated validation is not finished
being defined.
- Create child features only when the grouping adds an independently valuable outcome. A Product
Feature uses
PF-*; a Tech Feature uses TF-* and names measurable engineering value.
- Keep enabling work as resources by default. A migration, component, infrastructure change, or
test harness is
RES-* unless it independently reduces risk/cost or enables a usable capability
with its own acceptance. Do not manufacture a Tech Feature from a phase or layer.
- Order the resources by their dependencies, and say where the order is forced versus
merely convenient.
Check missing IDs and cycles. A cycle calls for clarifying a shared contract, splitting a
producer from its consumer, or merging inseparable work; do not invent a linear order over it.
- Say why the shape is what it is — including "not decomposed, because it is one resource".
When to decompose
| Signal |
Decompose? |
| Parts can be validated independently |
Yes |
| Parts must be ordered because one produces what another needs |
Yes |
| Parts will be worked by different people or across sessions |
Yes |
| Part of it could ship without the rest |
Yes |
| It is one file, one test, one behaviour |
No |
| The split would be by layer for its own sake |
No |
| The parts are only separable on paper |
No |
Splitting one behaviour across a controller story, a service story and a repository story
produces three items none of which can be validated alone. That is not decomposition; it is
transcription of the layer diagram.
Decision rules
IF a child cannot state independent product or engineering value and its own acceptance
THEN it is not a child feature; keep its work as RES-* under the parent.
IF a resource has many dependencies
THEN verify each necessary input and distinguish implementation, validation and release order.
A legitimate integration resource may consume many outputs; count alone does not justify a split.
IF two resources always change together and are always validated together
THEN consider merging unless ownership, staged compatibility or a real handoff requires separation.
IF a resource cannot be validated without another resource existing
THEN say so in its validation, and let the order follow from it.
IF a resource lacks a path to in-scope impact and acceptance
THEN identify the missing mapping or scope decision. One impact entry can justify several
resources, and one resource can satisfy several entries; counts are not a scope test.
IF a resource is "write the tests"
THEN it is misplaced: tests belong to the resource whose behaviour they establish.
A separate test resource is legitimate only for shared harness or fixture work.
IF the feature is Light
THEN return one concise resource with its validation when it remains one local outcome.
If material dependencies or boundaries emerge, report the changed driver for reclassification;
this analysis does not itself authorize implementation.
Constraints
- Do not split to look thorough. Three resources implemented and tracked beat eleven
resources of which six are one line each.
- Do not decompose by layer by default. Decompose by behaviour, and let a behaviour touch
several layers.
- Every resource traces to the impact map and to scope. A resource that traces to neither is
scope creep with an identifier.
- Do not estimate here. Sizes and dates are a separate concern with separate discipline.
- Preserve supplied Java/framework/runtime and compatibility constraints in each affected
resource. Decomposition does not choose upgrades or a new technical baseline.
Output
Decomposition child features and resources | resources only | none
Because <the signal that decided it>
PF-01 <independently valuable product outcome and BAC-*>
RES-01 <resource>
RES-02 <resource>
TF-01 <independently valuable engineering outcome and TC-*>
RES-03 <resource>
Parent resources (including work not assigned to a child)
RES-04 <resource>
Dependencies RES-02 needs RES-01's column; RES-03 needs RES-02's contract
Ready first RES-01, RES-04 (no dependency between them)
Then RES-02 -> RES-03; RES-04 may proceed independently
Execution consumes resource scope, acceptance, ownership and dependencies together. Independence
in the graph permits parallel planning only when shared-file/resource ownership is also resolved.
Before handoff, check scope coverage, unique/stable IDs, an acyclic dependency graph and validation
for each resource; report unresolved dependencies rather than claiming the breakdown ready.
1---2name: feature-decomposition3description: Deciding whether a feature should be split at all and, when it should, into what: child features only where they carry independent value someone can state, Tech Features for independently useful engineering outcomes, and below both a flat list of implementation resources with identifiers, dependencies and their own validation. Use when a feature is about to be implemented as one undifferentiated lump, when a small change is being ceremonially split into items nobody needs, when work has to be ordered because parts depend on each other, when two people or two sessions will share the work, or when progress cannot be reported because there is nothing to report progress against. Does not write the plan around the breakdown (feature-implementation-plan), does not track the resulting statuses (feature-progress-tracking), and does not estimate any of it (estimation-under-uncertainty).4---56# Feature Decomposition78## Purpose910Decomposition commonly earns its cost through work that can be **validated11independently**, work that must be **ordered** because of a real dependency, and work that will12be **shared** across people or sessions. Outside those, a breakdown is a table of contents for a13change that would have been easier to read as a diff.1415The output that always matters is the **resource list**. Child Product/Tech Features above it are16optional and must remain valuable, independently decidable/deliverable, and testable; resources are17what gets implemented, validated and tracked.1819## Workflow20211. **Test whether to decompose at all.** If the feature is one resource, say so and produce a22 one-line list. That is a complete answer.232. **Produce the resource list first**, from the impact map. Each element in the map becomes a24 resource or joins one; nothing in the map is unaccounted for.25 Reuse the current map/scope revision. If none exists, record a minimal source-to-resource26 mapping for the known work; leave material unknowns open rather than inventing files or scope.273. **Give each resource a `RES-*` identifier, a dependency list and a validation** — the fields are in28 `references/resource-catalogue.md`. A resource with no stated validation is not finished29 being defined.304. **Create child features only when the grouping adds an independently valuable outcome.** A Product31 Feature uses `PF-*`; a Tech Feature uses `TF-*` and names measurable engineering value.325. **Keep enabling work as resources by default.** A migration, component, infrastructure change, or33 test harness is `RES-*` unless it independently reduces risk/cost or enables a usable capability34 with its own acceptance. Do not manufacture a Tech Feature from a phase or layer.356. **Order the resources** by their dependencies, and say where the order is forced versus36 merely convenient.37 Check missing IDs and cycles. A cycle calls for clarifying a shared contract, splitting a38 producer from its consumer, or merging inseparable work; do not invent a linear order over it.397. **Say why the shape is what it is** — including "not decomposed, because it is one resource".4041## When to decompose4243| Signal | Decompose? |44| ------------------------------------------------------------- | ---------- |45| Parts can be validated independently | Yes |46| Parts must be ordered because one produces what another needs | Yes |47| Parts will be worked by different people or across sessions | Yes |48| Part of it could ship without the rest | Yes |49| It is one file, one test, one behaviour | No |50| The split would be by layer for its own sake | No |51| The parts are only separable on paper | No |5253Splitting one behaviour across a controller story, a service story and a repository story54produces three items none of which can be validated alone. That is not decomposition; it is55transcription of the layer diagram.5657## Decision rules5859```text60IF a child cannot state independent product or engineering value and its own acceptance61THEN it is not a child feature; keep its work as RES-* under the parent.6263IF a resource has many dependencies64THEN verify each necessary input and distinguish implementation, validation and release order.65 A legitimate integration resource may consume many outputs; count alone does not justify a split.6667IF two resources always change together and are always validated together68THEN consider merging unless ownership, staged compatibility or a real handoff requires separation.6970IF a resource cannot be validated without another resource existing71THEN say so in its validation, and let the order follow from it.7273IF a resource lacks a path to in-scope impact and acceptance74THEN identify the missing mapping or scope decision. One impact entry can justify several75 resources, and one resource can satisfy several entries; counts are not a scope test.7677IF a resource is "write the tests"78THEN it is misplaced: tests belong to the resource whose behaviour they establish.79 A separate test resource is legitimate only for shared harness or fixture work.8081IF the feature is Light82THEN return one concise resource with its validation when it remains one local outcome.83 If material dependencies or boundaries emerge, report the changed driver for reclassification;84 this analysis does not itself authorize implementation.85```8687## Constraints8889- **Do not split to look thorough.** Three resources implemented and tracked beat eleven90 resources of which six are one line each.91- **Do not decompose by layer by default.** Decompose by behaviour, and let a behaviour touch92 several layers.93- **Every resource traces to the impact map and to scope.** A resource that traces to neither is94 scope creep with an identifier.95- **Do not estimate here.** Sizes and dates are a separate concern with separate discipline.96- Preserve supplied Java/framework/runtime and compatibility constraints in each affected97 resource. Decomposition does not choose upgrades or a new technical baseline.9899## Output100101```text102Decomposition child features and resources | resources only | none103Because <the signal that decided it>104105PF-01 <independently valuable product outcome and BAC-*>106 RES-01 <resource>107 RES-02 <resource>108109TF-01 <independently valuable engineering outcome and TC-*>110 RES-03 <resource>111112Parent resources (including work not assigned to a child)113 RES-04 <resource>114115Dependencies RES-02 needs RES-01's column; RES-03 needs RES-02's contract116Ready first RES-01, RES-04 (no dependency between them)117Then RES-02 -> RES-03; RES-04 may proceed independently118```119120Execution consumes resource scope, acceptance, ownership and dependencies together. Independence121in the graph permits parallel planning only when shared-file/resource ownership is also resolved.122Before handoff, check scope coverage, unique/stable IDs, an acyclic dependency graph and validation123for each resource; report unresolved dependencies rather than claiming the breakdown ready.