Why Fixed-Price Software Projects Fail When the Scope Is Really Two Products

July 2025

There is a pattern behind many failed fixed-price government software projects, and it is not bad vendors or bad agencies. It is a scope that was secretly two products, priced as one.

How the Bundle Happens

It starts reasonably. A city needs a permitting system. Business licensing also lives in a spreadsheet, so it goes in the RFP — "permitting and business licensing" reads like one system with two modules. Compliance plus billing, inspections plus a public portal: same logic, same trap. Each pairing sounds like a checkbox. Each is actually a second product.

Take permitting plus licensing, because it is the most common bundle. A building permit is an approval pipeline: the application routes to plan review, comments come back, the applicant resubmits a site plan, inspections get scheduled against the approved set, and eventually someone signs a certificate of occupancy. A business license is a renewal-and-enforcement loop: it renews every year, it accrues a late fee when the renewal date passes, and at sixty or ninety days past due someone generates a delinquency notice and decides whether to escalate. One is a pipeline with an end. The other is a loop with no end. They look similar on an intake form. Underneath they share almost nothing.

Month Seven

Here is how it usually plays out. The estimate gets built in requirements workshops, and the workshops are about permitting — plan review routing, inspection scheduling, fee schedules. Licensing gets two slides at the end of the deck. Nobody pushes back, because the person who actually runs licensing — often the city clerk — was never in a requirements meeting. The renewal calendar, the late-fee rules, and the wording of the delinquency letters exist in one person's head and one spreadsheet, and neither was in the room.

Around month seven the licensing module arrives, and it turns out to be a renamed permit form with a renewal date field added. It cannot batch renewals. It does not calculate late fees. There is no delinquency notice anywhere in it. The vendor, defending a fixed number, built the second product as thin as the contract allowed; the agency, holding a fixed price, must accept it or fight for change orders. Both sides behave rationally and the structure fails anyway. It is always the second product — the one scoped by analogy instead of analysis — that arrives broken.

Three Tests Before the RFP Goes Out

  1. Different primary records? A permit application and a business license are not the same record wearing different labels. One has plan sets and inspection cards attached; the other has a renewal history and a payment status.
  2. Different users? If plan reviewers use one half and the city clerk uses the other, the halves will pull in different directions — and whichever user was missing from the workshops gets the broken half.
  3. Different rules and cycles? Annual renewals and one-time approvals age differently, report differently, and break differently.

Two yeses means two products. Plan accordingly.

Phase the Contract

You do not have to split the procurement. You have to split the structure:

  • Phase the contract — permitting live and accepted before licensing work begins
  • Write separate acceptance criteria for each product, including the unglamorous parts. For licensing that means renewals batch correctly, late fees calculate on their own, and the clerk can produce a delinquency notice without calling support
  • Let phase one's lessons reprice phase two on purpose, instead of through change orders
  • Put the clerk in the phase-two requirements meetings — the person who runs the renewal cycle is the requirements document

Phasing is not slower. It is the same work in an order that can survive contact with reality.

Fixed-price contracts do not fail because anyone lied. They fail because a number was attached to a scope nobody had actually counted. Count the products first. Then price them.