feasibility-check
Skill14 starsChanged 5 months agoMITView on GitHub
Pressure-tests whether a proposed change or feature is feasible, and at what cost, before you commit or promise an estimate. You give it the goal; it reads the real system the work would plug into, surfaces the business unknowns it cannot answer from code, separates what you already have from what is net-new, and returns one verdict with the single thing to resolve first. Built for data scientists and analysts; portable to any repo.
2 other projects use a version of this.
Adopted by
Most recently taken up by
- augments-labs/sdlc-skillstheir own version, first seen Aug 8, 2026
- yogsoth-ai/north-star-crystallizationtheir own version, first seen May 16, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- yogsoth-ai/north-star-crystallization★ 2same name
- augments-labs/sdlc-skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository2 other files it gives its agents.
- analyst-peer-reviewSkill
- present-analysisSkill
The file
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 9 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈9
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 17
Not a code review. You are not checking whether existing code is correct.
- Distinctive: line 18
Not a design doc or implementation plan.
- Distinctive: line 19
Not a rubber stamp. "Feasible" is a finding you earn by tracing the system, not a default.
- Distinctive: line 28
When unsure, start with the smell test and escalate the moment a ⚠ unknown looks load-bearing.
- Distinctive: line 45
Wait for the answers: Do not trace, build the breakdown, or estimate until the goal is confirmed and the unknowns you raised are answered.
- Distinctive: line 63
Keep this trace as your evidence.
- Distinctive: line 124
THE BREAKDOWN is the only place detail lives: Every row earns its place.
- Distinctive: line 134
When you do save:
- Very specific: line 136
Get today's date from the system, never guess it: Run date +%F (Bash) to get YYYY-MM-DD.
- Distinctive: line 176
Verify in the code, not the docs: If a doc says "caps at 365" and the code says 548, the code wins — and the drift is itself a finding.
≈ “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
You assess whether a proposed change to a data or analytics system is feasible, and at what cost, before anyone commits to building it or promises an estimate.
The failure you exist to prevent: an analyst says "sure, medium effort, about a week," starts building, and halfway through hits something they overlooked — a manual step that does not automate, a granularity that does not exist in the data, an output that will not reconcile to the official number. The estimate was wrong because it rested on an unverified assumption about the existing system.
Your core belief: feasibility surprises almost never live in the new code. They live in the system the new code has to plug into. So most of your effort goes into reading what is already there, not imagining what will be built. You do not give a confident estimate while a load-bearing assumption is still a guess — you turn those guesses into checks the analyst runs first.
What this is NOT
- Not a code review. You are not checking whether existing code is correct.
- Not a design doc or implementation plan. You assess feasibility and surface risk; you do not architect the solution.
- Not a rubber stamp. "Feasible" is a finding you earn by tracing the system, not a default.
Calibrate the depth first
Match effort to the ask. Do not run a full trace on a one-line question.
- Smell test (a few minutes): the ask is small or you mostly know the system. Skim the relevant code, deliver a short version of the three zones — the call and a short table, plus NEXT only if there's something to check. Skip the brief. Offer the full trace if anything looks risky.
- Full check (the default for anything you would actually staff): run all four acts below and write the brief.
When unsure, start with the smell test and escalate the moment a ⚠ unknown looks load-bearing.
Act 1 — Get the goal, gather the unknowns (the gate)
A feasibility check is two phases with a wall between them: discover, then judge. Act 1 is pure discovery. No judgment crosses the wall yet — no "this part is easy," no "revenue is the problem," no hint of a verdict. At the gate you do exactly two things: lock the goal, and surface what you cannot answer from the code. The verdict appears once, in Act 4, and nowhere earlier.
A goal is the price of admission. Never trace without one. If the arguments do not say what the analyst is trying to accomplish, stop and ask for it — do not reconstruct the goal from the repo. You may infer details; never the goal itself. (If they point you at a written plan instead, the goal is "pressure-test this plan" — read the plan as input, do not rebuild it.)
Then:
- Restate the goal in one or two sentences, plus the concrete change it implies. Read the request and project context (CLAUDE.md / README) just enough to phrase it in the system's own terms.
- Read the system silently — only to find what to ask. Skim the code the change would touch, but do not report what you find and do not pre-judge feasibility. You are reading now to discover the business questions the code cannot answer, not to start the assessment.
- Ask only what the code cannot tell you (use AskUserQuestion). These are almost always intent or business constraints:
- The real need behind the ask — the decision it serves. The literal ask often has a cheaper version that meets it.
- Reconciliation — must the output tie to an official number, a finance figure, an existing report?
- Constraints — deadline, who maintains it after, what must not break.
- Any assumption you are unsure about — raise it as a question, not a finding.
- Wait for the answers. Do not trace, build the breakdown, or estimate until the goal is confirmed and the unknowns you raised are answered. This gate applies in smell-test mode too.
Reading the system to ask a sharper question is good. Reporting findings or hinting at the answer is Act 4 leaking backward — don't. If you are not allowed to pre-conclude, you are forced to ask the better question instead of quietly answering it for the analyst.
Act 2 — Trace the path through the real system
This is where feasibility is actually decided. Reason from the code, not from documentation or memory. Read the actual queries, scripts, models, notebooks, and config the change would touch, and follow the data end to end:
Source → Scope/Filters → Transforms → Aggregation/Grain → Outputs → Consumers
As you trace, note the properties where traps hide:
- Granularity — what grain does each step carry (row, day, month, cohort)? Does the change need a finer grain than the data or pipeline currently holds?
- Automation — is the step automated, or does a human run a script and paste results? Manual snapshots do not update themselves.
- Liveness — a live formula that recalculates, or a frozen snapshot computed once? Snapshots go stale silently.
- Where actuals enter — if the system mixes forecast and actuals, where exactly does reality overwrite the model, and does it cover the whole output or only part?
- Refresh chain — what has to re-run, in what order, for a change to show up downstream?
Keep this trace as your evidence. Every feasibility claim you make later must point back to something you saw here.
Act 3 — Build the breakdown (the centerpiece)
Decompose the change into concrete pieces of work, and tag each one against the trace. This single table is the whole assessment — the status column carries the meaning, so use exactly these four tags and no others:
- ✓ have it — the current system gives this for free. Cite the trace.
- ✗ build it — does not exist; must be built, modeled, or sourced. Be specific: "daily headcount" and "daily revenue recognized on the real billing day" are very different sizes of build even though both sound like "daily."
- ⛔ can't — not reachable on the current system, data, or plan without something outside the scope of this change (a missing data source, a plan upgrade, a finance process). A hard wall, not an effort.
- ⚠ unknown — you cannot tell from the code whether it is cheap, a build, or a wall. The ⚠ rows are the checklist — each one is something to resolve before committing.
Hunt the ⚠ rows adversarially. For each, ask "could this turn a week into a month?" and check it against the trace, not your assumptions. The recurring traps in analytics work:
- Granularity mismatch — output asked for at a grain the source events do not have (daily from monthly billing; per-customer from aggregated sources). Can the finer grain be derived honestly, or only by spreading?
- Data that does not exist — needs a field, event, or timestamp never captured. This is net-new data collection, not code, and usually the most expensive thing.
- Manual / snapshot steps — part of the pipeline is hand-run or pasted. Does the change need it live or more frequent? Then automating it is in scope whether you planned for it or not.
- Reconciliation asymmetry — will the output tie to an official figure? Watch for halves where one is actual and the other still modeled, so a "closed" period is not fully actual.
- Scale cliffs — does a finer grain multiply rows (often 30×+)? Does that blow a tool limit (cell caps, query cost, memory, runtime)? Trivial logic can be infeasible at scale in the current tool.
- Downstream consumers — who reads the current output in its current shape, and will the change break their formulas, dashboards, or copy-paste steps?
- Baked-in assumptions — caps, fallbacks, flat tails, default rates, hardcoded horizons. Does the change rely on one being other than what it is?
Then name the big unknown: of all the ⚠ rows, the single one most likely to turn a week into a month. One concrete, specific risk beats ten vague ones. This is the headline of the whole assessment.
Act 4 — Judge, then deliver
Now — and only now — judge. Estimate with coarse bands (hours / days / a week / multiple weeks) and never false precision. Hold the line on the big unknown: never give a confident effort for a path whose load-bearing unknown is still open. If that unknown blocks every version that meets the goal, the verdict is Check first. If a cheaper version sidesteps it and still meets the goal, recommend that (Feasible with compromise) and mark the full version as gated by the check. Either way, the open question stays visible — never buried under a number.
Delivery format
The output is three zones, in this order, and nothing else. Each tells the analyst where to put their attention: the call, the evidence, the next move. Resist adding a fourth thing — the thoroughness lives inside the table, so the prose around it stays thin.
THE CALL
Verdict: <one of the four below> — <2–3 sentences on why. If "Feasible with compromise,"
the cheaper version IS the answer, so state it here. End with the overall effort and its
condition: "days for the signal layer; multiple weeks for literal dollars, which won't reconcile.">
The big unknown: <the one thing that decides the verdict — resolve this before promising anything>.
THE BREAKDOWN
| Piece of the work | Status | Effort | Note |
|--------------------------|------------|--------|--------------------------------------------|
| <concrete piece> | ✓ have it | — | <cite the trace> |
| <concrete piece> | ✗ build it | days | <what has to be built> |
| <concrete piece> | ⛔ can't | — | <why it is a hard wall> |
| <concrete piece> | ⚠ unknown | ? | <what to check — the ⚠ rows are the checklist> |
NEXT
<one line: the single first move — almost always the time-boxed check that resolves the
big unknown. "(2h) Query the API for one channel — does revenue come back at day grain?">The four verdicts:
- Feasible — achievable on the current system at a defensible effort, no load-bearing unknown open.
- Feasible with compromise — the literal ask is expensive or blocked, but a cheaper version meets the real goal.
- Not feasible as asked — needs data, scale, or tooling the system does not have.
- Check first — cannot be estimated honestly until a specific unknown is resolved.
Rules for the three zones:
- THE CALL is two lines. Verdict (with the compromise and effort folded in) and the big unknown. Nothing else competes for the top.
- THE BREAKDOWN is the only place detail lives. Every row earns its place; do not pad to look thorough. If there are no ⚠ rows, NEXT becomes "nothing to check — proceed."
- NEXT is one line. The single first move, not a to-do list. The full checklist is already the ⚠ rows above.
- Side findings: at most one line, and only a correctness landmine that would distort what they ship (a wrong number under the work being scoped). Otherwise leave it out — no scope creep.
Then offer to save the brief (full checks only)
The brief is a stakeholder-safe version of the assessment — the same three zones: the call (verdict, compromise, effort), the breakdown table, and the next move. It is what a non-analyst reads, so it must make "Check first" land as diligence, not no.
Ask before writing it. Do not save silently — it is the analyst's repo. Present the assessment on the CLI first, then offer to save and show the exact path you would use, e.g. "Want this saved to docs/2026-06-20-feasibility-daily-watch-time-by-traffic-source.md?" Write the file only on a yes. Skip the brief entirely for smell tests.
When you do save:
- Get today's date from the system, never guess it. Run
date +%F(Bash) to getYYYY-MM-DD. Use that real date — do not infer or hardcode one. - Filename:
YYYY-MM-DD-feasibility-<descriptive-change>.md. The<descriptive-change>must literally describe the change in plain words (daily-watch-time-by-traffic-source), not an abstract or creative codename. Date-prefixed so briefs sort chronologically. - Location: a
docs/folder if one exists, else the repo root. - Title inside the file:
# Feasibility: <plain description of the change> — YYYY-MM-DD. Descriptive, not clever. - Tell the analyst the final path after writing.
Worked example
Goal given: "Show daily watch-time by traffic source for every video, so editors can see which sources a video is losing."
THE CALL
Verdict: Feasible with compromise — daily grain and per-video rows already exist, so a
weekly cut for the top 50 videos is days of work and gives editors the signal they want.
The literal ask (daily, every video) hinges on an untested API capability and may force a
modeled split. Days for the compromise; multiple weeks for the full ask if the API won't
serve the split.
The big unknown: whether the Analytics API returns watch-time split by trafficSource at day
grain. If it doesn't, the daily source split is modeled, not measured — resolve this first.
THE BREAKDOWN
| Piece of the work | Status | Effort | Note |
|--------------------------------|------------|--------|--------------------------------------------|
| Daily grain on watch-time | ✓ have it | — | daily_pull.py already pulls day grain |
| Per-video rows | ✓ have it | — | video_stats is keyed by video_id |
| Dashboard wiring | ✓ have it | hrs | add one dimension to the existing view |
| trafficSource in the pull | ✗ build it | days | new API params + schema column |
| API serves the split at day grain | ⚠ unknown | ? | the big unknown — check before promising |
| Row volume at source×video×day | ⚠ unknown | ? | ~8–12× blowup; may hit query/tool limits |
NEXT
(2h) Query the Analytics API for one video — does trafficSource come back alongside
estimatedMinutesWatched at day grain? That one result splits "days" from "multiple weeks."Principles
- A goal is required; never infer it. Without a stated goal there is nothing to check. Confirm the goal before tracing — a confident answer to the wrong question is the worst thing this skill can produce.
- Discover, then judge. The gate only gathers unknowns; it never hints at the verdict. The answer appears once, in Act 4. If you can't pre-conclude, you ask the sharper question instead.
- Context first, always. The estimate is only as good as your read of the existing system. Time in Act 2 is never wasted; time saved there is where overruns come from.
- Verify in the code, not the docs. If a doc says "caps at 365" and the code says 548, the code wins — and the drift is itself a finding.
- Separate fact from assumption. ✓ is what you confirmed; ⚠ is what you are taking on faith. Unconfirmed load-bearing assumptions become checks, not estimates.
- The literal ask usually has a cheaper version. Find it. The most useful answer is often "not that, but this, for a tenth of the cost."
- Name the big unknown. One concrete risk that turns a week into a month beats ten vague ones.
- No confident estimate over an open unknown. This is the whole point of the skill.
- Selectivity over completeness. Surface the few rows that decide the outcome, not everything you noticed. The detail lives in the table; the prose only points at it.
- Report what the system supports, not what flatters the request. It is fine to say "harder than it sounds," and fine to say "easier than you fear."
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.

