How to build a TDABC model: a 7-step guide
Build a time-driven activity-based costing model from scratch. A 7-step guide with a fully worked example, real numbers and a whale curve. No surveys needed.
Time-driven activity-based costing (TDABC) is the fastest credible way to learn what each customer, order and product really costs to serve. Robert Kaplan and Steven Anderson introduced it in Harvard Business Review in 2004, then expanded it in their 2007 book, precisely because the classic activity-based costing (ABC) of the 1980s had become too slow, too costly and too political to maintain. TDABC replaces hundreds of activity surveys with just two parameters per resource group, and it scales to thousands of transactions without breaking.
This guide shows you how to build a TDABC model from the ground up, in seven steps, using a single illustrative company we call CaP (short for Cost and Profitability). Every table below carries real, internally consistent numbers so you can see exactly how the arithmetic flows, from raw resource cost all the way to a whale curve that ranks every customer by profit. The figures for CaP are illustrative and are used here only to demonstrate the method. If you want the method itself derived from first principles before you build anything, the full reference is time-driven activity-based costing, worked out in full.
Building a TDABC model takes two parameters and seven steps. First you find the capacity cost rate for each resource group (its total cost divided by the practical capacity it can actually deliver, usually about 85% of theoretical capacity). Then you write time equations that estimate how many minutes each transaction consumes. Multiply minutes by the rate, sum across every order, and you have the true cost to serve each customer and product. Rank customers by profit and you get a whale curve that reveals which accounts create value and which destroy it. With clean transactional data, a first model is built in days to weeks, not the months that classic ABC required.
Before you start: TDABC needs only two parameters
The genius of the Kaplan and Anderson method is that you do not need to interview staff about how they split their time across activities. You need only two things per resource group:
1. The capacity cost rate - the cost of supplying one minute of available capacity. 2. The time equations - simple formulas that estimate how many minutes a given transaction consumes, based on its characteristics.
What data you need (and what you do not):
- Total cost of each resource group (from the general ledger or budget).
- The quantity of resource supplied (people, hours, vehicles) so you can estimate practical capacity.
- Transactional data: orders, order lines, deliveries, returns, cases, service touches. Most of this already lives in your ERP, WMS or CRM.
- You do not need employee surveys, time sheets filled in by hand, or a workshop where everyone guesses their percentages. That is the old ABC, and it is the reason most ABC models were abandoned.
Map your resource groups and their cost
Start by grouping the resources that do the work into a small number of resource groups (sometimes called resource pools). A resource group is a set of people and assets that share roughly the same capacity cost and perform a coherent set of tasks. Keep the number small. Three to a dozen is normal; hundreds is a warning sign.
Pull the total annual cost of each group from your ledger. Include the fully loaded cost: salaries, on-costs, supervision, the equipment and space those people use, depreciation and a fair share of support. The goal is that the sum of your resource groups equals the operating cost you are trying to explain.
CaP is a mid-size B2B distributor with revenue of EUR 4,500,000 across 10 client accounts. Its cost to serve those clients is organised into three resource groups.
Six people and their equipment do that work: two on the pick face, three drivers with their vehicles, and one person covering customer service and account management. Supervision, racking, vehicle leases and warehouse space sit inside these three cost pools, because what you want at the end is a fully loaded cost for every minute of front-line capacity.
| Resource group | Annual cost (EUR) | What it includes |
|---|---|---|
| Warehouse and picking | 160,000 | Pickers, packers, supervision, racking, handling equipment, warehouse space |
| Delivery (drivers and fleet) | 232,500 | Drivers, vehicle leases, fuel, maintenance, insurance, route planning |
| Customer service and account management | 60,000 | Account managers, customer service desk, order chasing, claims handling |
| Total | 452,500 |
three resource groups totalling EUR 452,500 of serving cost to explain.
Calculate practical capacity (the 85% rule)
This is the step most people get wrong, and getting it right is the heart of TDABC. You must divide cost not by the time people theoretically could work, but by the time they can practically deliver useful work.
A full-time employee is paid for, say, 8 hours a day, but nobody picks orders or drives for 8 productive hours. There are breaks, training, meetings, set-up, cleaning, arrivals and departures. Kaplan and Anderson recommend taking practical capacity at roughly 80% to 85% of theoretical capacity for people, and around 85% for equipment, to leave realistic room for downtime and maintenance.
CaP uses practical capacity = 85% of theoretical.
CaP counts a full resource-year at 110,000 theoretical minutes. Two pickers give 220,000, three drivers give 330,000, and one service and account manager gives 110,000. Apply the 85% rule to each.
| Resource group | Theoretical capacity (min/yr) | x 85% = Practical capacity (min/yr) |
|---|---|---|
| Warehouse and picking | 220,000 | 187,000 |
| Delivery (drivers and fleet) | 330,000 | 280,500 |
| Customer service and account management | 110,000 | 93,500 |
Why not 100%? Because if you divide cost by theoretical capacity you will understate the true cost of every minute, and the "missing" cost vanishes. Dividing by practical capacity does something powerful: any capacity you supply but do not use shows up explicitly as the cost of unused capacity. That number is a management signal, not a cost to be smeared across customers. This single discipline is what separates a credible TDABC model from a misleading one.
practical capacities of 187,000, 280,500 and 93,500 minutes per year.
Compute the capacity cost rate
Now the first of the two parameters falls out with one division:
This gives you the cost of a single minute of available capacity.
| Resource group | Cost (EUR) | / Practical capacity (min) | = Rate (EUR/min) |
|---|---|---|---|
| Warehouse and picking | 160,000 | 187,000 | 0.856 |
| Delivery (drivers and fleet) | 232,500 | 280,500 | 0.829 |
| Customer service and account management | 60,000 | 93,500 | 0.642 |
three capacity cost rates - EUR 0.856, EUR 0.829 and EUR 0.642 per minute. These three rates will price everything that follows.
Write the time equations
The second parameter is the time equation: a formula that predicts how many minutes a transaction consumes from a given resource group, as a function of the transaction's characteristics. This is where TDABC absorbs real-world complexity. Instead of forcing every order into one average, you add a term for each thing that genuinely drives time, including conditional terms that only fire when a special condition is present (a return, a hazardous item, a manual order, a fragile drop).
CaP uses three time equations.
Warehouse pick time (minutes per order)
Pick time = 4 + (1.5 x order lines) + (6 x return lines)
4minutes is the fixed set-up to handle any order: retrieve, stage, confirm.1.5minutes is added for every order line picked.6minutes is a conditional term: it only adds time when a line is a return, which is far more labour-intensive than a normal pick.
Delivery time (minutes per drop)
Drop time = travel minutes + 1.5 + (0.33 x cases)
travel minutesis the route time to reach the customer (from the routing system).1.5minutes is the fixed park-and-unload time at every drop.0.33minutes is added per case delivered.
Account management time (minutes per customer per year)
Account time = monthly minutes by service intensity x 12
- Each customer is tagged with a service intensity (light, standard, heavy) that maps to a number of minutes per month; multiply by 12 for the annual figure.
The logic to remember: fixed terms capture the cost of simply showing up; variable terms capture volume; conditional terms capture the expensive exceptions that averages hide. Kaplan and Anderson stress that this is what lets one equation cover thousands of varied transactions without a separate cost pool for each.
The service intensity ladder. CaP tags every account light, standard or heavy, and each tag maps to a fixed number of minutes per month:
light180 minutes a month: an account that orders and rarely calls.standard600 minutes a month.heavy1,200 minutes a month: weekly reviews, promotions, claims.
One more convention keeps the model readable: CaP makes one delivery drop per order, so order counts and drop counts are the same number.
three time equations ready to run over the data.
Assign cost to orders, customers and products
Now you run the engine. For every transaction, the time equations produce minutes; multiply each block of minutes by its capacity cost rate; sum across all of a customer's orders, deliveries and service touches; and you have that customer's cost to serve.
Worked detail for one customer, Online pure-play G, shows how a small account can quietly destroy value:
| Resource group | Driver volume (per year) | Minutes (from equation) | x Rate (EUR/min) | = Cost (EUR) |
|---|---|---|---|---|
| Warehouse and picking | 1,400 tiny orders of 2 lines, 320 return lines | 11,720 | 0.856 | 10,032 |
| Delivery (drivers and fleet) | 1,400 drops, 6 cases each, 24 min travel | 38,472 | 0.829 | 31,893 |
| Customer service and account management | light intensity, 180 min a month | 2,160 | 0.642 | 1,387 |
| Cost to serve, Online pure-play G | 43,312 |
Online pure-play G generates a gross profit of only EUR 46,800 (revenue EUR 260,000 at 18% gross margin), but its cost to serve is EUR 43,312. That leaves a net profit of just EUR 3,488, a 1.3% net margin. The driver is structural: 1,400 tiny orders a year, 320 return lines, and only 6 cases per delivery drop. The customer looks fine on gross margin and is almost worthless on net. Only TDABC surfaces that.
Before the costs, here are the driver volumes the equations run on. Every figure in the next table comes from these seven columns and the three rates, so you can reproduce any line of it with a calculator.
| Client | Orders and drops | Lines per order | Return lines | Cases per drop | Travel min per drop | Service intensity |
|---|---|---|---|---|---|---|
| National Retail A | 950 | 24 | 380 | 30 | 32 | heavy |
| Regional Chain B | 780 | 18 | 300 | 20 | 28 | heavy |
| Wholesaler C | 260 | 30 | 90 | 50 | 45 | standard |
| Contract H | 200 | 26 | 60 | 44 | 40 | standard |
| Foodservice D | 1,150 | 8 | 260 | 10 | 20 | heavy |
| Online pure-play G | 1,400 | 2 | 320 | 6 | 24 | light |
| Convenience E | 900 | 5 | 140 | 6 | 15 | light |
| Independent F | 700 | 6 | 110 | 5 | 16 | light |
| Small accounts I | 800 | 4 | 130 | 3 | 18 | standard |
| New account J | 400 | 5 | 70 | 4 | 20 | standard |
Run the same engine over all 10 accounts and the full picture emerges:
| Client | Revenue (EUR) | Gross margin % | Cost to serve (EUR) | Gross profit (EUR) | Net profit (EUR) | Net % |
|---|---|---|---|---|---|---|
| National Retail A | 1,350,000 | 21% | 77,905 | 283,500 | 205,595 | 15.2% |
| Regional Chain B | 820,000 | 23% | 54,827 | 188,600 | 133,773 | 16.3% |
| Wholesaler C | 640,000 | 25% | 29,569 | 160,000 | 130,431 | 20.4% |
| Contract H | 520,000 | 24% | 21,580 | 124,800 | 103,220 | 19.9% |
| Foodservice D | 410,000 | 20% | 49,974 | 82,000 | 32,026 | 7.8% |
| Online pure-play G | 260,000 | 18% | 43,312 | 46,800 | 3,488 | 1.3% |
| Convenience E | 190,000 | 16% | 24,754 | 30,400 | 5,646 | 3.0% |
| Independent F | 145,000 | 17% | 20,855 | 24,650 | 3,795 | 2.6% |
| Small accounts I | 95,000 | 15% | 25,727 | 14,250 | -11,477 | -12.1% |
| New account J | 70,000 | 16% | 16,486 | 11,200 | -5,286 | -7.6% |
| Total | 4,500,000 | 364,989 | 966,200 | 601,211 | 13.4% |
Reconcile to the cost base: resources used against resources supplied. The ten accounts consumed 452,931 of the 561,000 practical minutes CaP supplies, which is 80.7% of them. The other 108,069 minutes were paid for and not sold. Valued at the same three rates, they cost 87,511 EUR. That number belongs on the management report, not on a customer. Spreading it across the ten accounts would make every one of them look worse than it is, and that is exactly what traditional absorption costing does.
| Resource group | Cost pool (EUR) | Practical capacity (min) | Minutes used | Minutes unused | Cost assigned (EUR) | Cost of unused capacity (EUR) |
|---|---|---|---|---|---|---|
| Warehouse and picking | 160,000 | 187,000 | 154,930 | 32,070 | 132,622 | 27,378 |
| Delivery (drivers and fleet) | 232,500 | 280,500 | 219,521 | 60,979 | 181,983 | 50,517 |
| Customer service and account management | 60,000 | 93,500 | 78,480 | 15,020 | 50,384 | 9,616 |
| Total | 452,500 | 561,000 | 452,931 | 108,069 | 364,989 | 87,511 |
Read the last column as the pool less what the accounts absorbed. Warehouse supplies 160,000 EUR of capacity, the ten accounts absorbed 132,622 of it, and 27,378 stayed on the shelf. The assigned column adds up to 364,989, which is the cost to serve total in the table above.
Now the model closes. Gross profit of 966,200, less the 364,989 of resource the ten accounts actually used, leaves 601,211. Take off the 87,511 of unused capacity and CaP's operating profit is 513,700, or 11.4% of revenue. Used plus unused is 452,500, which is the cost base from Step 1 to the euro. A TDABC model that cannot close this loop is not finished, and the gap is usually the most interesting number on the page, because it is capacity you are paying for and nobody is buying.
a total cost to serve of EUR 364,989 and a net profit of EUR 601,211 (13.4% net margin) - with two accounts now visibly in the red.
Build the whale curve
Rank the customers from most to least profitable, then plot the cumulative net profit. The line climbs steeply through the good accounts, flattens as the marginal ones add little, peaks, and then bends downward as the loss-makers eat into the total. The shape resembles a whale surfacing, which is why it is called a whale curve.
| Rank | Client | Net profit (EUR) | Cumulative profit (EUR) |
|---|---|---|---|
| 1 | National Retail A | 205,595 | 205,595 |
| 2 | Regional Chain B | 133,773 | 339,368 |
| 3 | Wholesaler C | 130,431 | 469,799 |
| 4 | Contract H | 103,220 | 573,019 |
| 5 | Foodservice D | 32,026 | 605,045 |
| 6 | Convenience E | 5,646 | 610,691 |
| 7 | Independent F | 3,795 | 614,486 |
| 8 | Online pure-play G | 3,488 | 617,974 (peak) |
| 9 | New account J | -5,286 | 612,688 |
| 10 | Small accounts I | -11,477 | 601,211 (final) |
Cumulative profit peaks at EUR 617,974 after the eighth account (Online pure-play G), then the loss-making tail (Small accounts I and New account J) drags it back down to the reported EUR 601,211. The tail destroys EUR 16,763 of profit that the rest of the business has already earned.
Note what this means commercially: 2 of 10 accounts are loss-making (20% of the customer base), they represent only about 4% of revenue, yet they actively destroy value. This is the pattern Kaplan documented again and again: a small group of customers can quietly erase a large slice of profit, and it is invisible at gross-margin level because every one of these accounts shows a positive gross margin.
a whale curve peaking at EUR 617,974 with a tail that costs EUR 16,763.
Decide and act
A model that only describes is half a model. The point of TDABC is to change decisions. There are three levers, and the right move is usually a blend of all three rather than firing customers.
Lever 1 - Reprice the tail. The loss-makers (Small accounts I, New account J) and the near-zero accounts (Independent F, Convenience E, Online pure-play G) are loss-making because of how they buy, not whether they should be served. CaP would introduce a small-order surcharge, a minimum order value, or a delivery charge below a case threshold, so that price reflects the cost driven.
Lever 2 - Reduce the cost to serve. Many of those costs are self-inflicted by ordering patterns. CaP would consolidate Online pure-play G's 1,400 tiny orders into fewer, fuller drops, move it to a lower-cost delivery slot, and tackle the 320 return lines at source (better product data, fewer wrong picks). Each minute removed flows straight back to net profit at the capacity cost rate.
Lever 3 - Re-mix. CaP knows precisely what a profitable account looks like (Wholesaler C and Contract H, both close to 20% net). It would steer sales and marketing toward that profile and away from chasing revenue that arrives with a negative tail.
a concrete plan to recover the EUR 16,763 destroyed by the tail and to protect the EUR 513,700 the business actually earns - the difference between revenue chased and profit kept.
Common mistakes to avoid
- Costing at actual use, not practical capacity. If you divide cost by the minutes actually consumed, every model balances perfectly and tells you nothing, because unused capacity is hidden. Always divide by practical capacity (the ~85% rule) so idle capacity surfaces as its own line.
- Going back to surveys. The moment you start asking staff to estimate percentages of their time across activities, you have rebuilt classic ABC and inherited all its cost and decay. Use observed times and time equations instead.
- Stopping at gross margin. Every loss-making CaP account had a healthy gross margin. Gross margin tells you about the product; net margin after cost to serve tells you about the customer. Stop too early and you will protect exactly the wrong accounts.
- Too many cost pools. Hundreds of activity pools made ABC unmaintainable. TDABC deliberately uses a handful of resource groups plus time equations to absorb variety. If your model has dozens of pools, simplify.
How long does it take?
With clean transactional data already sitting in your ERP, WMS and CRM, a first working TDABC model is a matter of days to a few weeks, not months. The heavy lifting is gathering resource-group costs, agreeing practical capacity, and writing a handful of time equations. By contrast, a classic ABC build, with its activity surveys and hundreds of cost pools, routinely took months and then decayed because nobody wanted to re-survey. That speed advantage is exactly why Kaplan and Anderson created the time-driven approach. The model is also cheap to refresh: when costs or volumes change, you update two parameters, not the whole architecture.
FAQ
How do you build a TDABC model?
You build it in seven steps: map your resource groups and their cost; calculate practical capacity at roughly 85% of theoretical; compute each group's capacity cost rate (cost divided by practical capacity); write time equations that estimate minutes per transaction; run those equations over your transactional data to assign cost to orders, customers and products; rank customers into a whale curve; then act on the tail. The whole model rests on just two parameters per resource group: the capacity cost rate and the time equations.
What data do you need for TDABC?
The total cost of each resource group, the quantity of resource supplied (so you can estimate practical capacity), and transactional data such as orders, order lines, deliveries, returns and cases. Most of this already exists in your ERP, warehouse and CRM systems. Critically, you do not need employee time-allocation surveys, which is what made classic ABC slow and political.
How long does a TDABC model take to build?
With clean data, a first model takes days to a few weeks. Classic ABC, by comparison, often took months and then went stale because it relied on repeated surveys. TDABC is also faster to maintain, because you update only the capacity cost rate and the time equations when things change.
What is a capacity cost rate?
It is the cost of supplying one minute (or hour) of available capacity from a resource group. You calculate it by dividing the group's total cost by its practical capacity, not its theoretical capacity. Using practical capacity (about 85% of theoretical) means any capacity you pay for but do not use shows up explicitly as the cost of unused capacity, rather than being hidden inside customer costs.
How many cost pools do you need for TDABC?
Far fewer than classic ABC. You group resources into a small number of resource groups, typically a handful and rarely more than a dozen, then let time equations absorb the variety within each group. If your model is sprawling into dozens or hundreds of pools, you have drifted back toward the old ABC that TDABC was designed to replace.
Why is practical capacity set at 85%?
Because no team or asset works productively for 100% of paid time. Breaks, training, meetings, set-up, downtime and maintenance all consume capacity. Kaplan and Anderson recommend roughly 80% to 85% of theoretical capacity as a realistic default, which keeps the capacity cost rate honest and surfaces unused capacity as a management signal.
Sources
Canonical works behind this method. Each opens in a new tab.
- PaperTime-Driven Activity-Based CostingKaplan, R. S. & Anderson, S. R. (2004). Harvard Business Review 82(11).The founding article defining TDABC and its two-parameter model.
- BookTime-Driven Activity-Based Costing: A Simpler and More Powerful Path to Higher ProfitsKaplan, R. S. & Anderson, S. R. (2007). Harvard Business School Press.Book-length treatment of TDABC with implementation cases.
- BookCost & Effect: Using Integrated Cost Systems to Drive Profitability and PerformanceKaplan, R. S. & Cooper, R. (1998). Harvard Business School Press.Comprehensive framework linking ABC to product and customer profitability.
- PaperCost modeling in logistics using time-driven ABC: Experiences from a wholesalerEveraert, P., Bruggeman, W., Sarens, G., Anderson, S. R. & Levant, Y. (2008). International Journal of Physical Distribution & Logistics Management 38(3).Peer-reviewed real-company time equations validating the method in logistics.
- PaperProfit Priorities from Activity-Based CostingCooper, R. & Kaplan, R. S. (1991). Harvard Business Review 69(3).Shows how ABC reveals unprofitable customers and products hidden by averaging.
Proof
A distributor in New Zealand. €1.335M of cost-to-serve made visible, then halved, and 830 loss-making customers brought down to 295.
Read the case study →Who you would be talking to
Miguel Guimarães, Founding Partner
Cost and profitability practitioner for 25+ years. Presented the Damco cost-to-serve case at Managing for Profit (Amsterdam RAI, December 2009), on the same programme as Robert S. Kaplan.
Call +351 910 313 731