Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Runs a sequenced monolith-to-modular pipeline that sizes and inventories components, finds shared domain duplication, addresses flattening and hierarchy issues, analyzes coupling, then groups components into candidate domain-aligned units, with optional embedded DDD strategic analysis for bounded contexts. Use when asking how to split a monolith, size components before extraction, find duplicated domain logic, clean up module hierarchy, measure coupling between modules, or group components into
.claude/skills/tech-leads-club-modular-decomposition/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -50% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-18 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 38% | 0% |
This skill runs the Patterns 1–5 analysis pipeline before service extraction. Each pattern is plain markdown under references/; load the file for that step and execute it against the user’s codebase.
If the user only wants extraction order, phases, or migration roadmap after analysis exists, use decomposition-planning-roadmap instead. If they need a full legacy migration plan (strangler fig, research, multi-stack), use legacy-migration-planner as well or instead of this skill when that is the primary ask.
references/pattern-NN-*.md file and follow its instructions. Use the optional *-quick-reference.md for the same number when a short checklist is enough.references/domain-analysis.md before or alongside Pattern 5. Optionally open references/domain-analysis-quick-reference.md or references/domain-analysis-examples.md for condensed rules or illustrations.Example 1 — Full pipeline
User: "We're going to split this monolith—run the full decomposition analysis (Patterns 1–5)."
Agent: Execute patterns 1→5 in order, loading each references/pattern-NN-*.md, preserving outputs between steps, then summarize cross-cutting recommendations.Example 2 — Coupling after inventory
User: "We already have a rough module list—focus on coupling (Pattern 4) and then domain grouping (Pattern 5)."
Agent: If no prior inventory exists in the thread, either run Pattern 1 briefly or derive an explicit module list from the repo before 4 and 5. State any assumptions.Example 3 — DDD before grouping
User: "Map bounded contexts and language, then group components into domains."
Agent: Read references/domain-analysis.md (and optional quick reference/examples) in parallel with or immediately before Pattern 5; align Pattern 5 groupings with linguistic boundaries where evidence supports it.references/domain-analysis.md before or alongside Pattern 5 (see Bounded contexts below).| Step | Pattern | Primary reference | | ---- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------- | | 1 | Identify and size components | references/pattern-01-identify-and-size.md (optional: pattern-01-identify-and-size-quick-reference.md) | | 2 | Common domain detection | references/pattern-02-common-domain.md (optional: pattern-02-common-domain-quick-reference.md) | | 3 | Flattening / hierarchy | references/pattern-03-flattening.md (optional: pattern-03-flattening-quick-reference.md) | | 4 | Coupling analysis | references/pattern-04-coupling.md | | 5 | Domain identification and grouping | references/pattern-05-domain-grouping.md (optional: pattern-05-domain-grouping-quick-reference.md) |
Pattern 6 (_create domain services / extraction_) is not duplicated here. After Pattern 5, switch to decomposition-planning-roadmap for phased extraction order, milestones, and migration-style planning. For full legacy migration strategy (strangler-fig, cross-stack rewrites, research-heavy plans), optionally use legacy-migration-planner in addition.
references/domain-analysis.md, with optional domain-analysis-quick-reference.md and domain-analysis-examples.md. Use it when you need to validate or refine boundaries against business language, not only folder structure.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-16 | pass→pass | 15,728 | 11,662 | -26% | 1 | 1 | 0% | 2,491 | 3,244 | +30% | 0 | 0 | — |
case-09 | pass→pass | 9,520 | 5,910 | -38% | 1 | 1 | 0% | 1,471 | 2,474 | +68% | 0 | 0 | — |
case-10 | fail→pass | 14,361 | 5,458 | -62% | 1 | 1 | 0% | 2,293 | 2,290 | -0% | 0 | 0 | — |
case-01 | fail→fail | 12,656 | 3,875 | -69% | 1 | 1 | 0% | 2,301 | 1,680 | -27% | 0 | 0 | — |
case-02 | fail→fail | 9,215 | 3,249 | -65% | 1 | 1 | 0% | 1,506 | 1,610 | +7% | 0 | 0 | — |
case-03 | fail→fail | 19,547 | 4,833 | -75% | 1 | 1 | 0% | 3,743 | 1,877 | -50% | 0 | 0 | — |
case-11 | pass→fail | 15,674 | 3,986 | -75% | 1 | 1 | 0% | 2,709 | 1,972 | -27% | 0 | 0 | — |
case-04 | fail→fail | 20,558 | 18,853 | -8% | 1 | 1 | 0% | 3,374 | 4,289 | +27% | 0 | 0 | — |
case-05 | fail→fail | 34,482 | 37,421 | +9% | 1 | 1 | 0% | 6,195 | 7,534 | +22% | 0 | 0 | — |
case-06 | fail→fail | 17,599 | 11,970 | -32% | 1 | 1 | 0% | 2,970 | 3,770 | +27% | 0 | 0 | — |
case-07 | fail→fail | 16,302 | 8,858 | -46% | 1 | 1 | 0% | 2,706 | 2,811 | +4% | 0 | 0 | — |
case-08 | fail→pass | 17,192 | 3,138 | -82% | 1 | 1 | 0% | 3,548 | 1,772 | -50% | 0 | 0 | — |
case-12 | fail→fail | 10,473 | 14,250 | +36% | 1 | 1 | 0% | 1,802 | 1,873 | +4% | 0 | 0 | — |
case-13 | pass→fail | 24,982 | 2,309 | -91% | 1 | 1 | 0% | 4,594 | 1,472 | -68% | 0 | 0 | — |
case-14 | pass→pass | 14,600 | 3,819 | -74% | 1 | 1 | 0% | 2,331 | 2,109 | -10% | 0 | 0 | — |
case-15 | fail→fail | 16,086 | 8,609 | -46% | 1 | 1 | 0% | 2,474 | 2,784 | +13% | 0 | 0 | — |
case-17 | fail→pass | 9,445 | 3,333 | -65% | 1 | 1 | 0% | 1,576 | 1,971 | +25% | 0 | 0 | — |
case-18 | fail→pass | 15,705 | 4,791 | -69% | 1 | 1 | 0% | 2,302 | 2,133 | -7% | 0 | 0 | — |
case-19 | fail→pass | 8,700 | 2,982 | -66% | 1 | 1 | 0% | 1,356 | 1,868 | +38% | 0 | 0 | — |
case-20 | fail→pass | 6,503 | 4,413 | -32% | 1 | 1 | 0% | 1,111 | 2,121 | +91% | 0 | 0 | — |
case-21 | pass→pass | 6,884 | 2,740 | -60% | 1 | 1 | 0% | 1,118 | 1,797 | +61% | 0 | 0 | — |
case-22 | fail→pass | 9,328 | 3,990 | -57% | 1 | 1 | 0% | 1,509 | 1,967 | +30% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 19 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/11/2026 | +23% |
Other measured skills in the registry, with their headline benchmark lift.