waterfall-design
Skill0 starsChanged 53 days agoMITView on GitHub
Generate a range of approaches for a feature — from incremental to structural — with adversarial review before presenting. Divergent phase of the waterfall flow.
In this repository26 other files it gives its agents.
- ask-mattSkill
- code-reviewSkill
- create-prSkill
- draft-prSkill
- ready-prSkill
- developSkill
- self-review-docsSkill
- implement-reviewSkill
- implementSkill
- implement-specSkill
- librarianSkill
- nemesisSkill
- refactorSkill
- research-codebaseSkill
- researchSkill
- review-docsSkill
- self-reviewSkill
- simplifySkill
- tddSkill
- test-auditSkill
- waterfall-challengeSkill
- waterfall-implementSkill
- waterfall-planSkill
- waterfall-refactorSkill
- waterfall-reviewSkill
- zero-tech-debtSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 5 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 25
Read the feature description provided by the user.
- Distinctive: line 77
When naming approaches, identify the algorithmic class (graph traversal, dynamic programming, bipartite matching, etc.), pattern family …
- Distinctive: line 100
Do not pad with straw-man alternatives.
- Distinctive: line 116
When the challenge flow returns, incorporate any revisions into the approach list before Step 6.
- Distinctive: line 126
Ask the user to pick an approach (or propose their own).
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Design
Given a feature request, deeply explore the codebase, critically evaluate the existing structure, and generate a range of approaches — from incremental to structural. The challenger reviews the approaches before they are presented to the user.
This is the divergent phase. Do not converge on a solution yet. The goal is to exhaust the option space so the user can make an informed choice.
Detailed planning is the comfortable escape — it feels productive and
sidesteps the harder strategic question of whether the structure is even
right. That question belongs here, not in waterfall-plan. If you find
yourself sketching the implementation, stop and go back to the option
space.
Step 1: Understand the feature
Read the feature description provided by the user. If critical details are missing, ask the user — but prefer answering questions yourself by exploring the codebase. Do not ask about things you can discover by reading code.
Step 2: Explore and evaluate
Explore the codebase to understand:
- Where the feature would live (existing modules, packages, directories).
- What existing code it touches or depends on.
- What patterns and conventions the codebase follows.
- What constraints exist (APIs, data models, config, tests).
Spend real effort here. A design built on assumptions about code you did not read is worthless.
Do not just map the code — evaluate it. As you explore, ask:
- Is the existing structure the right foundation for this feature, or is it working around a previous limitation?
- Are there services, layers, or abstractions that exist for historical reasons but no longer earn their complexity?
- Would a different structure make this feature (and future work) simpler?
- What would you build if you were starting from scratch with today's requirements? How far is the current code from that?
The existing code is not sacred. It was written by someone making their best decision at the time, possibly under different constraints than you have now.
Step 3: Identify refactoring opportunities
Invoke the waterfall-refactor skill at the strategic level. Send it
the feature description and the areas of the codebase involved.
This surfaces structural opportunities — rewrites, merges, eliminations — that could influence which approach to take. Feed the results into approach generation: if a refactor enables a cleaner design, it should appear as part of an approach, not as a footnote.
Step 4: Generate approaches
Generate a range of approaches. For each, describe:
- The approach in 2-3 sentences.
- Which files to create, modify, or remove.
- Trade-offs: what it makes easy, what it makes hard, what risks it carries.
- Scope: rough sense of how much changes (small/medium/large).
When naming approaches, identify the algorithmic class (graph traversal, dynamic programming, bipartite matching, etc.), pattern family (event sourcing, state machine, finite automaton, etc.), or domain-modeling concept (aggregate, bounded context, anti-corruption layer, etc.) when one applies. Domain-modeling concepts apply most when the codebase has rich domain logic, not CRUD or infrastructure glue. If an approach is bespoke for a problem class that has known solutions, justify the bespoke choice. Do not force a pattern where none fits, but do not reinvent one either.
The approaches must span the spectrum:
- Incremental: Fit the feature into the existing structure with minimal changes. Describe what compromises this requires and what debt it adds.
- Refactor-first: Restructure the relevant code to properly accommodate the feature, then build it on the improved foundation. Describe what the refactor unlocks beyond this feature.
- Structural (when applicable): Challenge whether the existing components are the right ones. Could services be merged, split, or replaced? Could a layer be eliminated? Describe what this makes possible that the other approaches cannot.
Do not pad with straw-man alternatives. Each approach must be genuinely viable. If a structural approach does not apply (the existing code is well-suited), say so explicitly and explain why — do not skip the question.
Bigger scope is not automatically worse. A rewrite that simplifies three future features may be cheaper than three incremental hacks. Present scope as a trade-off, not a disqualification.
Step 5: Challenge the approaches
Invoke the waterfall-challenge skill. It will detect strategic mode from
the conversation (approaches present, no detailed plan) and run the
adversarial review against the approach list, returning revised approaches
and resolved or open branches.
When the challenge flow returns, incorporate any revisions into the approach list before Step 6.
Step 6: Present and recommend
Present all approaches (including any added or revised during the challenge) with a clear recommendation. State which approach you recommend and why, but make the case for the others too — the user may have context you do not.
Ask the user to pick an approach (or propose their own). Stop and wait for a response. Do not proceed to detailed planning until the user has chosen.
The next phase is the waterfall-plan skill, which will detail the
chosen approach into an implementation plan.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

