The incident
Meridiano is a payments gateway. Merchants integrate once and call POST /v1/charges, and that one endpoint is the company's revenue. It deploys four times a day.
On 3 March a partner bank began refusing one range of card BINs. For eighty minutes about 4% of charges failed — roughly R$ 210 000 — and the dashboard stayed green the whole time. Average latency looked fine, because a declined charge fails fast. The error panel counted HTTP 500s, and the gateway was politely answering 200 with a declined body. Support found out from a merchant on Twitter.
Two days later somebody tried to close the blind spot in a hurry by adding merchant_id to every metric. Prometheus ran out of memory that night, and the team spent a morning getting their monitoring back before they could go near the original problem.
What you are building
Instrumentation and one dashboard an on-call engineer can use to say what is failing, how badly, and since when — and trust the answer.
Nobody wants a bigger dashboard. They want one that would have gone red on 3 March, and that stays standing under the traffic a merchant can point at it.
Starter
github.com/Tserewara/starter-dashboard-stayed-green — use it as a template, then make up.
The gateway is given, running four workers behind one port the way it does in production. So is a partner bank you can make slow, decline-happy or silent while traffic is running, and a load generator that can spread charges across as many merchants as you point it at.
There is no metrics code in it, no /metrics, no Prometheus, no Grafana, no dashboard and no alert rule. That part is yours, and how you build it is the thing you will be defending in the write-up.