The Expense That Didn't Move Margin
I was experimenting with Services Estimator in sandbox doing something almost simple, adding a billable expense to an estimate. Two thousand dollars of airfare. I clicked save, glanced at the margin, and waited for it to tick down. It didn't move. Cost: unchanged. Margin: unchanged. My first instinct was the one every consultant has at that exact moment — something's broken. I checked the custom settings. I re read the field. I refreshed the page, as if that has ever fixed anything.
Nothing was broken. That stubbornly unchanged margin was Certinia quietly trying to tell me something about how it models expenses. And once I followed the thread, it explained far more than the non-event in front of me, it explained where expenses travel all the way downstream, to the customer quote and the statement of work the client actually signs. Here's the whole field trip.
Billable and non-billable aren't two flavors of the same thing The flawed assumption baked into my expectation was treating "billable" and "non-billable" as a minor toggle, same expense, just billed or not. They're actually two completely different financial animals. A non-billable expense is money you absorb. Your consultant flies somewhere, you eat the cost, the client never sees it. So Certinia folds it straight into the estimate's Cost — and since margin is just revenue minus cost, your margin drops. Exactly what you'd expect. A billable expense is a pass-through. You pay the airline $2,000, you bill the client $2,000, and the net effect on your profitability is precisely zero. You're not a dollar richer or poorer for it. So Certinia, sensibly, keeps it out of Cost entirely and parks it in a bucket of its own. That's the entire mystery, solved. The estimate's margin is calculated as Amount − Cost, and a billable expense lives in neither of those fields. It can't move the margin, because by design it was never in the equation. My instinct to watch the margin was the bug, not the software. Non-billable expense Billable expense Who pays in the end You absorb it Client reimburses it Effect on margin Drops it (folded into Cost) None (pass-through) Where it's tracked Total Non-Billable Expenses Total Billable Expenses.
So where did my $2,000 actually go? "It goes in its own bucket" only raises the better question: which bucket? On the estimate record, Certinia maintains a running set of rollup fields. The two that matter most are Total Billable Expenses and Total Non-Billable Expenses — exactly what they sound like, the sum of each kind across the estimate. (There's a second pair, the "Independent Records" variants, that track expenses not tied to any specific estimate product. Worth knowing about the moment you start splitting one estimate into multiple projects, but not the headline.) My $2,000 had been sitting in Total Billable Expenses the entire time. It registered perfectly. I'd simply been staring at the wrong column.
The downstream journey, and three places expenses go quiet Here's what I actually care about as an architect, because an estimate is never the destination. It flows somewhere — to an opportunity, to a quote, to the SOW the client signs. So I followed my $2,000 down each of those paths. It survives the trip. But it travels as a quiet number, and at no point does it announce itself unless you make it. The opportunity. When you add the estimate to its opportunity, each estimate product becomes an opportunity product, and the billable expenses land in a dedicated field —Total Estimated Expenses Billable Amount. Billable only, the non-billable ones don't make the trip, which is correct, since they're your internal cost and none of the customer's business. The amount also gets converted into the opportunity's currency, worth saying loudly if you run multi-currency, because that's your second conversion checkpoint, the first being that an expense always inherits the estimate's currency to begin with. But notice the word "field." It's a roll-up amount, not a line item. A standard quote built from those opportunity products won't show your expenses unless you deliberately surface that field. The CPQ quote. If you use the Services Estimator, Salesforce CPQ connector, the sync is even more pointed. It copies your estimate products across as quote lines, neatly grouped under a "Services" group. But the sync is product-centric to its core: the object that links estimates to quote lines carries no expense field at all. Estimated expenses simply don't make the journey. Need them on a CPQ quote? You model them yourself as a product line. (While you're here, file away another one: discounting isn't supported across that sync.)
The real lesson: expenses are a design decision, not a default. Put the three rails together and the architectural point writes itself. The estimate knows about your $2,000 airfare. Convert to a project and the budget knows too, it lands in the Customer PO budget. Your internal numbers are airtight. But the opportunity shows it only as a side field, the CPQ quote drops it entirely, and the SOW doesn't mention it at all. How the customer sees your expenses is something you have to decide and build. It is never automatic. Billable expenses are pass-throughs that stay out of your cost and margin, and they won't reach your customer unless you build the path. Decide how clients should see them before you're standing in front of one.