Skip to content

Walking a Dev Shop Owner Through Fixed-Bid Margin

Sample agency dashboard walkthrough
Industry
News

Built for: Owners of web and software development shops doing $3M to $20M a year that run on Teamwork and QuickBooks, selling a mix of fixed bids, time and materials and support retainers.

What it answers: Which kind of work actually makes money once the team's hours are counted, which builds are running over before the last invoice shows it, whether contractors are really cheaper than hiring, and what to change in pricing.

See it live: Development shop demo · a made-up company with invented numbers

Every dev shop owner I've worked with has a version of the same feeling. Revenue is up, the team is busy, and somehow the year doesn't leave what it should. When I ask where the margin went, the answer is usually "the fixed bids, probably." Probably is the problem. QuickBooks can't tell you, because QuickBooks doesn't know where anyone's hours went. Teamwork does.

Here's how I'd walk an owner through it, using a sample dashboard we built for a made-up shop called Glimmerstack. It builds portals, ordering apps and online stores with about 30 people on payroll and an offshore contractor team. It runs its projects in Teamwork Projects, its support in Teamwork Desk, its books in QuickBooks, payroll in Gusto and sales in HubSpot. Glimmerstack billed $8.5M in the last 12 months, up 34%.

The answer at the top of the page

QuickBooks alone, then QuickBooks plus Teamwork

What each kind of work keeps, two ways

The grey bars are QuickBooks alone. Payroll is one line in the books, so the best it can do is spread it by revenue, and fixed bids and T&M both look like they keep about 34 cents of every dollar.

The coloured bars add Teamwork. Every timelog is joined to what that person costs, from Gusto: salary, taxes and benefits over the hours they're actually available. Now T&M keeps 55 cents, retainers 51 and fixed bids 30. Rent, the sales team, owners' pay and time between projects take about 30 cents, so a typical fixed bid pays for itself and nothing else.

October payroll posted by Teamwork time cards

This doesn't live in a spreadsheet. Each month the Teamwork time cards post payroll to the right customer and project in QuickBooks through the API, so QuickBooks' own profit by customer starts telling the truth. The same timelogs show the leak: about 9,700 hours given away in a year, 8,900 of them past a build's estimate.

Find the builds that are running over

Bid vs actual, project by project

This is the view I'd want on every dev shop owner's desk: the estimated time on each build's Teamwork tasks, the hours logged and the hours still to come. Fourteen of the 19 builds ran 20% or more over. The extra hours cost about $1.0M at team cost, on work bid at a 45 to 50% margin.

The worst is Grisholm Equipment's dealer portal, priced at $125 an hour to win the account and now 45% over. QuickBooks' profit by customer shows it keeping 76 cents of every dollar, because that report carries the contractor bills and none of the payroll. With the team's time it finishes at 20 cents. The first 80% was billed on the planned calendar whatever the hours, and the last $112K waits on a launch six months late.

One project, two audiences

The live builds in Teamwork Projects, team view

Open a build and you see its tasklists. On Grisholm the overrun isn't spread evenly: 705 hours went to change requests nobody estimated or billed, and QA and launch is 56% over.

Your team sees all 155 tasks with hours and cost. Flip to the client view and Grisholm sees 18: milestones, approvals and the two things waiting on them. No hours, no cost, nothing marked internal.

The comment thread on a Teamwork task

Comments work the same way. The client asks for one more feature on the dashboard row. The owner's note ("we're 45% over, put it on a change order") stays inside Glimmerstack. The PM's reply goes back to the client on the same Teamwork task. Nobody copies anything between systems.

Billed against earned

Billed against earned on every live build

Invoices come from QuickBooks, earned work from Teamwork hours. On the newest builds Glimmerstack has billed about $200K ahead of the work. On the late ones it has done about $180K more than it has billed. The number to watch is the $650K of final invoices that only go out at launch, $270K of it on builds already past their launch date.

Are contractors cheaper?

Cost per delivered hour, and contractor share against overrun

The invoice says $46 an hour against about $84 for the team. Count a lead's review time and the hours that redo work, and a delivered contractor hour on a build costs about $80 against $91. Still cheaper, by much less than the invoice says, and the builds with more contractor hours ran further over.

October's contractor bill matched to Teamwork

Their bill gets checked before anyone pays it. Each line is matched to the hours logged in Teamwork and the PO set on the Teamwork project. Seven of 12 lines were approved automatically. Four were over their PO, all on builds running over, and the PM approves those in the same view. One billed 14 hours nobody logged, so it waits.

Free hours against the weighted HubSpot pipeline

Don't hire ahead of the pipeline. As signed work finishes the team has about 1,800 free hours a month by spring, and the weighted HubSpot pipeline fills about 60% of that.

Pick the moves

Support retainers from Teamwork Desk

Teamwork Desk shows the six smallest retainers using about half again the hours they pay for, so they earn about $100 an hour worked against about $150 on the three biggest.

What each move does, next 12 months

  • Bill scope changes as change orders. Recovering a quarter of the overrun hours adds about $360K of profit.
  • Don't sign phase 2 as another fixed bid. As T&M it adds about $360K, but with no deposit the low point of cash drops about $180K.
  • Price the risk in. A 15% contingency adds about $180K, even after losing about one bid in eleven.
  • Set a $5K retainer floor and bill overage. About $80K, even if two small clients leave.
  • Don't hire to replace contractors for the margin. Two seniors cost about $90K more next year. Hire them to hit launch dates.

Pull the first three together and fixed bids keep about 42 cents of every dollar instead of 31.

What it takes to get this on your own Teamwork site

SPRCHRGR has run on Teamwork since 2023, and we have a full API connection to Teamwork Projects and Teamwork Desk, alongside QuickBooks, Gusto and HubSpot. On a real engagement this page reads your own Teamwork site: estimates, timelogs, tasklists, tickets and comments. Labor posts to QuickBooks by customer and project, contractor bills are matched to Teamwork before they're paid, and comments go back onto the right Teamwork task. Your team keeps working where it works now.

That's CFOptimize for Agencies, and it starts with a free project margin review on your own numbers. Book your free project margin review.

Mark

Glimmerstack is a made-up company, and every client, project, task, ticket, comment, contractor firm, person and number in the dashboard and this post is invented. QuickBooks, Teamwork, Gusto and HubSpot are real products, named as the tools a shop like this runs on; none of them is connected to the sample. The overrun rule, lost bids, change-order recovery and retainer losses are rules of thumb, not forecasts.