Back to Blog
assumptionssoftware-proposalscope-creepsoftware-estimationsoftware-agencies

Documenting Assumptions in a Software Proposal: A Complete Guide

Which assumptions belong in a software development proposal, how to explain them to the client, and why a written assumptions section is the cheapest protection against scope creep an agency can buy.

John· CTO at Apropo·
Software proposal document with a clearly written assumptions section

In short: Every software quote rests on assumptions about scope, technology, timeline and team. The trouble starts when those assumptions stay in the estimator’s head instead of the proposal document. This guide covers which assumptions to write down, how to explain them to a client, and why a solid assumptions section is the cheapest protection against scope creep an agency can buy.

Where this problem starts

Ask any CTO why a project went over budget and you’ll usually get a variation of the same sentence: “we assumed that
”. The payment integration would be simple. The client would deliver the content on time. The backend stack was already agreed.

Short proposals have become the norm in IT estimating. The client wants something quick, specific and cheap, so the sales team trims the assumptions section because “nobody wants to read an essay”. The quote looks tidy. Everything that got cut returns during delivery as scope changes, extra work, and arguments about who meant what.

This isn’t a rare edge case. It’s one of the main reasons quotes for the same brief can differ by an order of magnitude, and why project budgets drift so far from the plan.

Why it hurts

How you handle uncertainty matters more than the arithmetic behind the estimate. An estimate is a forecast, and every forecast stands on a set of assumptions. The fewer of them you can actually see, the worse the outcome.

  • Scope creep with no reference point. If the scope boundary isn’t written down, you have nothing to point to when the client asks for “a small change”. Every change gets negotiated from memory instead of from the document.
  • Disputes over interpretation. “The quote included login.” Sure - but did it include Google and Apple sign-in? Without recorded assumptions, the answer depends on who happens to be on the call.
  • Quotes you can’t compare. Every agency prices its own silent assumptions. The client compares numbers, not assumptions, and decides on a comparison that doesn’t really exist.
  • The same mistake, over and over. When assumptions are never captured, the agency never learns where its estimates went wrong, so the error comes back in the next project.

The bill for all this is real: burned margin, overtime, strained client relationships, and projects that were over budget before they started.

How to fix it

The fix is unglamorous but effective. Write the assumptions down, in the proposal document, before the client signs. A process that holds up looks like this.

Step 1: Gather assumptions in four categories

Before you put a number on paper, list what that number depends on. Four categories cover most of it.

  • Technical: stack, architecture, integration approach, library versions, environments. Example: “We assume integration with X via a publicly available REST API; integration through a dedicated SDK is not included.”
  • Scope: what’s in, and what you’re explicitly leaving out. Example: “Scope includes the admin panel for user management; the financial reporting module is out of scope.”
  • Timing: deadlines, dependencies, resource availability, how much the client needs to be involved. Example: “We assume the client delivers content and graphics by [date]; any delay moves the schedule.”
  • Resources: team size, seniority, hours. Example: “The quote assumes 1 senior + 1 mid for 8 weeks; scaling up to go faster changes the price.”

Step 2: Write each assumption as something you can check

Write assumptions so they can be verified later. “We assume standard code quality” says nothing; “we assume code review and unit tests are part of the definition of done” gives both sides something concrete to work with. The same goes for infrastructure. “The system runs on the client’s servers” is vague, while “we assume hosting on AWS in a configuration the client provides, with infrastructure costs on the client side” is a fact you can test.

The more measurable the assumption, the earlier you’ll notice it no longer holds, and the quicker you can price whatever changed.

Step 3: Present assumptions as precision, not as an escape hatch

This is the part most agencies get wrong. Clients read a list of assumptions and hear “the agency is covering itself”. Reframe it: assumptions are evidence that you thought the details through. Attach each one to a line in the quote - this part costs X because we assume Y, and if Y changes we’ll see it early and correct the picture openly. Then give the client room to challenge the assumptions before signing. Some will change, and that’s the point: a one-sided offer turns into a shared definition of the project.

Step 4: Treat the assumptions as a living document

Assumptions don’t retire when the contract is signed. During delivery, keep comparing reality against them. When one stops holding, write down the deviation, work out what it costs in money and time, and put options in front of the client. A potential argument becomes a controlled renegotiation instead.

Step 5: Automate how the assumptions get built

Here the game shifts. Writing assumptions from scratch in every project is slow, and different estimators forget different things. Automation comes down to two pieces:

  • Assumption templates for common project types (MVP, web app, integrations, AI-assisted). Instead of trying to remember what else to assume, you work through a checklist that already survived a few dozen projects.
  • Historical data from similar work. When the tool proposes assumptions based on how comparable projects actually turned out, you’re inferring from evidence rather than starting from a blank page.

Faster quoting is the obvious benefit. The bigger one is completeness. The assumptions an estimator simply forgot to think about are the ones that resurface during delivery.

Where Apropo comes in

That’s the job apropo.io was built for. Instead of writing assumptions blind into the next document, you get a tool that:

  • builds the estimate on components and historical data from your own projects, so assumptions come from what actually happened rather than intuition,
  • lets you produce repeatable, consistent proposals with an assumptions section already in place, so you’re not starting from zero on every offer,
  • gives you estimate-versus-reality control, so you can see which assumptions held up and which to correct on the next quote.

It isn’t a convenience feature. It’s what makes documenting assumptions a normal part of the pricing process instead of a chore, and the payoff shows up in your margin and in how the client relationship holds up.

Protect project margin

Make every assumption visible before it costs you margin.

Document scope, assumptions and pricing in one place, and catch scope creep while it is still cheap to fix.

See how Apropo protects margin

The short version

Documenting assumptions is where an honest, accurate estimate starts. Write down the technical, scope, timing and resource assumptions. Present them as evidence of precision rather than excuses. Treat them as a living artifact that changes with the project. Add automation built on your own historical data, and estimating gets faster and noticeably more complete, with far less risk left on the table. Worth testing on a real proposal before the next project teaches you the same lesson through your margin.


Inspired by real industry discussions about estimation and scope management in software projects.