Decomposition Heuristics: Business Capability, Subdomain, Noun/Verb
What This Concept Is
Three practical lenses that help you propose service boundaries. Each one gives a slightly different answer, and their agreement (or disagreement) is information.
- Decompose by business capability. Ask the business: "what does the company do?" The answer is a hierarchy of capabilities (e.g., "acquire customers", "manage catalog", "fulfill orders", "process payments"). Each capability is a service candidate.
- Decompose by subdomain. From DDD: a domain is split into subdomains classified as core (your differentiator), supporting (needed but not differentiating), and generic (solved commodity). Each subdomain is a service candidate, with investment strategy varying by class.
- Decompose by noun/verb. For every major workflow, list the nouns (entities) and the verbs (operations). Services align naturally with verbs-and-their-owned-nouns, not with nouns alone.
The three lenses usually converge. When they disagree, the disagreement usually reveals a boundary you should re-draw or a context that is larger than one capability.
Why It Matters Here
Engineers decomposing in isolation tend to produce entity services ("one service per table"), which is the anti-pattern covered in concept 06. Business-capability and subdomain lenses pull you toward behavior and responsibility. Noun/verb pulls you toward action. Used together, they converge on services that are cohesive around an outcome.
Concrete Example
A simple online bookstore. Let's run all three lenses.
Lens 1: Business capability
- Browse catalog
- Manage inventory
- Take orders
- Process payments
- Fulfill shipments
- Manage customer accounts
Candidate services: one per capability, six services.
Lens 2: Subdomain classification
- Core: Catalog (differentiating curation + recommendations), Fulfillment (differentiating speed).
- Supporting: Orders, Customer Accounts.
- Generic: Payments (use a provider), Email (use a provider), Auth (buy, don't build).
Core subdomains get the most engineering investment; generic subdomains are thin integration layers over vendors.
Lens 3: Noun/verb for the "place an order" workflow
- Nouns: Customer, Cart, Order, Payment, Inventory, Shipment.
- Verbs:
add-to-cart,checkout,authorize-payment,capture-payment,reserve-stock,confirm-order,schedule-shipment.
Services group verbs and their owned nouns:
- Catalog Service --
browse,search(owns Product-marketing-view). - Cart Service --
add-to-cart,update-cart(owns Cart). - Orders Service --
checkout,confirm-order(owns Order). - Payments Service --
authorize-payment,capture-payment(owns PaymentAttempt). - Inventory Service --
reserve-stock,release-stock(owns StockItem). - Fulfillment Service --
schedule-shipment,track-shipment(owns Shipment).
All three lenses agree on roughly the same six services, with clear owned data. That convergence is the strongest decomposition signal you will get.
Common Confusion / Misconception
"Decomposing by noun means one service per table." That is the entity-service anti-pattern. A service owns its nouns and the verbs that act on them. If a noun has no verbs beyond CRUD, it usually does not deserve its own service; it should be embedded as a value inside another service.
Second confusion: treating the lenses as alternatives rather than cross-checks. You should apply all three. When they disagree, fix the decomposition, not the lens.
How To Use It
- List the business capabilities in 5-10 lines.
- Classify each as core, supporting, or generic.
- For the 2-3 most critical workflows, list nouns and verbs.
- Propose services whose scope is one capability / subdomain and whose data ownership matches the nouns-owned-by-verbs analysis.
- For each service, write one sentence: "This service owns
noun Xand performsverbs A, B, C. It callsservice Yforcapability Z."
Check Yourself
- Why does "decompose by capability" tend to produce better boundaries than "decompose by entity"?
- When the three lenses disagree, which one do you trust first and why?
- What is the difference between a "Payment Service" (verb-owning) and a "Payment Entity Service" (noun-only)?
Mini Drill or Application
Apply all three lenses to a SaaS product you use. Produce:
- 5-8 capabilities
- each classified as core/supporting/generic
- noun/verb breakdown for one workflow
- a list of 4-6 candidate services with one-sentence responsibility each
15 minutes. Stop when you can name each service and its owned data.
How This Sits In The Module
This concept feeds directly into the cluster-3 data-ownership rule (a service owns its nouns, full stop) and into concept 06, which names the common ways these lenses get abused.
When the Lenses Disagree: Diagnostic Patterns
When the three lenses do not produce the same answer, the disagreement is itself a signal. Common patterns:
- Capability lens says one service, noun/verb says two. Usually a sign that one capability owns two distinct aggregates with non-overlapping invariants. Example: "Manage orders" capability contains both
Order(customer-facing) andFulfillmentPlan(warehouse-facing). The noun/verb analysis reveals the split. Promote to two services aligned to the deeper bounded contexts. - Subdomain lens says generic, capability lens says core. Usually the capability is actually supporting -- strategically important for delivery but not differentiating. Example: "checkout" in an e-commerce site is often core experience but the underlying "accept payment" is generic (use Stripe). Split: core wrapper + generic adapter.
- Noun/verb produces a CRUD-only service. The business logic lives somewhere else (usually a BFF or an orchestrator). Either the entity is a value object inside a larger aggregate, or the verbs have not been identified. Return to the workflow and find them.
Disagreement is information; making the three lenses converge is the decomposition exercise.
Event Storming as a Lens Combiner
Event Storming (Alberto Brandolini) is a collaborative technique that often converges all three lenses in one workshop:
- Whole group writes domain events on orange stickies, time-ordered left-to-right on a wall.
- Commands (blue) that trigger events are added next to them.
- Aggregates (yellow) that own the state change are clustered.
- Bounded contexts emerge as clusters of related events sharing language.
- Service candidates fall out naturally: one service per aggregate cluster, one capability per context, verbs-and-nouns populated from the timeline.
This is the single most efficient way to perform the three-lens exercise in a cross-functional room. Schedule 2-4 hours with engineers, product, and domain experts. The wall produced is the decomposition memo's raw input.
Check Yourself (Extended)
- Your team produces three candidate services via the noun/verb lens, but the capability lens produces two. Which is more likely correct and why? (Answer: the capability lens usually wins because it tracks how the business asks for change; the extra noun/verb service is often an aggregate inside one of the two capabilities.)
- Why is "generic" subdomain classification a buying decision, not a building decision? (Answer: generic subdomains are solved commodities; the right action is to buy/adopt, not to invest engineering. Auth, payments, email are the classic examples.)
Read This Only If Stuck
Local chunks
- FoSA: Component-Based Thinking -- partitioning by domain vs technical layer; the book's clearest argument for "by capability."
- FoSA: Discovering Components -- the step-by-step component-discovery recipe, which maps onto the noun/verb lens.
- FoSA: Case Study -- Going, Going, Gone -- Discovering Components -- a worked auction-system decomposition.
- FoSA: Case Study -- Silicon Sandwiches Partitioning -- explicit "technical vs domain partitioning" worked example.
- FoSA: Have Business Domain Knowledge -- the capability lens presupposes you know the business well enough.
- Primer: Application Layer -- Microservices -- short-form "single-purpose service" framing.
External canonical references
- Chris Richardson, Decompose by business capability -- canonical capability lens.
- Chris Richardson, Decompose by subdomain -- DDD-aligned pattern.
- Alberto Brandolini, Introducing EventStorming -- the workshop technique.
- Sam Newman, Finding microservice boundaries (blog/talk) -- practical heuristics.
- Martin Fowler, BoundedContext -- the DDD-lens lineage.
- ThoughtWorks Technology Radar, Event Storming -- radar entry with current positioning.
- InfoQ, Event Storming in practice -- Mariusz Gil -- a practitioner talk with pictures of real walls.
Depth Path
- Sam Newman, Building Microservices (2nd ed.) chapter on "Identifying Microservice Boundaries" uses all three lenses with more examples.
- Eric Evans, Domain-Driven Design, Part IV (Strategic Design) -- the canonical subdomain classification text.
- Vaughn Vernon, Implementing Domain-Driven Design, chapters 2-3 -- applies strategic design to modern service-oriented systems.