Designing against silent failure in campaign sending.
Bunce is a B2B customer-engagement platform. Businesses send campaigns across email, SMS, WhatsApp, push and voice, paid for with credits from a subscription or wallet.
I designed a pre-send check that calculates what a campaign will really cost and, when the balance falls short, turns a silent failure into a clear choice.
TL;DR
- Customers could send campaigns without knowing if their balance covered them. Campaigns failed silently, several customers complained, and churn was a real risk.
- Cost was hard to predict: long SMS run onto extra pages, and personalisation changes message length.
- I designed a pre-send check that calculates the real cost, then leads to one of four clear outcomes.
- Short on credits: send to the recipients covered or top up. No credits: top up or save the broadcast. Variable cost: confirm charges first.
- Silence is worse than friction. Failures became decisions customers make knowingly.
The problem
Customers could start a campaign without knowing whether their balance could cover it. Campaigns failed partly or completely, and they found out only after sending.
Several customers complained about high failure rates, and the frustration put retention at risk, with a real possibility of churn.
- No visibility into whether the balance was enough
- No feedback at the moment of sending
- Partial sends silently left part of the audience unreached
Why cost was hard to show
Message length changes the price
An SMS that runs past one page is billed as two, so the same campaign can cost different amounts per recipient.
Personalisation changes the length
Tags like a first name make each message a different length, so the final cost can't be known exactly in advance.
Counting takes time
Working out pages across thousands of recipients is slow, so the check had to stay responsive.
The design question
How might we make the balance constraint visible before customers commit, without slowing down sending?
The approach
I compared doing nothing, blocking every short send, and reporting failures afterwards. I chose a pre-send check that shows the outcome and lets the customer decide. It runs when the customer hits Send and leads to one of four clear outcomes.
Send → Discover failure
Check cost → Decide → Send
1. Calculate before sending
A short loader counts message pages across every recipient, so the cost shown is real rather than a guess, and the wait is explained instead of a frozen button.
Calculating cost: counting message pages across 1,000 recipients
2. Not enough credits
A clear breakdown shows the balance, recipients, credits needed and top-up needed, and explains why: some messages run onto a second page.
The customer chooses: send to the recipients the balance covers, or top up the wallet.
A partial send becomes a decision, not a surprise.
Insufficient balance: send to the 87 recipients covered, or top up
3. No credits at all
Nothing is sent. The customer can top up, or cancel and save the broadcast so their work isn't lost.
No credits: top up, or cancel and save the broadcast
4. Cost may change
When personalisation tags could increase the cost, the customer is told before sending and chooses to continue and apply charges or cancel and save.
Additional charges: personalisation may increase the cost of each message
Details that matter
Work is never lost
Every blocking state offers "Cancel and save broadcast" instead of discarding the campaign.
Exact numbers, plain language
The modal names the exact count the balance covers, e.g. "Send to 87 recipients".
A final safeguard
Credits are re-checked and deducted in one step right before sending, since there are no refunds.
Reaching the rest
Recipients skipped by a partial send can be reached later with Bunce's existing resend feature.
Before vs after
By the numbers
4
clear outcomes for every send, so a shortfall is never silent
0
broadcasts thrown away when the balance falls short; every blocking state can save the campaign
1
final re-check, with credits confirmed and deducted in the same step right before sending
Impact
The redesign targets fewer unexpected failures, more campaigns delivered on the first attempt, and fewer support complaints about failed sends.
The failure rate wasn't measured before the redesign, so I don't claim a percentage reduction. The next step is to track it in production.
Key insight
Silence is worse than friction.
A short pause to calculate cost and a clear choice beat a fast send that fails without warning. Customers don't just need control. They need predictability.