⚡The short answer: the flags that matter most
A proposal is a prediction of a relationship. Agencies behave during the sale the way they will behave during the build — only nicer. So when a proposal hides information, the build will hide it too, at build rates. The three flags that predict the most damage are a single-point estimate with no discovery, an anonymous team, and IP language that does not assign everything to you on payment. Almost everything else is a variation on those three.
The table below is the checklist version. The rest of the article explains each flag, why it happens, and what to ask in response. None of these are automatic disqualifiers on their own — a small fixed-scope job legitimately skips a formal discovery phase, for example — but each one is information the agency chose not to give you, and the pattern matters more than any single item.
See how our services are scoped and priced
| Red flag | What it usually means | What to ask |
|---|---|---|
| No discovery phase | The estimate is a guess dressed as a quote | What assumptions is this number built on? |
| Single-point total, no range | False precision; the variance will surface as change orders | What is the range, and what moves it? |
| Vague team page | Staffing is not settled, or not who you think | Name the people. May we interview them? |
| No QA line item | Testing is unbudgeted and will be skipped under pressure | What percentage of effort is testing? |
| "Local team," actually offshore | You are paying onshore rates for offshore delivery | Where does each named person sit? |
| Missing maintenance terms | Post-launch pricing is open-ended leverage | What does month thirteen cost? |
| IP assignment gaps | You may be renting your own product | Show me the assignment clause. When does it trigger? |
📐Flags one to three: the estimate itself
The estimate section of a proposal is where the agency shows you whether it understands your project or is selling to it. Three patterns should slow you down.
First, no discovery phase. A professional build starts with a paid, time-boxed scoping phase — typically one to four weeks — that converts your idea into a buildable backlog with real estimates. A proposal that jumps straight to a build total is telling you the number was produced from a sales call, not from analysis. The discovery cost did not disappear; it moved into the build, where it will be spent as rework at full rates. Skipping discovery is sometimes legitimate for a genuinely small, well-defined job, but the proposal should say so explicitly.
Second, a single confident total. Real estimation has variance, and honest agencies show it: a range, or a total with stated assumptions. A lone number like $87,500 for a six-month build signals false precision. The variance still exists — you just cannot see it, which means it will arrive later as change orders, and change orders are priced by a vendor who knows switching costs are now high.
Third, an estimate that cannot decompose. Ask for hours by role and phase. An agency that cannot or will not break its total into engineering, design, QA and management hours is asking you to evaluate a number you cannot verify or negotiate. The refusal itself is the flag — even if the total is fair.
👥Flags four to seven: who is actually doing the work
You are not buying a company; you are buying specific people for specific months. Proposals that blur this are protecting the agency, not you.
A vague team page — "our senior architects" with no names, or a wall of stock photos — usually means one of two things: staffing is not settled, or the people on the sales call are not the people who will build your product. The counter is simple: ask for the named team, their roles, their allocation percentages, and the right to interview the technical lead. Agencies with stable senior teams agree to this readily; agencies running a bench or a resale operation stall.
The next flag is "100 percent local" staffing that is actually offshore. There is nothing wrong with offshore or blended teams — we run one ourselves, with offices in Edmonton and Chandigarh, and the model works well when it is disclosed and managed. The red flag is the lie, not the geography. An agency claiming a fully local team while quietly subcontracting overseas is billing you onshore rates for offshore delivery and, more importantly, has already shown you how it handles uncomfortable truths. Ask where each named person physically sits and check it on a video call.
Two smaller flags round out this group. No QA line item means testing has no budget owner, and under deadline pressure unbudgeted work is what gets cut — you receive code that was never systematically tested and discover it in production. And missing maintenance terms mean month thirteen is unpriced, which hands the agency open-ended leverage exactly when switching is most painful. Honest proposals name a maintenance model and a rate before you sign.
The fastest single test in this entire article: ask for the named delivery team and a thirty-minute call with the technical lead, before signing. The speed and directness of the answer predicts the whole engagement better than the proposal does.
📄Flags eight to eleven: the contract mechanics
The final group lives in the terms rather than the pitch, and it is where sophisticated buyers focus. These four are the ones that produce the worst surprises.
IP assignment gaps are the most consequential. The contract should assign all work product — code, design files, documentation, infrastructure definitions — to you, in writing, upon payment, with no retained licence that lets the agency reuse your product as a template for a competitor. Watch for: assignment only on final payment of the last invoice (leverage during disputes), exclusions for "pre-existing tools" defined so broadly they swallow the codebase, and silence on design and infrastructure assets. Anything less than full assignment is renting, not buying.
An unrealistic timeline is a sales flag disguised as optimism. If three agencies quote five months and one quotes ten weeks, the ten-week proposal has not found an efficiency the others missed — it has deferred the honest conversation to a missed deadline, when your sunk cost makes you compliant. Ask what the timeline assumes about your own feedback turnaround, and what has made similar projects slip.
The last two travel together: no change process and a proprietary lock-in stack. Every real project changes scope; a proposal without a written process for pricing and approving changes is reserving the right to improvise billing later. And a proposal built on a niche framework or a vendor-controlled platform nobody else can maintain is a switching-cost strategy. A mainstream stack — mainstream frameworks, a standard database, managed cloud — is cheaper to build, cheaper to maintain, and, tellingly, the choice of agencies that expect to keep your business by being good rather than by being sticky.
IP: the four words that matter
"All work product, upon payment, in writing." Then check the exclusions list — that is where the claws live.
Timeline realism check
Ask what slipped on their last three comparable projects and why. An agency with no answer has not been tracking; one with a rehearsed "nothing ever slips" is performing.
Change process
A one-paragraph clause covering how changes are estimated, approved and billed prevents the most common dispute in the industry.
Stack audit
Ask: if we part ways in a year, how hard is it for another team to take this over? The answer reveals whether the stack choice serves you or the vendor.
✅What a good proposal actually contains
It is easier to spot the flags when you know the shape of the real thing. A professional proposal is longer than a sales deck and shorter than a contract, and it is specific in ways that are mildly uncomfortable for the agency — because specificity is what accountability looks like before signature.
Notice what the good shape has in common across every row: it transfers information to you before you have leverage over nothing. Named people, decomposed hours, written exclusions, priced maintenance. An agency that hands you this document has deliberately given up the informational advantages that bad agencies monetize later. That is not naivety; it is a firm confident enough in its delivery to compete on it.
The table also works in reverse as a request list. If a proposal arrives missing two or three of these rows, you do not have to reject it — you can ask for the rows. The quality of the response to that request is itself the evaluation. A firm that fills the gaps quickly and precisely has them ready; a firm that cannot produce them was never going to.
Read what our proposals include as standard
| Section | What good looks like |
|---|---|
| Discovery | A paid, time-boxed phase with named deliverables: backlog, architecture, estimates — or an explicit reason it is unnecessary |
| Estimate | A range with stated assumptions, decomposed into hours by role and phase |
| Team | Named people, roles, allocation, and an offer to interview the technical lead |
| QA | A visible testing allocation, typically 10–20 percent of build effort, plus a staging environment |
| Staffing geography | Disclosed locations for each team member, blended or otherwise |
| Maintenance | A named post-launch model with rates, response times and an exit path |
| IP & exit | Full assignment on payment, defined exclusions, credentials in your name, a handover clause |
| Change process | Written method for pricing and approving scope changes |
| References | Two or three clients you may actually call, on comparable work |
⚖️How to compare two proposals honestly
Three proposals for the same project routinely span a two-times price range, and the middle one is not automatically right. Before comparing totals, normalize. Force every proposal onto the same grid: same team mix assumption, same phase split, same list of what is included and excluded. The classic exclusions — hosting, third-party licences, content entry, data migration, post-launch support — are where a cheap proposal quietly becomes expensive. An excluded line you need is a discount you did not get.
Then compare the blended rate, not the headline. Divide each total by its total hours. A $150,000 proposal with senior-heavy staffing and full QA frequently represents better value than a $110,000 proposal that is mostly junior hours with no testing budget — because the second one delivers the missing phases anyway, as rework, at the worst possible time.
Weight the things proposals cannot show. Responsiveness during the sale predicts responsiveness during the build. The quality of the questions the agency asked you predicts the quality of the discovery. And the willingness to say "this part of your scope is a bad idea" predicts whether you are buying a partner or a meter.
Finally, run the downside scenario explicitly. Ask each agency: "at 80 percent of the budget, if the remaining work is larger than estimated, what happens?" The answer — re-plan with you, or bill the overrun — tells you which proposal was real. This one question filters more effectively than any scoring matrix, because it forces the agency to describe its own failure mode before you have signed.
| Normalize this | Agency A says | Agency B says | Question to ask |
|---|---|---|---|
| Hours by role | Fill in from each proposal | Fill in from each proposal | Can you decompose the total? |
| Blended rate | Total ÷ total hours | Total ÷ total hours | Why does the mix differ? |
| QA allocation | Percent of build effort | Percent of build effort | Who signs off on quality? |
| Exclusions | List them | List them | Which exclusions will we actually need? |
| Maintenance | Model + rate | Model + rate | What does month thirteen cost? |
| IP terms | Clause reference | Clause reference | Show me the exact assignment language |
❓The ten questions to ask before signing
Everything above compresses into a short list of questions that any honest agency will answer directly and any problematic one will hedge on. Ask them in writing, and treat hedged written answers as answers.
One discipline makes the list far more powerful: ask every shortlisted agency the same questions and compare the answers side by side. Differences that were invisible in the proposals become obvious in the responses — one agency names people, another describes roles; one quotes a maintenance rate, another says "we can discuss that closer to launch." You are not just collecting answers; you are generating a controlled comparison of how each firm behaves under the same mild pressure.
Start a scoped conversation about your project
Who, by name, is on my team?
And may I interview the technical lead before signing?
Where does each team member physically work?
Geography is fine; undisclosed geography is not.
What assumptions is this estimate built on?
Followed by: what is the range around this total?
What percentage of effort is QA, and who owns it?
A named person and a number, not "we test everything."
What is excluded from this price?
Get the list in writing and price the ones you need.
Show me the IP assignment clause.
All work product, upon payment, with narrow explicit exclusions.
What does maintenance cost after launch?
Model, rate, response time, and how you exit it.
How are scope changes priced and approved?
One paragraph in the contract, agreed now, not improvised later.
What happens at 80 percent if the estimate was wrong?
The re-planning answer, not the blame answer.
Which two clients can I call about comparable work?
Then actually call them, and ask what went wrong.