Activity-Based Costing
Whose cost was that, exactly?
Here's a question worth putting to any 3PL owner.
"If two shippers bill about the same, which one makes you more money?"
Most people know the answer by feel. "A is the painful one." But push to how painful, and therefore what percentage the rate needs to move, and the conversation stops. The books don't have that answer.
Of course they don't. Financial accounting is designed to aggregate cost by account — this much labor, this much rent, this much depreciation. Nothing in financial reporting requires or rewards recording how much went to which customer. So cost by shipper is a number that simply doesn't exist unless somebody deliberately assembles it.
In Part 1, "Understanding Standard Costing in Logistics," we built the ruler for unit cost. Part 2 is about whom to attach those measurements to. The method's name is Activity-Based Costing.
Revenue-proportional allocation cannot find an unprofitable customer
The most common way to spread overhead across shippers is in proportion to revenue. It's easy to compute, easy to explain, and nobody objects.
And it is structurally wrong. The reason is logical, not empirical.
Allocate cost in proportion to revenue and every shipper's cost ratio becomes identical — necessarily, because you divided cost by revenue. Which means every shipper's margin rate comes out the same. This method returns "all customers are equally profitable" no matter what data you feed it.
Volume-proportional allocation isn't much better. Divide by order count and the six-line shipper gets the same cost as the one-line shipper; divide by pallet count and fast-turning stock costs the same as inventory that sits for a year. The moment you flatten everything onto a single allocation base, every shipper characteristic that departs from that base disappears.
Accountants call this peanut-butter spreading — smearing cost evenly so you can't tell where it's thick.
ABC flows cost in two stages
The idea behind ABC is simple. Customers don't consume resources; activities consume resources, and customers consume activities. So don't divide cost straight onto customers — route it through activities.
Each stage answers a different question.
| Stage | Question | Example drivers |
|---|---|---|
| Stage 1 — resources to activities | Which activity consumed this expense? | Headcount, floor area, share of work hours |
| Stage 2 — activities to shippers | Who consumed this activity, and how much? | Pick lines, pallet-days, box count |
Stage 1 usually holds for a long time once set. Forklift lease splits across receiving, putaway, and shipping; rent splits between storage and work areas by area. Stage 2 is what moves monthly, and the per-activity unit cost it runs on is exactly the standard cost we built in Part 1.
So ABC and standard costing aren't competitors. ABC defines the path cost travels; standard costing defines the unit value carried along it. With only one of them the sentence doesn't finish. Path alone tells you nothing about how much; unit value alone tells you nothing about whose.
Not every cost belongs to a shipper
Here's where practitioners most often overreach: trying to force every cost onto a shipper somehow.
Costs come in a hierarchy. Some scale with volume; some don't move no matter how much volume you add.
| Level | Scales with | Warehouse example | Allocate to shipper? |
|---|---|---|---|
| Unit level | Orders, lines, pallets | Picking, packing, storage | Yes (driver is clear) |
| Batch level | Number of work batches | Wave building, inbound lot inspection, vehicle loading | Yes (by batch count) |
| Customer level | Number of shippers (volume-independent) | Account management, statement issuance, cycle counts, system accounts, monthly reviews | Yes (flat per shipper) |
| Facility level | Nothing at all | Center manager salary, security, fire safety, common area, unused space | Do not allocate |
Customer-level cost is the real culprit behind unprofitable small shippers. A shipper with two pallets still gets location assignment, appears in cycle counts, holds a system account, and receives a statement every month. That cost isn't much lower than for a 100-pallet shipper. Divide it by volume and it vanishes — and the small shipper looks fine on paper.
Facility level must not be allocated. The next section covers why in detail, but in short: force-allocating a cost that has no causal link to any activity produces an allocated figure that drives bad decisions.
Let's run the numbers — three shippers
Figures make it real. We'll reuse the unit costs built in Part 1 and the storage piece.
| Activity | Cost driver | Unit cost |
|---|---|---|
| Storage | Pallet-day | 967 KRW |
| Receiving · inspection | Pallet | 3,200 KRW |
| Picking | Line | 500 KRW |
| Packing | Box | 1,450 KRW |
| Shipping | Order | 400 KRW |
| Account management | Shipper-month | 1,850,000 KRW |
One month of activity consumption for three shippers.
| Shipper | Profile | Revenue | Pallet-days | Pallets in | Pick lines | Boxes | Orders |
|---|---|---|---|---|---|---|---|
| A | Large lots · slow turn | 62,000,000 | 42,000 | 380 | 9,000 | 5,800 | 5,400 |
| B | Small lots, many SKUs · fast turn | 60,000,000 | 7,800 | 150 | 24,000 | 16,000 | 15,200 |
| C | Small account | 9,500,000 | 3,600 | 45 | 2,400 | 1,700 | 1,600 |
Multiply and add, and this is what comes out (KRW).
| Activity | A | B | C |
|---|---|---|---|
| Storage | 40,614,000 | 7,542,600 | 3,481,200 |
| Receiving · inspection | 1,216,000 | 480,000 | 144,000 |
| Picking | 4,500,000 | 12,000,000 | 1,200,000 |
| Packing | 8,410,000 | 23,200,000 | 2,465,000 |
| Shipping | 2,160,000 | 6,080,000 | 640,000 |
| Account management | 1,850,000 | 1,850,000 | 1,850,000 |
| Total cost | 58,750,000 | 51,152,600 | 9,780,200 |
| Margin | 3,250,000 | 8,847,400 | −280,200 |
| Margin rate | 5.2% | 14.7% | −2.9% |
Now put the same data through revenue-proportional allocation side by side. The center's overall cost ratio is 91.0%, so every shipper lands at a 9.0% margin.
| Shipper | Revenue-proportional margin | ABC margin | Error |
|---|---|---|---|
| A | 5,572,000 (9.0%) | 3,250,000 (5.2%) | −2,322,000 |
| B | 5,392,000 (9.0%) | 8,847,400 (14.7%) | +3,456,000 |
| C | 854,000 (9.0%) | −280,200 (−2.9%) | −1,134,000 |
All three come out at 9.0% — exactly as argued above. Revenue-proportional allocation returns the same answer whatever the data.
Through ABC the story changes completely.
- A is buying space. 69% of its cost is storage. This isn't a shipper that's hard to work — it's a shipper holding positions for a long time. The response isn't process improvement; it's a storage rate renegotiation or a turnover condition.
- B takes a lot of hands. Picking, packing, and shipping are 81% of its cost. And it has the highest margin rate — meaning it's already paying a rate that matches the work. B is a demanding shipper, not a bad one.
- C is unprofitable on admin. Account management of 1.85 million KRW is 19.5% of its revenue. Neither handling nor storage is a problem; cost accrues simply because the account exists.
Do not push unused capacity onto your shippers
This is where ABC most often crashes, and it's the most important section in this piece.
The cost allocated to the three shippers above totals 119.68 million KRW. Suppose the center's actual monthly cost is 138 million. 18.32 million is left over.
Traditional ABC does not leave it there. Its aim is to push 100% of cost onto cost objects, so the remaining 18.32 million gets divided among shippers again. Spread in proportion to allocated cost, it lands like this.
| Shipper | First-pass margin | Unused capacity allocated | Final margin |
|---|---|---|---|
| A | 3,250,000 | −8,992,000 | −5,742,000 |
| B | 8,847,400 | −7,829,000 | 1,019,000 |
| C | −280,200 | −1,497,000 | −1,777,000 |
Now A is 5.74 million in the red, and the conclusion at the meeting writes itself — "let's exit A."
So what happens if you do? 62 million of revenue disappears, most of A's activity cost disappears with it, but rent doesn't, the center manager's salary doesn't, and security doesn't. Unused capacity grows well past 18.32 million. And next month that larger unused capacity gets allocated to B and C. Then B turns unprofitable too.
This is the death spiral. Allocate idle capacity to customers and every customer you cut raises the cost of the ones who remain, which makes you cut again.
The method that confronted this head-on is time-driven activity-based costing (TDABC), proposed by Kaplan and Anderson in 2004. Two rules carry it.
- Set the denominator of the cost rate to practical capacity — not theoretical total capacity, but capacity net of breaks, changeovers, and downtime. The recommended level is 80–85% of theoretical.
- Leave unused capacity out of the allocation and show it separately. It isn't any customer's cost; it's the number telling management how much capacity is sitting idle.
The second rule is decisive. The 18.32 million is not A's cost — it's the center's unused capacity, and labeling it correctly produces the right question. Not "should we cut A?" but "how do we fill this idle capacity, or how do we shrink it?"
The whale curve — and what to ask before you cut
Once margins by shipper exist, the next step is sorting. Rank by margin and plot cumulative profit, and you get a curve that rises to a hump and then slides down a tail. It resembles a whale, hence the whale curve.
The shape typically observed: the top 20% of customers generate 150–180% of total profit, the next 60% are roughly breakeven, and the bottom 20% erode 50–80% of profit. The curve peaks somewhere in the middle and descends to the right.
That shape is especially pronounced in 3PL, for reasons that stack.
- Rates are negotiated separately per shipper. Bargaining power sets rates independently of cost.
- The work behind the same "one order" differs by shipper (exactly as covered in Part 1).
- Storage is often billed independent of turnover (exactly as covered in the storage piece).
- Small shippers incur the same account management cost.
But the reaction to a first whale curve is usually hasty: "cut the tail." There's a question you have to ask first.
One more thing. A shipper in the tail is sometimes needed for strategic reasons — peak volume commitment, a reference account in a particular channel, a group affiliate. ABC won't make that judgment for you. What it does is tell you what you're paying to keep the relationship. Keeping it knowingly and keeping it blindly are entirely different forms of management.
ABC failed once — so why is a warehouse different?
Honesty is required here. ABC was a major fashion in the 1990s and a major failure.
The numbers are unsentimental. Research puts 40–60% of ABC implementations as failing to deliver their intended outcome or being abandoned within three years. One survey found only 7.9% of organizations were extensive, committed users — down from 9.7% in 1994. The most-cited reason for rejecting it was the resources required to design and operate it (36%).
Why did it fail? Not because the theory was wrong. Because the data couldn't be produced.
To run ABC in manufacturing or services, you had to know what percentage of each employee's time went to each activity. With no way to measure that, firms estimated it through surveys and interviews. And every time a process changed, the survey had to run again — across hundreds of activities, quarterly. People burned out and the projects died.
A warehouse is the exception, for one reason.
In a warehouse running a WMS, receiving, putaway, picking, packing, and shipping are already recorded as events. Who, when, which shipper's SKU, how many — it lands in the ledger. The thing that killed ABC — collecting activity data — already exists in a warehouse as a by-product of doing the work. No separate survey, nothing to refresh quarterly.
There is one condition. Every work event has to be tagged with a shipper. Picking inherits the shipper from the order automatically, but stock moves, cycle counts, and housekeeping frequently carry no shipper. And an activity with no shipper tag cannot be allocated. How far ABC can go in your warehouse is exactly as far as shipper tagging goes in your ledger.
What's pushing ABC back up in 2026
① Shippers are demanding visibility.
In the 2026 annual third-party logistics study, now in its 30th year, the key considerations 3PLs named were end-to-end visibility at 61%, customized and value-added services at 61%, and cost optimization through collaboration at 56%. In the same study 100% of 3PLs called their shipper relationships successful, while only 88% of shippers agreed. Activity-level cost is the language that closes that 12-point gap.
② The reason gain-sharing doesn't happen is precisely the absence of ABC.
In the same body of research, gain-sharing was rated important by 44% of 3PLs against 16% of shippers — one of the largest perception gaps in the survey. The shippers' reluctance is simple: measuring savings requires a baseline, and the party holding the data to compute that baseline is the 3PL. When the referee is also a player, the score is hard to trust. ABC is what makes that baseline checkable by both sides.
③ Market rates already reflect ABC structure.
In 2026, ecommerce 3PL pick-and-pack rates have settled into the form of $2.75 for the first item plus $0.50 per additional item. That is exactly the "fixed amount per order plus variable amount per line" two-tier structure described in Part 1. The market is building rate cards that follow cost structure. If your own rate card is still a single line reading "X per outbound order," it reflects cost structure less than the market average does.
④ AI speeds allocation up; it doesn't decide it for you.
As of 2026 roughly 46% of 3PLs use AI tools in real-time decision-making, and they genuinely help with aggregation and anomaly detection. But which driver allocates which activity is still a human decision. Cost-driver selection is a judgment about causality, not a statistics problem — and a badly chosen driver just lets AI produce the wrong answer very quickly and very precisely.
⑤ The cost objects themselves are moving.
Tariffs and sourcing realignment are changing shippers' inbound lot sizes, lead times, and inventory turns. When those move, the mix of activities a given shipper consumes moves with them. An ABC model computed once a year can no longer keep up. An ABC that doesn't refresh monthly meets the same fate as a standard that never gets recalibrated.
What you can do in the first month
Implementing ABC wholesale has a high failure rate — the 40–60% above is the evidence. Starting small is far better.
- Limit yourself to five to seven activities. Receiving, putaway, picking, packing, shipping, storage, and account management. Split into a hundred activities and you repeat the 1990s.
- Check shipper-tagging coverage first. What percentage of last month's work events carried a shipper? That number is the ceiling on your ABC.
- Display cost in four levels — unit, batch, customer, facility. And leave facility level unallocated.
- Set practical capacity at 85% and pull unused capacity onto its own line. Without that line, the death spiral starts.
- Draw the whale curve once. Then compute avoidable cost separately for the shippers in the tail.
- Look at the activity mix of cost for each shipper. This is more useful than the margin rate, because the prescription comes from here.
Number six deserves repeating. Using ABC output only as a "margin rate ranking by shipper" is using half of it. The fact that 69% of A's cost is storage does far more work than the number 5.2%. The ranking tells you who to talk to; the activity mix tells you what to say.
Putting a name on cost
Compressed to one line, ABC is this: the work of putting an owner's name on a cost.
Cost without a name doesn't get managed. "32 million in labor this month" is a number nobody owns. "23.2 million on B's packing" starts a conversation. Whether to raise the rate, change the box spec, or rework the multi-item packing rule branches off that single line.
And naming it surfaces uncomfortable facts too. A long-standing shipper may be unprofitable; the one everyone found difficult may be the best account you have. Almost every warehouse that runs ABC for the first time watches the order it thought it knew get turned upside down.
Part 3 will cover what governs the accuracy of this calculation — how to choose cost drivers and design standard times. Choose a driver badly and ABC gets things wrong more precisely than revenue-proportional allocation ever could.
Docktre tags every task with a shipper
Receiving, putaway, picking, packing, and shipping land in the ledger per shipper, so activity cost attaches to a shipper and closes monthly. If you'd like to see it in your operation, get in touch.
Contact