Costing Part 2 · 원가 전략

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.

Revenue-proportional allocation doesn't fail to find unprofitable customers. It computes in a way that makes unprofitable customers impossible.

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.

Resources → (resource driver) → Activities → (activity driver) → Shippers

Each stage answers a different question.

StageQuestionExample drivers
Stage 1 — resources to activitiesWhich activity consumed this expense?Headcount, floor area, share of work hours
Stage 2 — activities to shippersWho 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.

LevelScales withWarehouse exampleAllocate to shipper?
Unit levelOrders, lines, palletsPicking, packing, storageYes (driver is clear)
Batch levelNumber of work batchesWave building, inbound lot inspection, vehicle loadingYes (by batch count)
Customer levelNumber of shippers (volume-independent)Account management, statement issuance, cycle counts, system accounts, monthly reviewsYes (flat per shipper)
Facility levelNothing at allCenter manager salary, security, fire safety, common area, unused spaceDo 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.

ActivityCost driverUnit cost
StoragePallet-day967 KRW
Receiving · inspectionPallet3,200 KRW
PickingLine500 KRW
PackingBox1,450 KRW
ShippingOrder400 KRW
Account managementShipper-month1,850,000 KRW

One month of activity consumption for three shippers.

ShipperProfileRevenuePallet-daysPallets inPick linesBoxesOrders
ALarge lots · slow turn62,000,00042,0003809,0005,8005,400
BSmall lots, many SKUs · fast turn60,000,0007,80015024,00016,00015,200
CSmall account9,500,0003,600452,4001,7001,600

Multiply and add, and this is what comes out (KRW).

ActivityABC
Storage40,614,0007,542,6003,481,200
Receiving · inspection1,216,000480,000144,000
Picking4,500,00012,000,0001,200,000
Packing8,410,00023,200,0002,465,000
Shipping2,160,0006,080,000640,000
Account management1,850,0001,850,0001,850,000
Total cost58,750,00051,152,6009,780,200
Margin3,250,0008,847,400−280,200
Margin rate5.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.

ShipperRevenue-proportional marginABC marginError
A5,572,000 (9.0%)3,250,000 (5.2%)−2,322,000
B5,392,000 (9.0%)8,847,400 (14.7%)+3,456,000
C854,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.

The point is that all three prescriptions differ — pitch process efficiency to A and you waste your time (handling is only 20% of its cost). Push C for more volume and you're right (fixed admin gets diluted). Demand a rate increase from B and you may just lose the relationship. Two shippers with the same "low margin" often need opposite treatments. What ABC delivers isn't the margin percentage — it's which activity ate that margin.

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.

ShipperFirst-pass marginUnused capacity allocatedFinal margin
A3,250,000−8,992,000−5,742,000
B8,847,400−7,829,0001,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.

A was never an unprofitable shipper. The warehouse was underfilled.

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.

  1. 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.
  2. 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 third appearance of the same principle in this series — Part 1's volume variance (allocate at normal capacity, show the unabsorbed remainder separately), the storage piece's 85% target occupancy (divide by effective operating positions, not total positions), and TDABC's 80–85% practical capacity. All three say the same thing: don't bury the cost of capacity you failed to fill inside unit cost — pull it out onto its own line. Buried, it distorts pricing. Pulled out, it becomes a management task.

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.

But the reaction to a first whale curve is usually hasty: "cut the tail." There's a question you have to ask first.

If this shipper leaves, does that cost actually disappear? — accountants call it avoidable cost. Picking labor disappears. Packaging materials disappear. Rent doesn't, supervisory salaries don't, and the vacated locations generate cost until the next shipper arrives. If it's still unprofitable counting only avoidable cost, it's genuinely a candidate for exit. Cut without running that calculation and you lose the revenue while keeping the cost.

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.

The data manufacturing built through interviews, a warehouse gets from scans.

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.

  1. 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.
  2. Check shipper-tagging coverage first. What percentage of last month's work events carried a shipper? That number is the ceiling on your ABC.
  3. Display cost in four levels — unit, batch, customer, facility. And leave facility level unallocated.
  4. Set practical capacity at 85% and pull unused capacity onto its own line. Without that line, the death spiral starts.
  5. Draw the whale curve once. Then compute avoidable cost separately for the shippers in the tail.
  6. 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.

Cost by shipper is a number that doesn't exist unless somebody assembles it. And you cannot negotiate with a number that doesn't exist.

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

Related reading