[Case 02]

From ~6 hours to minutes: In-app incident communication for Credit

I reframed a “maintenance screen” request into a scope-based incident UX system, powered by SDUI + feature flags - enabling fast activation and consistent routing across mobile + web.

Impact: ~36k customers impacted / 120 incidents (Sep-Mar)

Impact: ~36k customers impacted
/ 120 incidents (Sep–Mar)

[Industry]

Fintech

[My Role]

Product Designer

[Platform]

Mobile + Web

Context

Credit is a high-trust domain: contracting, payments, renegotiation. During incidents, customers don’t think “bug” - they think risk: Did I lose access? Will payments fail? What still works?

Between Sep ’24–Mar ’25, Credit had 120 incidents (16 critical) impacting ~36k customers (Looker Studio). The cost wasn’t only downtime - it was ambiguity, which erodes trust and increases operational pressure.

Problem

The original request was “design a maintenance screen.” But Credit wasn’t one flow - it was a system with:

  • Multiple products (Giro Fácil, Capital de Giro, Renegotiation)

  • Multiple entry points (home grid, Credit hub, top card, deep links)

  • Multiple failure levels (credit-wide vs product vs action)

Before, incident communication was fragmented and slow: customers hit generic errors (or no guidance), retried in loops, and escalated to Support. And because many surfaces depended on mobile/web releases, comms often arrived late even when the incident was already known internally.

Before

Different entry points collapsed

into the same dead end

After

My contribution
  • Led end-to-end UX/UI for incident communication across mobile + web (Credit)

  • Reframed a “maintenance screen” request into a reusable incident system

  • Mapped 50+ scenarios (scope × entry point × eligibility) to avoid happy-path gaps

  • Shipped with Engineering via SDUI + feature flags, enabling activation in minutes (no release dependency)

Process

What started as “design a maintenance message” became a system. I anchored the solution on two levers:

  1. Scope (what’s affected): credit-wide vs product vs action

  2. Entry point (how users arrive): which defines the right friction level (quick check → deep dive)

In quick Support check-ins, the recurring questions were always the same:

Is this temporary or did I lose access? What’s affected? How fresh is this info?

So I designed the surfaces to answer those consistently - using “Last updated” instead of unreliable ETAs.

Benchmarks: Layered comms is the norm

Benchmarks: Layered comms is the norm

Benchmarks: Layered comms is the norm

Internal: We had pieces, not a system

Internal: We had pieces, not a system

Internal: We had pieces, not a system

Support: Users ask the same 3 things

Support: Users ask the same 3 things

Support: Users ask the same 3 things

Solution

To make the system consistent at scale, I reduced incident UX to two levers:

1) Scope - what failed
Credit-wide · Product-level · Action-level
Scope defines what must be blocked vs what stays available - and what the details page must clarify.

2) Entry point - how the user arrived
Home grid · Credit hub · Top card · Inside-flow · Deep link
Entry point defines friction: quick status for “just checking,” deeper explanation only when needed.

From there, I shipped a reusable set of surfaces:

  • Quick status (bottom sheet) for silent checking behavior

  • In-context message at the point of failure (without blacking out the whole product)

  • Entry intercept when the incident is broad and unavoidable

  • Canonical details page with trust requirements (scope + last updated + next steps)

Why no ETA: we rarely had a reliable “back at X time,” and keeping that updated in UI would be costly and risky. Instead, we used “as soon as possible” plus a “last updated” timestamp to give reassurance with information we could actually keep fresh.

Impact

Speed: Engineering reported time to publish in-app incident comms dropped from ~6 hours to minutes (engineering metric - comms/publish time).

Leverage: This became a reusable SDUI incident pattern other teams could replicate - not a one-off Credit fix.

What we set up to measure (post-launch): incident UI reach + user actions; support contact rate among exposed users; and publish speed during incidents.

Learnings & next steps

Reliability communication is a product system — not an error message. At scale, scope + entry point are what keep UX consistent without over-blocking.

If I had more time, I’d improve two things:

  • Operational autonomy: enable Support/Comms to update status + “last updated” via a lightweight admin control (less dependency on Engineering).

  • Company-wide consistency: validate this pattern across other domains beyond Credit to cover a broader set of error/incident scenarios with the same system logic.

Select this text to see the highlight effect