
A dev agency proposal that wins follows a three-section pattern: a short narrative summarizing the client's problem and your approach, a tight scope with assumptions and exclusions, and milestone-based pricing with 50 percent upfront. Skip hourly-only bids, name your risks, and your close rate goes up. Most losing proposals lose because they are too long, too defensive, and priced by the hour.
That is the playbook in 80 words. The rest of this post shows you the template, the language, the math, and the mistakes.
Most proposals lose before the prospect reads page two. The losing ones share four traits: they are too long (15 to 30 pages of templated boilerplate), they quote hourly only (which signals junior work and invites scope creep), they never name a single project risk, and they restate the RFP back at the client without showing real thinking about what is actually hard.
The winning proposals are 5 to 8 pages. They lead with a one-page narrative that sounds like a senior engineer wrote it, not a sales rep. They quote milestone-based payouts. They name two or three specific risks with mitigations. And they include a written change-order policy so scope conversations are pre-resolved.
You do not need a fancy proposal tool to do this. You need a structure that closes.
Almost every winning dev agency proposal we see uses the same three-section structure:
That is the entire document. References, case studies, and team bios go in an appendix or a separate page. The proposal itself stays under eight pages.
This works because it mirrors how decisions actually get made. The buyer reads the narrative to decide if you understand the problem. They read scope to decide if the deal is fair. They read price last and only after the first two sections have built trust. Burying the narrative behind a 6-page agency intro inverts the order and kills momentum.
The narrative is the section that wins or loses the deal. A good one has four parts and runs about 400 words.
The problem in their words. Two to four sentences restating what you heard in discovery, using the client's vocabulary. If they said "our checkout is slow on mobile and Stripe webhooks fail randomly," do not translate that into "performance optimization and payment infrastructure hardening." Use their words.
The approach in plain English. Three to five sentences explaining how you will fix it. Name specific tools and steps. "We will instrument checkout with Datadog, find the slow queries, rewrite the worst three, and add idempotency keys to the Stripe webhook handler."
The risks named upfront. Two or three risks you actually see, plus how you will handle each. Naming risk is a trust signal. Example: "Risk: your Stripe data contains test transactions mixed with real ones. Mitigation: we run the migration in a staging schema first, you sign off, then we cut over."
Why us specifically. Two sentences. Not a 12-bullet list of services. One specific reason your team is right for this work, plus one named reference doing similar work.
Buyers in 2026 are pattern-matching on AI-generated proposals; the polished, generic narrative is the tell. Specific, slightly imperfect language wins.
Scope is where margin gets protected or destroyed. The format that works:
In scope (numbered list of deliverables). Be concrete. Not "responsive design" but "5 marketing pages plus checkout, breakpoints at 1280, 768, 375, tested in the latest two versions of Chrome, Safari, Firefox."
Out of scope (named exclusions). This is where you save the deal six months from now. Examples: "Email template design (we use the templates you provide). Migration of legacy WordPress content beyond 50 posts. Translation or localization. New payment processor integration beyond Stripe."
Assumptions. A short list of things you are pricing against. "We assume access to your AWS account within 5 business days. We assume one technical decision-maker available 30 minutes per week. We assume your design system is documented in Figma. If any assumption fails, we re-price the affected milestone."
Change-order policy. One paragraph. "Changes to scope require a signed change order with revised price and timeline. Change orders under 4 hours of effort are billed at $200/hour. Larger changes are repriced as a new milestone." This is not legalese, it is a margin guarantee.
We have seen agencies double their effective hourly rate in six months just by adding the assumptions and change-order paragraphs to every proposal. The work did not get more expensive. The change conversations got easier.
Hourly pricing is the single biggest leak in the dev agency P&L. It signals junior work, caps your effective rate, and turns every status update into a justification meeting.
The structure that closes:
| Milestone | Deliverable | Payout | Payment trigger |
|---|---|---|---|
| Kickoff | Signed contract, Slack and repo access provisioned | 50% of total | On signature |
| Design freeze | Approved Figma, scoped tickets in Linear | 20% | On client sign-off |
| Beta | Deployed to staging, walkthrough call done | 20% | On staging review |
| Launch | Production deploy, runbook handed off | 10% | On production cutover |
A few rules that travel well:
Always 50 percent upfront. This filters tire-kickers, funds the kickoff, and signals you are not a freelancer who will disappear. Buyers who balk at 50 percent are buyers who will balk at the final invoice too.
Three to five milestones, no more. Anything more than five becomes a paperwork nightmare. Anything fewer than three concentrates payment risk on a single late deliverable.
Net 0 or net 7 terms. Not net 30. The reason agencies struggle with cash flow is because they accept enterprise payment terms while paying engineers weekly. Push back on net 30 hard, even with bigger logos.
No bonus or success fees. They sound great in the proposal and never get paid. Stick to fixed milestones.
The math behind why milestones beat hours: a typical dev agency charges $150 to $300 an hour. A booked weekly engineer (whether on your bench or via a marketplace) costs $1,000 to $2,000 a week, which is $25 to $50 an hour equivalent at 40 hours. If you bid hourly you are leaving 3 to 6x of margin on the table. If you bid milestones with a fixed scope, you bank that spread.
For deeper margin math on running an agency, our build a 6-figure dev agency breakdown walks through utilization, retainer mix, and the gross margin floor most shops should never bid below.
Here is the gap most articles skip: you cannot bid milestone work confidently if your only staffing option is your existing team. The minute the project is bigger than your bench, you pad the timeline or pad the price. Both lose deals.
The structural answer is bench-on-demand staffing. Keep a small core team. For spiky project work, book engineers by the week against the milestone, then release them when it closes. You bid aggressive timelines without carrying salary.
Cadence is one option here. Founders and agencies book vetted engineers in 2 minutes against weekly billing. Every engineer on the platform is AI-native by default (Cursor, Claude Code, and Copilot are tested in a voice interview before they unlock the platform), so the spec-to-shipped lag is shorter than a typical contract role. Pricing tiers:
Two patterns work for agencies. White-label: book a Cadence engineer at $1,500 a week, bill the client at the agency rate ($4,000 to $8,000 weekly equivalent), and bank the spread. Partner referrals: agencies in the Cadence partner program earn 10 percent recurring on every founder they refer, on top of any white-label margin.
The point is not to plug Cadence. The point is that you cannot win milestone-priced proposals at agency rates if your only lever is hiring full-timers. Some structured bench has to exist.
Most "how to write a proposal" articles spend their word count on tooling. Tooling matters less than you think.
| Tool | Best for | Price (USD/mo) | Where it wins | Where it loses |
|---|---|---|---|---|
| Better Proposals | Polished design, fast send | $19 to $49 | Templates, e-signing, simple analytics | Limited team collaboration on bigger deals |
| PandaDoc | Sales-driven shops | $19 to $49 | Strong CRM integrations, approval flows | Editor can feel heavy for short proposals |
| Proposify | Mid-size to large agencies | $35 to $65 | Snippets, analytics, branded library | More UI weight than solo shops need |
| Notion plus PDF export | Solo and small shops | $0 to $10 | Speed, full control of layout | Looks DIY without good templating |
| Google Docs plus DocuSign | Anyone who hates SaaS | $0 to $15 | Universal, easy collaboration | No proposal-native analytics |
Pick whichever tool gets a polished proposal in front of the buyer in under 60 minutes. The differentiator is never the tool. It is the narrative section, the named risks, and the milestone math.
If you are debating tools versus building your own templates in Notion, build it in Notion. The templates that ship deals are the ones you have used 30 times and refined. A flashy SaaS proposal with a generic narrative loses to a clean Notion PDF with a sharp narrative every time.
Six patterns we see kill otherwise winnable proposals:
You will recognize most of these from your own losing proposals. The fix is structural, not stylistic.
Pick one proposal you sent in the last 90 days that did not close. Rewrite it against the three-section template: narrative, scope, price. Cut the page count to 8 or fewer. Add a risks paragraph and a change-order clause. Replace hourly line items with milestones. If you cannot staff the milestones from your current bench, pre-stage a Cadence booking against the spec so you can quote a real timeline.
Then send the rewrite to the same buyer with a one-line note: "I think we got the scoping wrong the first time. Here is what we should have proposed." This single move re-opens deals at roughly a 1-in-4 rate, which beats most cold outbound.
For the broader playbook on how dev shops find clients in the first place, our find clients for a dev agency post covers the inbound channels (SEO, referral programs, productized retainers) that feed the proposal pipeline. Proposals only matter if qualified leads exist.
Want to staff your next milestone without hiring? Book a Cadence engineer in 2 minutes, get a 48-hour free trial, replace any week. Weekly billing means you scale staff to the proposal, not the proposal to your bench. Earn 10% recurring as a Cadence partner.
Five to eight pages, including scope and price. Anything longer signals you do not know which parts matter. Move team bios, case studies, and detailed legal terms to a separate appendix or a follow-up document.
Milestone-based with 50 percent upfront. Hourly bids signal junior work, cap your effective rate, and invite scope creep arguments at every status meeting. Milestones with named deliverables let you protect margin and force scope clarity before signature.
50 percent on signature, 25 to 50 percent split across midpoint milestones, balance on launch or production cutover. Push for net 0 or net 7 terms. Net 30 forces you to finance the client's project on your cash, which is the same trap that kills most agencies.
Build a written change-order policy into the proposal itself. New work outside scope requires a signed change order with revised price and timeline. Small changes (under 4 hours) bill at a fixed hourly rate; larger changes get re-priced as a new milestone. Pre-resolving this in writing makes the conversation procedural instead of personal.
Yes, but only two contactable named references with the specific work they hired you for. Long testimonial walls feel padded and trigger AI-generated proposal pattern matching. Buyers in 2026 verify references quickly; specific named references with real outcomes beat 12-logo banners every time.
Quoting hourly only with no fixed milestone payouts. It signals junior work, kills your margin, and leaves the client wondering what they are actually buying. Move to milestones with 50 percent upfront on every proposal over $5,000, no exceptions.