← Back to work

Product Design Memo  •  January 2026

Explaining Usage-Based Billing Disputes: A Product Design Memo

A proposal for an "Explain" drawer on Stripe invoice line items that helps operators resolve billing disputes faster.

Product Design UX Research
Stripe Billing

TL;DR

  • Problem: Disputes require explaining variance + drivers + finality of information
  • Gap: Stripe shows totals, but dispute explanation is manual assembly
  • Concept: "Explain" drawer per invoice line item
  • Outcome: Faster credible receipts + fewer back-and-forth loops

1. Motivation and context

1.1 Online critiques that prompted me to explore usage-based billing

The direction for this memo came from a few sources of developer feedback.

1. A DEV post describing usage-billing debugging as painful when a customer disputes charges, mainly because it's hard to reconstruct how a total came to be.

"When a customer disputes a charge, good luck. Aggregation happens in Stripe's black box with zero visibility into how totals are calculated." 1
DEV post about Stripe usage billing challenges

2. I encountered an OSS project (StripeMeter) on Hacker News made to help consumers answer the question "why is my bill higher than expected?" using real time tracking/projections.

"It solves the classic SaaS pain of 'why is my bill higher than expected?' by giving real-time usage tracking with live cost projections." 2
Hacker News discussion about StripeMeter

I interpreted these signals as evidence that there's room to explore a more efficient way to provide some more clarity and confidence when encountering billing disputes.

Sources

1.2 Validating this problem area

Usage-based billing quickly became an attractive area for me to explore because it's high stakes and deeply connected to trust between merchant & consumer.

Its challenges are also well documented in Stripe's Docs under "What challenges come with usage metering?"

Stripe docs on usage metering challenges
Stripe analytics API documentation

Stripe's analytics API is positioned as a way to build custom dashboards and reports.

This memo focuses on post-invoice disputes where trust can be fragile and teams need fast, credible explanations.

2. Current Product

How Stripe's usage billing works

Stripe's direction (as I understand it) is: make usage billing easy to set up, record, and analyze at an aggregate level, without forcing every merchant to build metering infrastructure from scratch.

3. The Current Operator Experience

A typical dispute scenario

Scenario: A customer emails: "My January bill is $500 higher than December, why?"

  1. The operator (founder/support/finance/dev) opens the invoice and sees something like: API calls: 7,000 × $0.10 = $700
  2. That invoice line item answers what Stripe charged but not the questions the operator needs to resolve the dispute:
    • What is the variance/change for the period?
    • Who/what caused the change?
    • Is this number final? Or is it still shifting due to processing delays?
    • What can I share that a non-technical customer will accept as "receipts"?

Core Assumption: Stripe has their analytics API but during disputes, the operator would benefit from a guided explanation workflow instead of just the ability to query pieces of information.

4. Narrowing the Scope

Job To Be Done

When a customer disputes a metered invoice, I need to explain the charge credibly and close the issue.

Non-Goals:

5. The Gap + Opportunity

Current product intent vs. the dispute problem

Current product intent: Stripe's Meter Usage Analytics API is designed to return aggregated usage so teams can build custom dashboards and reports.

My Hypothesis: Despite the above, when disputes occur post-invoice, merchants still have to translate and debug disputes into the context of an invoice specific explanation.

The Opportunity: An operator-side, invoice native indicator that doesn't introduce new data, but standardizes how Stripe's existing primitives are assembled at the dispute moment. This way operators can respond faster and more confidently without having to stitch context across different places.

Customer Dashboard (built by merchant) Proposed Fix (Stripe-native)
Helps customers understand their usage over time Helps operators explain this billed charge on a specific invoice
Might show drivers/breakdowns if the merchant builds it Starts from the line item and pulls the most available breakdowns automatically
Shows "last updated" like any dashboard Makes it obvious if the total is still settling or was adjusted
Can't reliably tell what's correctable inside Stripe Makes correction options clear (adjust vs credit/refund)

Even with analytics available, teams still do manual assembly work under pressure. An "Explain" indicator could bind analytics to the invoice context and generate a "receipt" for disputes.

6. Design Intent

Concepts and principles

7. Proposed Solution

"Explain" drawer on invoice line items

7.1 Why a drawer

7.2 Assumptions

7.3 Entry Point

On each metered invoice line item, add an Explain action using an icon. Clicking this opens a right side drawer.

Entry point wireframe

7.4 Default drawer view

Default drawer view wireframe

7.5 Group by dimensions

Allows operators to drill down by configured dimensions to identify specific drivers of usage changes.

Group by dimensions wireframe

7.6 Edge states

Edge states wireframe

8. Validation

What success looks like

Hypothesis: Operators can get answers faster with an invoice native workflow rather than raw analytics alone.

Validation + Metrics

Product Usage Signals