What the job status notifier costs
A notifier that costs more than the goodwill it earns is a toy. This post is the cost breakdown: every AWS service this system touches, what each one adds up to at around 200 jobs a month, why the total lands near $2.30 — with SMS as the biggest swing — and what happens to the bill when the shop gets ten times busier.
Key takeaways
- About $2.30/month at roughly 200 jobs — around five stage changes each, so a little over a thousand transitions watched.
- SMS is the biggest variable line: every text is metered per message, so it grows fastest as you push more updates to text.
- The only real fixed cost is Secrets Manager — $0.40 per secret — for the SMS-sender and board credentials.
- One small Bedrock Haiku 4.5 call per update writes the wording; at this volume that’s well under half the bill.
- At ten times the volume the bill lands near $16, not $23 — the fixed lines don’t move, and email scales far cheaper than SMS.
Where the money goes
The notifier is serverless end to end. Nothing runs while the board is still, so there’s no instance ticking over overnight and no idle bill — you pay only when a job actually moves. At a typical small-shop volume — call it 200 jobs a month, each passing through about five stages, so a little over a thousand transitions watched and roughly 800 customer-facing updates sent — here’s the whole bill, line by line. Of those 800 updates, say about 250 go by SMS to customers who chose text and 550 by email, which is the split that shapes the table.
| AWS service | What it does here | Monthly |
|---|---|---|
| SNS (SMS) | Text updates to customers who chose SMS (~250 messages) | $0.90 |
| Bedrock (Claude Haiku 4.5) | One compose call per update (~800) | $0.40 |
| Secrets Manager | Two secrets — SMS sender, board access ($0.40 each) | $0.80 |
| DynamoDB (on-demand) | Jobs and stage history — small reads and writes | $0.06 |
| CloudWatch Logs | Function logs, 7-day retention | $0.05 |
| SES (outbound) | Email updates to customers who chose email (~550) | $0.04 |
| Lambda (Python 3.14, arm64) | Stage watcher, composer, sender, sweep, photo handler | $0.02 |
| S3 | Job photos, resized and expired after collection | $0.01 |
| SQS + DLQ | Buffering stage events to the composer | $0.01 |
| EventBridge (bus + Scheduler) | Stage-change events, board poll, daily sweep | $0.01 |
| AWS Budgets | Cost alarm (first two budgets are free) | $0.00 |
| Total | ~200 jobs/month | $2.30 |
The shape of that bill is the point. SMS is the largest line, and it’s the only one that’s genuinely sensitive to a design choice you make — how many updates you push to text rather than email. Each text is metered per message, so 250 of them outweigh everything the system actually does. The model that writes every message, by contrast, costs $0.40, because a Haiku 4.5 call on a short bundle of facts is a fraction of a cent. The watching, the matching, the photo handling, the sweep — all the real work — rounds to pennies, because it’s plain Python and tiny reads and writes.
The one real fixed cost
It’s worth naming Secrets Manager, because it’s the only thing here that costs money while the system sleeps. Two secrets at $0.40 each is $0.80 a month no matter what — more than a third of the bill at this volume — whether you move one job or a thousand. One holds the SMS-sender credential (the registered sender ID or number SNS delivers from); the other holds the board access the watcher uses to read stages. Everything else on the list is genuinely usage-priced and rounds to zero at idle, which is exactly what you want from a system that only does work when a job moves.
One cost that is not on this table: SMS pricing varies a lot by country and carrier — from a fraction of a cent for domestic transactional messages to several cents for some international destinations. The $0.90 here assumes mostly domestic texts; a shop sending internationally, or one that lets every customer pick SMS, would see that single line grow faster than all the others combined. That’s the real lever: email is effectively free at this scale, so steering customers who are happy with email toward email keeps the bill flat.
What ten times the volume costs
Push this to a busy shop — 2,000 jobs a month, ten times the volume — and the bill lands near $16, not $23. It’s sub-linear because the fixed lines don’t move: Secrets Manager stays at $0.80, the schedules and the bus stay at a cent, and AWS Budgets stays free. What scales is the genuinely usage-priced work — roughly $9 of SMS for ten times the texts, about $4 of Bedrock for ten times the messages, and a dollar or so more spread across DynamoDB, SES, Lambda, and logs. Even at that size, SMS is still the line doing the most to set the total, which is why the channel mix is the thing to watch as you grow.
The honest way to read this: the AWS bill is rounding error against the alternative. A shop phoning or texting 800 status updates a month by hand — and remembering to chase the stalled ones — is hours of stop-start interruption every week, and the chasing is the part that quietly never gets done. $2.30, or even $16, buys those hours back and closes the gap that turns into bad reviews. The few jobs that genuinely go wrong still get a person’s attention, because the sweep put them in front of the bench instead of letting them rot.
Design rules that shaped the cost
- Pay per move, not per hour. No always-on compute means no idle bill.
- Watch the channel mix. SMS is metered per message and is the line that grows fastest; email is nearly free.
- Spend the model sparingly. One short Haiku call per update, and only to write — never to decide a stage.
- Know your one fixed cost. Secrets Manager is the only thing that bills while the board is still.
- Cheap work stays cheap. Watching, matching, photos, and the sweep are plain Python and tiny reads.