Your best-selling product might be losing money on every unit you ship — and your accounting system would never tell you. If you allocate all of your overhead with a single rate based on labor hours or machine hours, high-volume simple jobs are quietly subsidizing low-volume complicated ones. Activity-based costing (ABC) fixes that blind spot by tracing overhead to the activities that actually consume it, so each job carries its fair share. Here is how it works, when it pays off for a small shop, and how to implement a version you can actually maintain.
Why Traditional Overhead Allocation Lies to Job Shops
Most small manufacturers use a plantwide overhead rate: add up all indirect costs for the year, divide by one base such as direct labor hours or machine hours, and apply that rate to every job. It is simple, and auditors accept it for financial statements. But it answers the wrong question. It tells you what each job costs on average, not what each job actually consumes.
Consider what lives inside your overhead pool: machine setups, purchase orders, material handling, quality inspections, programming, expediting, rework. A custom job with five setups, three engineering revisions, and a dozen inspections consumes far more of those resources than a long production run of a standard part — even if both jobs log the same machine hours. Under a single rate, both jobs get the same overhead charge per hour. The simple job looks more expensive than it is, the complex job looks cheaper than it is, and your quotes drift in exactly the wrong direction: you overprice the easy work competitors gladly steal, and you underprice the demanding work that eats your margin.
This cross-subsidy is invisible on a traditional job-cost report. The total overhead still reconciles. Every dollar is allocated somewhere. Nothing looks broken — until you notice that the jobs you win most often are the ones that leave the least profit behind.
How Activity-Based Costing Works in Five Steps
Activity-based costing replaces the single overhead pool with several activity cost pools, each assigned to jobs with its own cost driver — a measurable factor that causes the cost. The mechanics come down to five steps:
- Identify the activities that consume overhead. Walk your shop floor and office and list what people and machines actually do: set up machines, receive materials, run machines, inspect parts, program CNC jobs, handle customer change orders, ship orders.
- Assign overhead costs to each activity pool. Pull costs from your general ledger into pools. Setup labor, setup supplies, and setup-related downtime go to the setup pool. Inspection labor and calibration go to the inspection pool.
- Choose a cost driver for each pool. The driver should measure how much of the activity each job uses: number of setups for the setup pool, number of inspections for inspection, machine hours for machining, number of purchase orders for procurement.
- Compute an activity rate. Divide each pool's total cost by its total driver quantity. If setups cost $100,000 a year and you perform 200, the rate is $500 per setup.
- Assign activity costs to jobs. Multiply each job's driver usage by the activity rates and add direct materials and direct labor. The result is the job's full ABC cost.
That is the whole method. Everything else — software, time studies, allocation debates — is implementation detail.
A Job-Shop Example With Real Numbers
Suppose your shop has $300,000 of annual overhead and makes two products:
- Standard brackets: 10,000 units, one production run, 1 setup, 5,000 machine hours.
- Custom housings: 1,000 units across many small orders, 20 setups, 1,000 machine hours.
Under a traditional rate on machine hours, the rate is $300,000 divided by 6,000 hours, or $50 per machine hour. Standard gets $250,000 of overhead ($25 per unit) and Custom gets $50,000 ($50 per unit).
Now split overhead into two activity pools: $100,000 for setups (21 total) and $200,000 for machining (6,000 machine hours). The activity rates are about $4,762 per setup and $33.33 per machine hour. Assign them:
- Standard: 1 setup × $4,762 + 5,000 hours × $33.33 = about $171,429, or $17.14 per unit.
- Custom: 20 setups × $4,762 + 1,000 hours × $33.33 = about $128,571, or $128.57 per unit.
The totals still reconcile to $300,000. But the story flipped: Custom costs more than two and a half times what the traditional method reported, while Standard costs nearly a third less. If you priced Custom at $90 thinking it cost $50 in overhead plus materials and labor, every order lost money — and the more Custom work you won, the worse your year got. That is the decision ABC exists to change: reprice the complex work, push back on excessive revisions and inspections, or focus capacity on the jobs that actually pay.
Picking Activities and Cost Drivers That Fit a Small Shop
The most common failure in small-shop ABC is copying a textbook list of forty activities and drowning in data collection. You need five to eight pools that capture where your overhead actually goes. Start with this shortlist and adapt it:
| Activity pool | Typical costs in the pool | Sensible cost driver |
|---|---|---|
| Machine setup | Setup labor, fixtures, first-article scrap | Number of setups |
| Machining / production | Power, tooling, maintenance, depreciation | Machine hours |
| Programming and engineering | CAD/CAM time, revisions | Engineering hours or number of jobs |
| Procurement | Buyer time, freight-in, receiving | Number of purchase orders |
| Quality inspection | Inspector labor, calibration, test supplies | Number of inspections |
| Material handling | Forklift time, storage, kitting | Number of moves or kits |
| Order administration | Quoting, scheduling, change orders, shipping paperwork | Number of orders or change orders |
Two rules keep the list honest. First, each pool's costs should move with its driver — if inspection cost barely changes with inspection count, merge it elsewhere. Second, each pool should be big enough to matter. A pool holding 2 percent of overhead is not worth tracking separately; fold it into the closest related pool. Five well-chosen pools beat twenty precise ones that nobody updates after March.
Where the data comes from
You already have most of what you need. Setup counts live in your job travelers or scheduling system. Purchase order counts come from your accounting software. Inspection counts come from quality logs. Machine hours come from machine controllers or operator time entries. The gaps are usually engineering hours and change orders — a simple shared log, even a spreadsheet, closes them. Resist buying ABC software until a spreadsheet prototype has survived one full quarter; the discipline of collecting driver quantities by hand teaches you which pools earn their keep.
The Simplified Path: Time-Driven ABC
If even five pools feel heavy, consider time-driven ABC (TDABC), a streamlined variant developed by Robert Kaplan and Steven Anderson. Instead of surveying employees about how they split their time across activities, TDABC needs only two estimates per resource group:
- The cost per minute of capacity — total cost of a department divided by its practical capacity in minutes (total minutes minus breaks, training, and downtime).
- The minutes each activity takes — observed or estimated once, then reused.
A quoting example: if your engineering group costs $240,000 a year with 90,000 practical minutes of capacity, the rate is $2.67 per minute. A quote that needs 120 minutes of engineering time carries $320 of engineering cost. Add similar time equations for setups, inspections, and order handling, and every quote prices its true resource draw with arithmetic anyone can audit.
TDABC also exposes unused capacity directly. If your drivers assign only 70,000 of the 90,000 available minutes, the remaining 20,000 minutes — about $53,000 of cost — is idle capacity, not a cost of any job. Traditional ABC buries that in product costs; TDABC shows it as its own line, which is exactly what you need when deciding whether to chase more volume or cut resources.
Common Mistakes That Sink ABC Implementations
Tracking too many activities. Every additional pool multiplies data collection forever. Start small, prove value on one product family or one department, and expand only where decisions change.
Choosing drivers you cannot measure. "Complexity" is not a driver. "Number of engineering change orders" is. If a driver requires a new tracking system to count, pick a rougher driver you can count today — purchase order count from your accounting system beats a theoretically perfect driver nobody records.
Setting rates once and never updating them. Activity rates drift as wages, volumes, and processes change. Recalculate at least annually, and immediately after big changes like adding a shift or automating inspection. Stale rates quietly rot back into the same mispricing you set out to fix.
Using ABC costs for the wrong decisions — or ignoring them for the right ones. ABC product costs inform pricing, quoting, product mix, and make-or-buy choices. They do not replace GAAP inventory valuation, and using them to punish shop-floor teams for "expensive" setups they do not control will kill cooperation. Keep the purpose visible: better quotes and a better mix, not blame.
Letting perfect be the enemy of directional. ABC estimates will never be exact — overhead allocation always involves judgment. A cost of $128 per unit that is directionally right beats a traditional $50 that is precisely wrong. Decide based on the ranking of jobs by profitability, which is robust even when individual rates are approximate.
When ABC Is Overkill (and What to Do Instead)
ABC pays best when overhead is large relative to direct costs, jobs vary widely in complexity, and you compete on quoted price — the classic job-shop profile. It pays worst when overhead is small, every job looks alike, or you sell at market prices you cannot influence. A shop running one product on two machines does not need activity pools; it needs a clean traditional rate and good cost control.
There is also a middle path. If full ABC feels like too much, try these lighter moves first:
- Split one pool off. If setups are your biggest distortion, create a setup rate and leave everything else plantwide. One extra rate captures most of the benefit in many shops.
- Add a quoting surcharge for complexity drivers. Charge per setup, per revision, and per expedite on quotes even if your books stay traditional. The quote reflects reality while the ledger stays simple.
- Run ABC as a periodic study, not a system. Recompute activity costs once a year in a spreadsheet to check pricing and mix, without rewiring daily bookkeeping.
Any of these beats quoting blind. The goal was never accounting elegance — it is knowing which jobs to win.
Track Activity Costs in Your Books, Not Just a Spreadsheet
An ABC study that lives only in a spreadsheet decays within months, because nobody ties it back to the ledger. The fix is structural: set up your chart of accounts so overhead posts into categories that mirror your activity pools — setup labor, inspection supplies, programming time, freight-in — instead of one generic manufacturing overhead account. When each pool maps to real accounts, your monthly close produces the pool totals automatically, and updating activity rates becomes a routine calculation rather than an archaeological dig.
The same discipline applies to driver quantities. Log setups, inspections, and change orders against job numbers the way you already log labor hours, and reconcile the counts monthly the way you reconcile the bank account. Clean activity data plus clean books turn ABC from a one-time consulting exercise into a standing management report — one that tells you, every month, which jobs earned their keep.
Keep Your Job Costs Organized From Quote to Close
As you sharpen your quoting with activity-based costing, maintaining clear financial records for every job is essential — pool totals that reconcile to the ledger are what separate a trusted costing system from an optimistic spreadsheet. Beancount.io provides plain-text accounting that gives you complete transparency and control over your financial data, so your activity pools, job costs, and inventory postings stay version-controlled and auditable. Get started for free and see why developers and finance professionals are switching to plain-text accounting.





