Classifying Costs, Part 1: Direct vs Indirect, Fixed vs Variable
Costs are classified along multiple dimensions. Understanding these distinctions is essential for building accurate financial models and communicating with investors.
The Three Dimensions
Costs are classified along three independent dimensions — any cost can be any combination:
Dimension 1: Behavior — How does the cost change with activity?
- Fixed, variable, semi-variable, step-function
Dimension 2: Function — Where does it appear in the P&L?
- COGS, variable cost (functional), operating expense (OPEX)
Dimension 3: Traceability — Can it be traced to a specific customer or product?
- Direct or indirect
Key insight: These dimensions are orthogonal. A cost can be fixed AND COGS (e.g., multi-year data subscription for all customers), variable AND OPEX (e.g., usage-based dev tools), or direct AND fixed (e.g., dedicated server for one client).
Dimension 1: Behavior
Fixed Costs
Costs that remain constant regardless of activity level in the short term.
| Examples | Notes |
|---|---|
| Office rent | Same whether 10 or 100 employees |
| Executive salaries | Doesn't change with customer count |
| Multi-year data licenses | Fixed regardless of usage |
| Reserved cloud instances | Committed capacity |
| Annual software subscriptions | Fixed for contract term |
Fixed costs get spread across more revenue as you grow, improving margins. This is the source of operating leverage.
Variable Costs
Costs that change in direct proportion to activity (customers, usage, transactions).
| Examples | Unit | Notes |
|---|---|---|
| Per-client cloud compute | Per customer | Scales linearly |
| Per-customer data licenses | Per customer | Purchased per client |
| Sales commissions | Per deal | % of ACV |
| Payment processing | Per transaction | 2.9% + $0.30 |
| Usage-based APIs | Per call | Third-party services |
Variable costs maintain constant per-unit cost; margins stay flat as you scale.
Semi-Variable (Mixed) Costs
Costs with a fixed base plus a variable component.
| Examples | Fixed Portion | Variable Portion |
|---|---|---|
| Support team | Base headcount | Overflow contractors |
| Cloud infrastructure | Reserved instances | On-demand overflow |
| Sales team | Base salaries | Commissions |
When precision matters, split into fixed and variable portions.
Step-Function Costs
Fixed within capacity ranges, jump to a new level at thresholds.
| Examples | Threshold | Jump |
|---|---|---|
| Customer success team | Every 20 customers | Add 1 CSM |
| Infrastructure tier | 1,000 concurrent users | Upgrade instance class |
| Data license tier | 10,000 km² | Next pricing tier |
Dimension 2: Function (P&L Placement)
COGS (Cost of Goods Sold)
Direct costs of producing and delivering the product/service to customers.
The Test: "Is this cost required to deliver the product to customers?"
COGS can be fixed or variable:
| Cost | Behavior | Example |
|---|---|---|
| Per-client compute | Variable | GPU inference per customer |
| Multi-year data subscription | Fixed | Satellite imagery for all customers |
| Customer support labor | Semi-variable | Base staff + overflow |
| Payment processing | Variable (transactional) | 2.9% of revenue |
A multi-year data subscription that serves all customers is COGS (required to deliver product), fixed (doesn't change with customer count), and indirect (shared across all customers). This is favorable for scaling — the cost is "capacity" that supports growth without linear cost increase.
Variable Costs (Functional Category)
In contribution-margin waterfalls, this is a functional category for costs that scale with acquisition activity.
The Test: "Is this cost incurred to acquire or expand a customer?"
| Examples | Notes |
|---|---|
| Sales commissions | Per-deal (8-12% of ACV) |
| Implementation labor | Per-customer onboarding |
| Client-specific ML training | One-time per client |
| Variable marketing | Performance-based spend |
| Channel partner fees | Revenue share |
Why separate from COGS: These are acquisition costs, not delivery costs. The distinction enables calculating gross margin (delivery efficiency) and contribution margin (delivery + acquisition efficiency) as separate metrics.
Operating Expenses (OPEX)
Ongoing costs to run the business, not directly tied to specific customer revenue.
The Test: "Would this cost exist even with zero customers?"
| Category | Examples |
|---|---|
| R&D | Engineering salaries, dev tools, training infrastructure |
| S&M (fixed) | Base sales salaries, marketing team, programs |
| G&A | Executive, finance, HR, legal, facilities |
Dimension 3: Traceability
Direct Costs
Costs traceable to a specific customer, product, or project.
| Examples | Cost Object |
|---|---|
| Client-specific data license | Customer |
| Client ML model training | Customer |
| Product-specific engineering | Product |
| Customer support ticket labor | Customer |
Direct ≠ Variable: A dedicated server for one client is direct but may be fixed (same monthly cost regardless of their usage).
Indirect Costs
Costs shared across multiple customers/products; require allocation if assigned.
| Examples | Notes |
|---|---|
| General cloud infrastructure | Shared across all customers |
| Executive salaries | Benefit entire company |
| Multi-year data subscriptions | Serve all customers |
| Marketing campaigns | Generate leads broadly |
Indirect ≠ Fixed: Usage-based software shared across teams is indirect but variable.
The Full Matrix
| Cost Example | Behavior | Function | Traceability |
|---|---|---|---|
| Per-client inference compute | Variable | COGS | Direct |
| Multi-year satellite data subscription | Fixed | COGS | Indirect |
| General ML training compute | Fixed | OPEX (R&D) | Indirect |
| Sales commission | Variable | Variable Cost | Direct |
| Sales base salary | Fixed | OPEX (S&M) | Indirect |
| Client-specific storage | Variable | COGS | Direct |
| Implementation labor | Variable | Variable Cost | Direct |
| Engineering salaries | Fixed | OPEX (R&D) | Indirect |
| Payment processing | Variable | COGS | Direct |
| Reserved cloud (production) | Fixed | COGS | Indirect |
Why It Matters
For Gross Margin
Gross margin requires correctly identifying COGS. Include customer-facing compute, data feeds for delivery, and support. Exclude R&D, sales, and G&A.
| Error | Impact |
|---|---|
| R&D compute in COGS | Overstates delivery cost, understates margin |
| Data subscriptions in OPEX | Understates delivery cost, overstates margin |
For Contribution Margin
Contribution margin requires separating variable from fixed. Include COGS plus acquisition costs (commissions, implementation). Exclude fixed OPEX.
For Breakeven
Breakeven Revenue = Fixed Costs / Contribution Margin %
Misclassifying fixed vs. variable breaks this calculation.
For Scaling Analysis
Understanding cost behavior shows how margins evolve:
| Cost Structure | At 10 Customers | At 100 Customers |
|---|---|---|
| Heavy variable COGS | 70% gross margin | 70% gross margin |
| Heavy fixed COGS | 40% gross margin | 75% gross margin |
Fixed COGS (like multi-year data subscriptions) creates operating leverage — margins improve with scale.
Decision Tree
For each cost, ask:
-
Function: Where does it appear in the P&L?
- Required to DELIVER product? → COGS
- Required to ACQUIRE/EXPAND? → Variable Cost
- Required to RUN business? → OPEX
-
Behavior: How does it change with activity?
- Scales with customers/usage? → Variable
- Constant regardless of activity? → Fixed
- Has base + scaling component? → Semi-variable
-
Traceability: Can it be traced to a specific customer?
- Clearly linked to one customer? → Direct
- Shared across customers? → Indirect
Common Errors
| Error | Example | Impact |
|---|---|---|
| All cloud = OPEX | "AWS is operating expense" | Understates COGS |
| Variable = COGS | "Commissions are COGS" | Misrepresents gross margin |
| Direct = Variable | "Client server is variable" | Mismodels cost behavior |
| Data subscription = OPEX | "Satellite feed is R&D" | Understates COGS |
| Fixed data = Variable | "Data scales with customers" | Mismodels leverage |