Gantt Guild

The $96,000 change order: how a fixed-price engagement absorbed 2,000 more repositories

A bank bought a subsidiary halfway through a $420,000 migration and wanted its 2,000 repositories moved too, before a year-end change freeze. The mechanics of change orders, Work at Risk and Work Exceptions, and the forecast that nearly turned the project red.

Two colleagues discussing work in a modern office

Harbor was a clean engagement on paper. Meridian Bank, a regulated bank with three thousand developers, bought a dedicated GitLab instance and hired Professional Services to migrate 8,000 repositories from legacy source control and CI servers, build CI/CD templates for its forty most important pipelines, and train its engineers. The statement of work, SOW-4471, set a fixed price of $420,000 over eighteen weeks, paid on four milestones the customer had to formally accept.

Then, in September, Meridian acquired a subsidiary and wanted its 2,000 repositories migrated too. Different source system. Same year-end freeze. This is how a well-run services team handled it.

The economics of fixed price

On a fixed-price contract the seller's revenue is fixed, so every hour of overrun comes out of margin. A services PM watches two numbers above all: hours burned against progress, and forecast hours at completion.

ExhibitHarbor: delivery economics (internal)

System of record: Kantata · loaded cost rates illustrative

RolePlanned hoursRatePlanned cost
Project manager (16 h/wk × 18)288$115$33,100
Technical architect (20 h/wk × 18)360$140$50,400
Two PS engineers (40 h/wk × 16)1,280$110$140,800
Engagement manager handover, oversight52$130$6,800
Total1,980$231,100
Revenue (fixed fee)$420,000
Planned delivery margin$188,900 (45%)

Watched weekly: hours used vs % of milestones complete; forecast hours at completion; remediation rate vs the SOW assumption (5%); customer-caused delay days.

Three mechanisms, and one lightweight path

MechanismHarbor exampleApproved byCommercial effect
Written confirmation (no CO)Swap three wiki migrations for the remaining Java template, same effortCustomer PM, in the shared projectNone
Work at RiskAdapt the importer for the subsidiary's source system before CO-1 is signed (40 h), so the extra wave isn't delayedPS delivery managerBilled under CO-1 once signed
Change orderCO-1: +2,000 repositories, +6 weeks, $96,000Meridian's CIO; PS leadership and deal deskNew revenue; budget +450 h
Work ExceptionNot needed: hours stayed within budget plus CO-1——

The change order itself

Signed
Change Order: Meridian Bank SOW-4471 CO-1, subsidiary repositories
ps-plan · template: change-order · opened by Diego Martins 2027-09-13 · EM: Ben Carter · signed 2027-09-21
PSChange OrdercustomermeridianCOapproved

Original SOW: SOW-4471, fixed fee $420,000, 8,000 repositories, 18 weeks.

Change: add 2,000 repositories from Meridian's acquired subsidiary (different source system), with CI templates for its 6 most-used pipelines, migrated as wave 3b. Extend the end date by 6 weeks to 27 Dec.

Customer responsibilities added: two Meridian platform engineers for repository-owner liaison and first-line remediation from 19 Oct; CAB approval of standard migration batches.

Estimate: 450 h (importer adaptation 60, batches 100, remediation 120, templates 60, PM/TA 110). Basis: pilot productivity of 150 repos per engineer-day and the pre-scan remediation rate.

Price: $96,000 fixed fee, added to milestones M3 ($48k) and M4 ($48k).

Approvals: ☑ PS delivery manager ☑ Deal desk ☑ Customer signature · new PS opportunity created in Salesforce; Kantata project phase added (450 h).

Look at what the change order contains besides a price: the customer's added responsibilities, the basis of the estimate, how payment attaches to existing milestones, and links to the Work at Risk issue and the risk that predicted it. And the structural advantage: because a change order creates a new opportunity in the sales system and a new budget in the project system, scope can't grow without someone deciding to fund it.

Change for free, and money for nothing

Agile delivery inside a fixed price creates a tension. The customer should be able to reprioritize, but the price assumes a scope. A common answer allows the customer to swap backlog items of equivalent size at no cost, as long as the swap is made before work on the item starts. Harbor's wiki-for-template swap was exactly that. Additions that increase total size need a change order. Some agile contracts add the mirror image: the customer may end the engagement early once enough value has been delivered, paying a fraction of the remaining fee.

The forecast that nearly turned the project red

At the 18 October iteration review, Harbor had migrated 2,340 repositories out of 10,000, slightly behind its re-baselined plan of 2,500. Priyanka, Meridian's head of platform engineering, did the obvious calculation in the meeting: about 460 repositories a week over the last four weeks, 7,660 remaining, so about 17 more weeks. That meant February, long after the freeze. If that forecast were right, the project was red.

Diego's answer was that the straight line extrapolated the wrong thing. The previous four weeks had been wave 1: the most complex repositories (Payments, with its own freeze windows), batches capped at 300 per change-board approval, and only two GitLab engineers. Three things changed from 19 October, all planned when CO-1 was negotiated:

  1. Meridian's two platform engineers joined for remediation and owner liaison, doubling remediation capacity.
  2. Meridian's change board approved standard migration batches as a pre-approved standard change, allowing batches of up to 1,500 repositories when the pre-scan showed fewer than 5% needing remediation.
  3. The remaining waves were mostly small, inactive repositories, with a measured remediation rate of 2.1% rather than 3.8%.

The technical architect presented a capacity-based forecast: engineer-days available each week times measured productivity per repository type. It showed completion around 18 November, with one working day of buffer. That was thin, so Diego reported Harbor as yellow, not green, with a stated trigger: if the total on 1 November was below 4,300, he'd ask Meridian to move the subsidiary's 400 least active repositories after the freeze. On 1 November the total was 4,550. The last batch migrated on 18 November.

Did the margin survive?

At the end of iteration 6, after CO-1, the cost budget was $283.6k (2,430 hours). With $164.6k spent and 59.5% of the weighted backlog done, the cost performance index was 1.025 and the forecast cost $276.7k, against revenue of $516,000 ($420,000 plus $96,000). Forecast margin: about 46%, slightly above the 45% target.

How students practice this

In week 14, students write a change order with a basis of estimate and payment schedule, decide between written confirmation, Work at Risk, a change order and a Work Exception for a set of scenarios, and defend a capacity-based forecast against a straight-line one in front of a skeptical “customer.”

Adapted from Projects, For Real, chapters 20, 25, 36, 37 and 38. The projects, people, vendors and numbers are the book's fictional case studies, set against GitLab's publicly documented practices. Gantt Guild is not affiliated with GitLab Inc.

Operator Program · Cohort 1

Do this for free, for real

Every article here is a week of the Operator Program in miniature. In the program you write the documents yourself, in real tools, and get reviewed live.

The whole program is free. No tuition, no deposit, no income-share agreement, nothing owed if you leave.

Apply, it's free