Turn a rough estimate, quote, or proposal into a statement of work that can be signed and enforced: reconcile every estimate line to a scope package, draw in and out scope boundaries, surface hidden assumptions with if-false consequences, write deliverables with testable acceptance criteria, pick a pricing model that matches estimate maturity, and wire in change control before signature. Use when someone has an estimate, a quote, a ballpark, or a proposal and needs a SOW, scope of work, or work order drafted, reviewed, or tightened. For scope creep on work already running, use scope_management instead.
./install.sh estimate-to-sowname: "estimate_to_sow" description: "Turn a rough estimate, quote, or proposal into a statement of work that can be signed and enforced: reconcile every estimate line to a scope package, draw in and out scope boundaries, surface hidden assumptions with if-false consequences, write deliverables with testable acceptance criteria, pick a pricing model that matches estimate maturity, and wire in change control before signature. Use when someone has an estimate, a quote, a ballpark, or a proposal and needs a SOW, scope of work, or work order drafted, reviewed, or tightened. For scope creep on work already running, use scope_management instead."
An estimate is a priced guess with its reasoning mostly left unsaid. A statement of work is a commitment both parties can be held to. The gap between the two is where disputes are born: work the client pictured and the provider never priced, assumptions that failed in silence, a total that matches no line items, and "done" that was never defined.
This skill closes that gap in a repeatable way. It reconciles the estimate line by line, forces every hidden assumption into the open with a consequence attached, and writes acceptance tests before anyone signs. The deliverable is a SOW a third person could read cold and use to settle an argument.
Use the files that ship with this skill:
references/sow-template.md: the full SOW skeleton, section by section.references/assumption-library.md: recurring assumptions with test questions and if-false wording.references/change-control-template.md: change order form, change register, and fair change pricing rules.examples/example-sow.md: a short, complete, worked conversion.bin/validate_sow.py: a structural checker. Run it on every draft before signature.Ask for the estimate itself: line items, quantities, rates, hours, contingency, exclusions, validity date, and the name of the person who built it. A one line total with no workings cannot be converted honestly. If only a total exists, say so, and treat the job as re-estimating first, SOW second.
Record four things most summaries drop:
Estimate accuracy follows how defined the work is, not how confident anyone feels. AACE International classifies estimates by level of project definition (RP 18R-97, written for process industries, widely borrowed elsewhere). Typical ranges, stated as a range of ranges at roughly 50 percent confidence after contingency:
| Class | Definition | Typical use | Typical low | Typical high | |---|---|---|---|---| | 5 | 0 to 2 percent | Concept screening | -50 percent | +100 percent | | 4 | 1 to 15 percent | Study or feasibility | -30 percent | +50 percent | | 3 | 10 to 40 percent | Budget authorization | -20 percent | +30 percent | | 2 | 30 to 70 percent | Control or bid | -15 percent | +20 percent | | 1 | 50 to 100 percent | Check estimate or bid | -10 percent | +15 percent |
Treat these as a warning label, not a promise. AACE itself warns that a specific estimate needs its own risk analysis. The working rules:
Federal practice (per GSA guidance) splits these cleanly, and the split works in private work too:
Picking the wrong type creates friction from day one. If the client cannot state measures, it is not ready for a PWS. If the provider is being hired for its method, do not strangle it with a task level SOW.
Build the reconciliation table (template section 12) before drafting prose. Every estimate line gets one of four fates, stated in the table:
Then run the check in the other direction: every priced package and every deliverable in the draft must trace back to an estimate line or a signed change order. Orphans in either direction are defects. The two classic findings: a deliverable in the proposal narrative that no line priced, and a line for work the scope text never mentions.
Scope is a fence, and a fence needs all three sides written down:
Per PMI, the signed result is a scope baseline: scope statement plus work breakdown plus definitions, changed only through formal change control.
A deliverable is a noun a person can inspect: a report, a configured system, a migrated data set, a training session delivered to a named audience. "Support", "coordination", and "management" are activities. If an activity must be sold, bound it: hours per month, response target, named channels, end date.
Each deliverable gets an ID (D1, D2), a format and quantity, and the standard it must match: a named spec, a signed sample, a field sheet, a regulation. An unnamed standard means the client's memory is the standard, and memories differ.
Go through references/assumption-library.md and the estimator interview from step 1. Every assumption that survives goes into the register with four fields:
Keep three lists separate. Assumptions are things taken as true. Dependencies are things someone must provide, with a due point. Constraints are limits nobody chose, such as a fixed end date or a regulation. Mixing them hides who owes what.
Retire assumptions at each milestone: proven, still live, or false. A consequence invoked in writing within days of an assumption failing is normal business. The same consequence first mentioned at invoice time reads as a trap, however well it was drafted.
For each deliverable ID, one acceptance row: the test, the acceptor by name, the review period in business days, and the remedy if it fails.
Every pricing model is a decision about who absorbs an overrun. Make that decision openly:
| Model | Overrun sits with | Fits when | SOW must state | |---|---|---|---| | Fixed price | Provider, inside the written scope | Scope is repeatable and well defined | Tight scope, priced change rates, what the price excludes | | Time and materials | Client | Scope is uncertain, discovery heavy, or urgent | Rates, who approves hours, reporting rhythm, invoicing cadence | | Time and materials with a not to exceed cap | Client, up to the cap | Uncertainty with a hard budget ceiling | Notice point before the cap, stop work rule at the cap, how the cap rises (written change only) | | Milestone or unit price | Shared, per unit or event | Volumes vary but the unit is stable | The unit definition, how units are counted, who counts them |
Then close the commercial gaps that estimates leave open:
A SOW without a change process is an estimate with signatures. Include, at minimum: written change orders only, an impact statement covering scope, price, schedule, and risk before changed work starts, named approvers on both sides, no work on a change before signature, and a register that logs declined and deferred requests as well as approved ones. Use references/change-control-template.md. In-flight creep control after signature is covered by the scope_management skill; this skill's job is making sure the gate exists in the document.
Final audit, in order:
python3 bin/validate_sow.py <draft.md>. Fix every FAIL. Read every WARN and either fix it or accept it on purpose.Deliver, in this order:
references/sow-template.md, with all 14 sections filled or explicitly marked not applicable with a reason. No bracketed writer notes left in.publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
No ratings yet — be the first to rate it.