You just finished a $78,000 commercial electrical project.
The customer paid in full. No complaints. The work passed inspection on the first try.
Six weeks later, you’re closing the books for the month and something doesn’t add up.
You open the job costing report. Your stomach drops.
Project revenue: $78,000 Actual costs: $81,200 Profit: -$3,200
You lost money on a project you thought was profitable.
How did this happen? You estimated carefully. You tracked hours. You watched the budget.
Here’s the uncomfortable truth: Most contractors discover they lost money on a job 4-8 weeks after completion.
By then, it’s too late to fix it. The crew’s moved on. The materials are installed. The invoice is paid.
All you can do is figure out what went wrong and hope you don’t repeat it on the next job.
But here’s what actually happens: You repeat the same mistakes on the next 10 jobs because you don’t know what went wrong on this one.
The result? Profit margins that should be 18-25% end up at 8-12%. Or worse—negative.
You’re working 60-hour weeks, completing projects, getting paid… and going broke.
I’ve analyzed job costing data from 200+ contracting companies. The same seven mistakes appear over and over.
Good news: Once you know what they are, they’re fixable.
Better news: Fixing even 2-3 of these mistakes can recover 5-10% in profit margins—tens of thousands of dollars annually.
Let me show you exactly where your profit is disappearing.
Mistake #1: Not Tracking Small Purchases (The $50 Death by a Thousand Cuts)
The scenario:
Your foreman stops at Home Depot on the way to the job site:
- Box of wire nuts: $12
- Conduit connector: $8
- Electrical tape: $6
- Total: $26
He pays with his personal credit card. Plans to submit an expense report later.
But:
- He forgets to get a receipt
- Or gets the receipt but loses it
- Or submits it 3 weeks later with 8 other receipts
- Or never submits it at all
This happens 4-6 times per week across your team.
The math:
- Small purchases per week: 5 trips × $30 average = $150
- Annual small purchases: $150 × 52 weeks = $7,800
How much of this gets captured in job costing?
In my experience analyzing contractor data: 40-60% at best.
Missing from your job costs: $3,120 – $4,680 annually
That’s money spent on jobs that doesn’t show up in your job cost reports.
Your job costing report says:
- Material costs: $22,000
- Actual material costs: $25,100
- Hidden cost variance: $3,100 (12% underreported)
Why this kills margins:
You estimated the job using complete material costs.
But your job cost tracking only captures 60% of material purchases.
So your reports show:
- Estimated materials: $25,000
- Actual materials (reported): $22,000
- Variance: -$3,000 (looks like you’re under budget!)
Reality:
- Actual materials (including unreported): $25,100
- Real variance: +$100 (you’re actually over budget)
You think you’re running lean. You’re actually bleeding money.
Real example from Bright Future Electric (18 employees):
Tracked all material purchases for 90 days:
- Large purchases (invoiced to company): 85% captured in job costing
- Medium purchases ($50-200): 55% captured
- Small purchases (<$50): 22% captured
Impact over 90 days:
- Small purchases made: $6,400
- Small purchases captured in job costing: $1,408
- Missing from job costs: $4,992
Extrapolated annually: $19,968 in untracked material costs
For a company doing $2.8M in revenue with target 20% margins:
- Target profit: $560,000
- Hidden material costs: $19,968
- Actual profit reduction: 3.6%
The fix:
- Mobile expense capture: Field teams photograph receipts immediately and assign to project via mobile app
- Company credit cards: Issue project-specific cards that auto-categorize purchases
- Daily purchase check-in: 2-minute daily huddle: “Did anyone buy materials yesterday?”
- Vendor integrations: Direct feeds from supply house purchases to job costing
Sitewise’s mobile field operations includes instant expense capture—photograph receipt, select project, done. Material purchase appears in job costing within seconds.
Mistake #2: Labor Burden Buried in Overhead (Your $35/Hour Electrician Actually Costs $52/Hour)
What you think labor costs:
Journeyman electrician hourly rate: $35/hour
What labor actually costs:
- Base wage: $35.00/hour
- Employer FICA (7.65%): $2.68/hour
- Federal unemployment (0.6%): $0.21/hour
- State unemployment (~2.5%): $0.88/hour
- Workers comp (varies, ~12% for electrical): $4.20/hour
- General liability insurance: $1.85/hour
- Health insurance: $4.50/hour
- Paid time off (10 days): $1.35/hour
- Tools and equipment: $0.80/hour
- Training and certifications: $0.45/hour
- Vehicle/truck allocation: $1.25/hour
True labor cost: $52.17/hour
That’s 49% more than the base wage.
The mistake:
Most contractors track labor costs at base wage rates:
In your job costing system:
- Electrician worked 40 hours on Project A
- Labor cost recorded: 40 hours × $35 = $1,400
Actual labor cost for Project A:
- True cost: 40 hours × $52.17 = $2,087
- Hidden cost: $687 (49% underreported)
Why this kills margins:
You estimated the job using true labor costs ($52/hour).
But your job costing tracks wage costs ($35/hour).
Your job cost report shows:
- Estimated labor: $8,000
- Actual labor (wage only): $5,400
- Variance: -$2,600 (looks profitable!)
Reality:
- Actual labor (true cost): $8,020
- Real variance: +$20 (barely breaking even)
Compounded across all jobs:
If you do $2.5M in revenue with 35% labor costs:
- Reported labor costs: $875,000 (wage only)
- True labor costs: $1,303,750 (with burden)
- Missing from job costing: $428,750
That $428,750 is getting buried in “overhead” instead of allocated to specific jobs.
Result: You can’t see which jobs are actually profitable.
Real scenario from Summit Electrical (24 employees):
Analyzed 6 months of job costing data:
Jobs that appeared profitable (using wage-only costs):
- 18 commercial projects
- Average apparent profit margin: 22%
Same jobs with true labor costs (including burden):
- 11 projects still profitable (actual margin: 15%)
- 7 projects losing money (average loss: -4%)
Impact:
- Original profit estimate: $287,000
- Actual profit after burden allocation: $163,000
- Profit overstatement: $124,000 (43% overestimated)
They were making decisions based on false profitability data.
The fix:
Configure job costing to use burdened labor rates:
- Calculate true all-in labor cost per employee/role
- Update job costing system to use burdened rates automatically
- Set different burden rates for different roles (apprentice vs. journeyman vs. foreman)
- Review and update burden calculations quarterly
Burden rate by role (example):
- Apprentice: $28/hour base → $38/hour true cost (36% burden)
- Journeyman: $35/hour base → $52/hour true cost (49% burden)
- Foreman: $45/hour base → $68/hour true cost (51% burden)
Sitewise’s job costing module automatically applies configurable labor burden rates. Set it once, accurate costs forever.
Mistake #3: Forgetting Unbillable Time (Your Crew Worked 45 Hours, You Billed 38)
The scenario:
Monday morning, 7:00 AM:
- Crew arrives at shop
- Loads truck with materials
- Drives 45 minutes to job site
- Arrives at 8:30 AM
- Starts billable work
End of day, 4:00 PM:
- Stops billable work
- Cleans up job site (30 minutes)
- Drives back to shop (45 minutes)
- Unloads unused materials (15 minutes)
- Updates paperwork (10 minutes)
- Leaves at 6:10 PM
Timesheet shows:
- Clock in: 7:00 AM
- Clock out: 6:10 PM
- Total hours: 11.17 hours
Job costing captures:
- Billable time on project: 7.5 hours (8:30 AM – 4:00 PM)
- Missing time: 3.67 hours
The unbillable time breakdown:
- Morning truck loading: 0.5 hours
- Drive to site (morning): 0.75 hours
- Drive from site (evening): 0.75 hours
- Site cleanup: 0.5 hours
- Unloading/paperwork: 0.42 hours
- Lunch (unpaid but still payroll): 0.5 hours
- Total unbillable: 3.42 hours (31% of total time)
For a 2-person crew:
- Total hours worked: 22.34 hours
- Billable hours captured: 15 hours
- Missing from job costing: 7.34 hours
At $52/hour true cost: $381.68 in uncaptured labor costs per day
Why this kills margins:
You estimated the job assuming 90% billable time efficiency.
But you’re only capturing direct work time in job costing (68% efficiency).
The gap (22%) disappears into overhead.
Over one month (20 work days):
- Uncaptured labor per day: $381.68
- Monthly uncaptured: $7,633.60
- Annual uncaptured: $91,603
That’s $91,603 in labor costs not allocated to jobs.
Where does it go?
Into “overhead,” making all your jobs look more profitable than they actually are.
Real example from Apex Electric (15 employees, 8 field workers):
Conducted time study over 4 weeks:
Time allocation by category:
- Direct job work: 62%
- Drive time: 18%
- Material pickup/returns: 8%
- Equipment maintenance: 5%
- Administrative (paperwork, meetings): 7%
Only capturing in job costing: 62% (direct work)
Impact on profitability:
- Estimated labor efficiency: 85%
- Actual billable capture: 62%
- Hidden labor gap: 23%
For $2.2M in revenue:
- Estimated labor costs (at 85% efficiency): $660,000
- Actual labor costs (at 62% efficiency): $906,450
- Profit overstatement: $246,450
The fix:
- Track ALL time, not just billable time:
- Drive time allocated to projects
- Shop time allocated to “overhead project”
- Material pickup time allocated to projects
- Use efficiency factors in estimating:
- If you capture 65% billable time, estimate at 65%
- Don’t pretend you’ll hit 90% if you never do
- GPS time tracking:
- Automatic clock-in when arriving at job site
- Automatic clock-out when leaving
- Travel time captured automatically
- Weekly efficiency reports:
- Billable % by crew
- Identify patterns and improvement opportunities
Sitewise’s GPS time tracking automatically captures drive time, job site time, and shop time—giving you complete labor cost visibility.
Mistake #4: Change Orders Buried in Original Budget (That $8,000 Addition Looks Like Cost Overrun)
The scenario:
Original project scope: $45,000 to wire new office building
Week 3 of project:
- Customer requests additional circuits for future server room
- You provide change order quote: $8,000
- Customer approves
- Crew completes additional work
Your job costing system shows:
- Original budget: $45,000
- Actual costs: $51,200
- Variance: +$6,200 (13.8% over budget – red flag!)
What actually happened:
- Original scope costs: $44,100 (under budget by $900)
- Change order scope costs: $7,100 (under budget by $900)
- Total project: $1,800 under combined budget
But your reporting doesn’t show this.
Why this kills margins (and decision-making):
Problem #1: Can’t see true project performance
Looking at job cost report, you think:
- “We’re way over budget on this office project”
- “What went wrong?”
- “We need to bid higher next time”
Reality: Original scope performed perfectly. Change order performed perfectly.
Problem #2: Change order profitability is invisible
- Did you make money on the change order?
- Was the $8,000 change order price adequate?
- Should you price change orders differently?
You have no idea because change order costs are mixed with original scope costs.
Problem #3: Historical data becomes useless
When estimating the next office building project:
- Look at historical costs for similar projects
- See this project cost $51,200 for “similar scope”
- Inflate next estimate to avoid “overruns”
- Price yourself out of competitive bids
All because you couldn’t separate base scope from changes.
Real example from Mountain View Construction (28 employees):
Reviewed 40 commercial projects from previous 18 months:
Projects with change orders: 34 projects (85%)
How change orders were tracked:
- Separate change order line items: 8 projects (24%)
- Mixed into original budget: 26 projects (76%)
For the 26 projects with mixed change orders:
- Average apparent cost overrun: 11.4%
- Actual overrun (after separating change orders): 2.1%
Impact on decision-making:
- Estimated next 15 projects with 11% buffer to avoid “overruns”
- Lost 4 bids due to high pricing
- Lost revenue: $280,000
The fix:
- Track change orders as separate cost centers:
- Each change order gets unique identifier
- Costs logged against change order, not original project
- Separate P&L for base scope vs. changes
- Change order dashboard:
- Total change order revenue by project
- Change order profitability
- Change order frequency and patterns
- Automatic change order tracking:
- When change order is approved, system creates new cost bucket
- Team selects “Change Order #3” when logging time/materials
- Reporting separates base vs. change costs
Proper job cost reporting structure:
Project: Office Building Electrical
├─ Base Scope
│ ├─ Budget: $45,000
│ ├─ Actual: $44,100
│ └─ Variance: -$900 (2% under)
├─ Change Order #1: Server Room Circuits
│ ├─ Budget: $8,000
│ ├─ Actual: $7,100
│ └─ Variance: -$900 (11.3% under)
└─ Project Total
├─ Budget: $53,000
├─ Actual: $51,200
└─ Variance: -$1,800 (3.4% under) Sitewise’s change order management automatically creates separate cost tracking for each change order—giving you clear visibility into base scope vs. changes.
Mistake #5: Indirect Costs Ignored Completely (Who Pays for the Project Manager’s Time?)
The scenario:
Project Manager spends 15 hours on a project:
- Initial site visit and assessment: 2 hours
- Creating estimate: 3 hours
- Coordinating with customer: 2 hours
- Scheduling crews: 2 hours
- Material ordering: 1.5 hours
- Progress monitoring: 2 hours
- Customer communication during project: 1.5 hours
- Closeout and final billing: 1 hour
Total PM time: 15 hours × $65/hour = $975
Captured in job costing: $0
Why? PM time is “overhead,” not direct labor.
But wait—is it really overhead?
The PM was working specifically on this project. That time has value. It’s a real cost of delivering the project.
The problem:
If you don’t allocate PM time to projects:
- Job profitability is overstated by the cost of PM time
- You can’t see which projects require more PM support (and should be priced differently)
- PM bandwidth becomes a hidden constraint (you don’t know capacity limits)
Common indirect costs ignored in job costing:
- Project manager time: $975
- Estimator time (if not the PM): $195 (3 hours × $65)
- Office admin time (billing, paperwork): $120 (3 hours × $40)
- Owner time reviewing/approving: $200 (2 hours × $100)
- Permit fees and processing: $450
- Equipment depreciation allocation: $280
- Total indirect costs: $2,220
For a $45,000 project:
- Direct costs captured: $38,900
- Indirect costs (ignored): $2,220
- True total costs: $41,120
- Profit overstatement: $2,220 (5% of revenue)
Why this kills margins:
Scenario A: You track only direct costs
Job cost report shows:
- Revenue: $45,000
- Direct costs: $38,900
- Profit: $6,100 (13.6% margin)
Scenario B: You track indirect costs too
Complete cost report shows:
- Revenue: $45,000
- Direct costs: $38,900
- Indirect costs: $2,220
- Profit: $3,880 (8.6% margin)
Same project. 5% margin difference.
Multiply across all projects and you can’t figure out why actual company profitability (8%) is so much lower than project profitability (13%).
Real example from Peterson Electric (22 employees):
Tracked all costs (including indirect) for 3 months:
Projects showing >15% margin (direct costs only): 24 projects
Same projects including indirect costs:
- Still >15% margin: 9 projects (38%)
- 10-15% margin: 11 projects (46%)
- <10% margin: 4 projects (17%)
Impact:
- Reported average margin: 16.2%
- Actual average margin (with indirect): 11.8%
- Margin overstatement: 4.4%
For $3.2M in annual revenue:
- Profit overstatement: $140,800
The fix:
- Track PM time by project:
- PMs log time against specific projects
- Estimating time allocated to project
- Customer service time allocated to project
- Allocate permits and fees to projects:
- Don’t bury in general overhead
- Track against specific jobs
- Equipment cost allocation:
- Track which equipment used on which projects
- Allocate depreciation and maintenance costs
- Standard indirect cost rates:
- Calculate typical PM time as % of project value
- Apply standard rate to all projects
- Review quarterly and adjust
Typical indirect cost allocation rates:
- Small projects (<$20K): 8-12% of project value
- Medium projects ($20K-75K): 5-8% of project value
- Large projects (>$75K): 3-5% of project value
Sitewise’s comprehensive job costing tracks both direct and indirect costs—giving you complete profitability visibility.
Mistake #6: Learning About Problems After the Job Is Done (Real-Time Visibility Matters)
The traditional job costing timeline:
Week 1-4: Crew working on project
- Logging hours
- Buying materials
- Making progress
Week 5: Project complete, crew moves to next job
Week 6: Office processes timesheets and vendor bills
Week 7: Accounting enters everything into system
Week 8: Month-end close, job cost reports generated
Week 9: You finally see the job cost report
Discovery: Project lost $4,200
The problem:
By week 9, the job is finished. Crew is gone. Materials are installed. Customer is happy.
What can you do about the $4,200 loss?
Nothing.
You can only:
- Figure out what went wrong
- Hope you don’t repeat it next time
- Feel frustrated
What if you’d known in Week 2?
Week 2, Wednesday morning:
You check real-time job costing dashboard:
- Budget: $45,000
- Costs to date: $18,200
- % complete (estimated): 30%
- Projected final cost: $60,667
- Projected overrun: $15,667 🚨
Now you can actually do something:
Option 1: Investigate immediately
- Why are costs running high?
- Are we working inefficiently?
- Did material prices increase?
- Are we doing out-of-scope work?
Option 2: Course correct
- Optimize remaining work
- Adjust crew assignments
- Tighten material management
- Discuss potential change order if scope expanded
Option 3: Communicate with customer
- If scope expanded, get change order approved NOW
- Explain situation while you can still solve it
- Maintain relationship by being proactive
Real example from Comfort Zone HVAC (12 employees):
Before real-time job costing (delayed visibility):
Completed 8 commercial HVAC projects in 6 months:
- 2 projects significantly over budget (discovered after completion)
- Overruns totaling: $28,400
- Ability to recover costs: $0 (jobs complete, customers paid)
After implementing real-time job costing:
Next 8 commercial projects with live cost tracking:
- 3 projects trending over budget (detected during work)
- Actions taken:
- 1 project: Identified out-of-scope work, obtained $8,200 change order
- 1 project: Optimized labor allocation, brought back on budget
- 1 project: Customer-requested changes, negotiated $5,600 additional billing
Results:
- Projected overruns: $24,600
- Actual overruns: $4,800
- Recovered through real-time action: $19,800
The timing made the difference.
The fix:
Real-time job costing requires:
- Daily cost updates:
- Mobile time tracking (hours logged immediately)
- Mobile expense capture (materials logged same day)
- Automated vendor bill imports
- Next-day dashboard updates
- Budget vs. actual alerts:
- Automatic notifications when costs exceed thresholds
- Daily digest for project managers
- Weekly summary for ownership
- Trend analysis:
- Project to completion based on burn rate
- Early warning when costs trending over budget
- Comparison to similar historical projects
- Mobile access:
- PMs and foremen can check costs from job site
- Make decisions in real-time
- No waiting for week-end reports
Sitewise’s real-time dashboards update hourly as timesheets and expenses are logged—giving you live visibility into every project.
Mistake #7: Not Tracking Profitability by Project Type (All Jobs Are Not Created Equal)
Your annual summary:
- Total revenue: $2.8M
- Total costs: $2.31M
- Profit: $490,000
- Margin: 17.5%
Looks good! But this tells you nothing about where the profit came from.
What if you broke it down?
Commercial tenant improvements (40% of revenue):
- Revenue: $1,120,000
- Costs: $896,000
- Profit: $224,000
- Margin: 20%
Residential service calls (15% of revenue):
- Revenue: $420,000
- Costs: $336,000
- Profit: $84,000
- Margin: 20%
Industrial maintenance contracts (25% of revenue):
- Revenue: $700,000
- Costs: $595,000
- Profit: $105,000
- Margin: 15%
New construction (20% of revenue):
- Revenue: $560,000
- Costs: $483,000
- Profit: $77,000
- Margin: 13.8%
Now you can see:
- Commercial TI and residential service are your most profitable work (20% margins)
- Industrial contracts are decent (15% margins)
- New construction is dragging down overall profitability (13.8% margins)
Strategic questions this raises:
- Should you do more commercial TI and service work?
- Should you price new construction higher or exit that market?
- Are industrial contracts worth the effort at 15%?
- What’s your capacity for the highest-margin work?
Without project type tracking, you’d never know.
Deeper analysis reveals even more:
Within commercial TI:
- Office buildings: 24% margin
- Retail spaces: 18% margin
- Restaurants: 12% margin (equipment complexity kills efficiency)
Within residential service:
- Emergency calls: 28% margin (premium pricing)
- Scheduled maintenance: 16% margin
- Panel upgrades: 14% margin
Within new construction:
- Custom homes: 18% margin
- Production homes: 8% margin (volume pricing, tight competition)
- Multi-family: 15% margin
Real example from Riverside Electric (24 employees):
Before project type tracking:
- Overall margin: 14.2%
- No visibility into which work types were profitable
- Bidding strategy: “Bid everything that comes along”
After implementing project type analysis (12 months):
Findings:
- Highest margin: Commercial service (26%)
- Decent margin: Office TI (19%), Custom residential (17%)
- Losing money: Production home wiring (3%), Industrial new construction (-2%)
Strategic decisions:
- Stopped bidding production home work entirely
- Exited industrial new construction
- Doubled sales effort on commercial service
- Hired dedicated service coordinator
Results (next 12 months):
- Revenue: $3.6M (down from $3.9M, -7.7%)
- Profit: $594,000 (up from $468,000, +27%)
- Margin: 16.5% (up from 12%)
Did less revenue. Made more money.
Owner’s reflection:
“For 8 years, we chased every job. Thought we needed volume. Turns out 30% of our work was barely breaking even or losing money. Cutting that 30% and focusing on profitable work was the best decision we ever made.”
The fix:
- Tag every project with type/category:
- Work type (TI, new construction, service, maintenance)
- Customer type (commercial, residential, industrial)
- Project size bracket
- Geographic region if relevant
- Run profitability reports by category:
- Monthly P&L by project type
- Identify patterns and trends
- Compare to overall company margins
- Use data to drive strategy:
- Focus sales on high-margin work
- Price low-margin work higher or exit
- Optimize operations for profitable work types
- Allocate best crews to best work
- Track over time:
- Are margins improving in focus areas?
- Are you successfully shifting mix?
- What new profitable opportunities emerge?
Sitewise’s analytics and reporting includes profitability by project type, customer type, and custom categories—helping you identify your most profitable work.
The Cost of These Mistakes Combined
Let’s add up what these 7 mistakes cost a typical $2.5M electrical contractor:
| Mistake | Annual Cost |
|---|---|
| #1: Untracked small purchases | $19,000 |
| #2: Labor burden not allocated | $124,000 (profit overstatement) |
| #3: Unbillable time ignored | $91,000 |
| #4: Change orders buried | $0* (decision-making cost) |
| #5: Indirect costs ignored | $140,000 (profit overstatement) |
| #6: Delayed visibility | $28,000 (unrecovered overruns) |
| #7: No project type analysis | $0* (opportunity cost) |
Direct costs: $258,000
Hidden costs (profit overstatement): $264,000
Total impact: $522,000
*Mistakes #4 and #7 have massive strategic costs (bad pricing decisions, pursuing wrong work) but are harder to quantify precisely.
What fixing these mistakes looks like:
Summit Electrical (28 employees, $4.2M revenue):
Before (delayed, incomplete job costing):
- Reported margins: 16-18%
- Actual company profitability: 9.2%
- Mystery: Where’s the missing 7-9%?
After implementing comprehensive real-time job costing:
Year 1 discoveries:
- Untracked material costs: $31,200
- Unburdened labor costs: Underreporting by $187,000
- Indirect costs not allocated: $168,000
- Total hidden costs: $386,200
Year 1 actions:
- Implemented mobile expense capture (recovered $28,000 in previously untracked costs)
- Updated labor rates to include burden (real margins now visible)
- Allocated PM time to projects (accurate project costs)
- Real-time dashboards caught 4 overruns early (saved $37,000)
Year 2 strategic changes (based on project type analysis):
- Identified commercial service as highest margin (24%)
- Exited low-margin production residential (6% margin)
- Focused on commercial and high-end residential (18-24% margins)
Results (Year 2):
- Revenue: $4.1M (slight decrease)
- Actual profit: $738,000 (was $386,000 in Year 1)
- Margin: 18% (up from 9.2%)
Doubled profitability by fixing job costing.
The Bottom Line: You Can’t Manage What You Don’t Measure Accurately
Every contractor tracks something.
The question is: Are you tracking the right things accurately enough to make good decisions?
If you’re making any of these 7 mistakes, the answer is no.
Good news: These are all fixable.
Better news: Fixing them doesn’t require working harder—it requires better systems.