AT&T · Design Systems · 2024–2026

Payment method:
one component,
every dollar
AT&T collects.

Every payment path in the account experience ends at the same question: how do you want to pay? I designed the shared component that answers it — used across FastPay, Payment Center, SplitPay, AutoPay, and add-on purchases, where a single improvement compounds across all of them.

What I ownedI led one designer. I defined the flows and the full state inventory, got six payments flows to agree on one component instead of forking it, and coached the build day to day. I decided which states were launch-blocking.

My roleUX Lead · led 1 designer
TypeShared, reusable component
Used inPayments Center · Installments · TXT-2-PAY
TimelineOngoing · 2024–2026
ContextsAuthenticated, 1FA & unauthenticated
Why component work has outsized leverage
6+Flows sharing one component

Single-line tender, multi-account payment, installment payoff, AutoPay, TXT-2-PAY enrollment and add-on purchases all run on the same selection pattern.

3Saved payment profiles

What a customer can store — enough for a personal card, a business card, and a bank account, without a list that needs scanning.

~35%Silent failures found

AutoPay research showed about a third of method changes stalled at selection — customers believed they were done. That finding reshaped the commit step.

1 → manyFix once, improve everywhere

A single improvement to method selection propagates to every flow that collects money, instead of being rebuilt five times.

The problem

The same question, asked five different ways.

Paying a bill, enrolling in AutoPay, settling a SplitPay share, adding device protection, buying a data pass — every one of those journeys converges on the same moment: choose a payment method, or enter a new one.

Historically, each flow solved it slightly differently. Different layouts, different card-entry behavior, different error handling, different rules about saving. That inconsistency cost twice: customers relearned the interaction in every context, and every fix had to be made five times.

The design bet: treat payment method selection as infrastructure rather than a screen. Build it once, handle the hard states properly, and let every flow inherit the improvements.

Repetition (danger level 1 of 3)

Re-entering the same card

Without saved profiles, returning customers retyped card details every cycle — a large source of avoidable friction in payment.

Inconsistency (danger level 2 of 3)

Five flows, five behaviors

The same task looked and behaved differently depending on where a customer encountered it, forcing them to relearn it each time.

Ambiguity (danger level 3 of 3)

Saved, selected, or committed?

Selecting a method and committing it are different actions — and when the component blurred them, customers left transactions unfinished.

My role

Designing the piece that every payment depends on.

Component work is unglamorous and disproportionately valuable. This one carries authenticated, semi-authenticated, and fully unauthenticated contexts; card, bank, and digital wallet; saved and one-time methods; consumer and business accounts. Getting it right means every payment flow gets better at once.

Designed the shared component

Selection, entry, validation, and confirmation states shared across FastPay, Payment Center, SplitPay, AutoPay, and add-on purchase flows.

Introduced saved payment profiles

Up to three saved methods per customer, extended into SplitPay — which measurably improved completion for returning payers.

Handled every auth context

The component behaves correctly whether the customer is fully authenticated, in a semi-authenticated flow, or entirely unauthenticated in FastPay.

Owned the failure states

Card declines, expired methods, bank sign-in attempt limits, unsaved-card warnings, merchant fee disclosure, and deletion consequences.

Made selection distinct from commitment

The AutoPay research showed what happens when those blur — roughly a third of customers stopping at selection, believing they were done.

Scaled it across products

Extended to card-on-file for fiber and AIA, business accounts, and rewards redemption without fragmenting the pattern.

How I led

One designer, six flows, zero forks.

A shared component has more stakeholders than any feature. I set the pattern and the rules, got every payments team to commit to one component instead of their own fork, and coached the designer building it out day to day.

Team: 1 designer · Partners: Payments Product, Fraud & Risk, Engineering, Content & Legal, Third-party partners, Research, Fiber & AIA

Frame

Mapped every state before any screen

Defined the flows and the full state inventory — saved, expiring, expired, declined, last-card, system failure — across authenticated, 1FA, and unauthenticated contexts.

Align

Got six flows to share one pattern

Presented the component strategy to Business, Product, and senior leadership partners and secured approval to consolidate instead of rebuilding it per flow.

Coach

Daily sessions, critique, standards

Ran daily working sessions with the designer, plus design critiques, peer reviews, and Design Standards reviews so the component held up in every context.

Decide

Owned the go / no-go for design

Gave the design green light at release checkpoints and decided which states were launch-blocking — because a payment component is judged on its worst day.

The journey

Build once, improve everywhere.

Each release extended the same component into another context rather than spawning a new one — which is how a shared pattern earns its keep.

Saved profiles lifted SplitPay completion by 21%

Simply offering the ability to save a payment method improved SplitPay completion by 21% — with a compounding effect as returning customers gained a one-click experience.

  1. 0.00.0
    2024 · Foundation

    Saved payment profiles

    Customers can store up to three payment profiles, turning a repeated data-entry task into a single selection for returning payers.

    C.360
  2. 16.016.0
    May 2025 · SplitPay

    Extended to split payments

    Saved profiles reached the SplitPay flow, immediately improving completion and setting up one-click payment for returning line owners.

    C.045
  3. 18.02.0
    2025 · Trust

    Fraud controls and disclosure (danger level 1 of 3)

    Merchant fee disclosure in the selector modal, bank sign-in safeguards, and fraud protections designed in without adding steps for legitimate customers.

    C.345
  4. 22.04.0
    Late 2025 · Research

    Selection vs. commitment (danger level 3 of 3)

    The AutoPay investigation quantified what happens when the component lets customers believe selection equals commitment — ~35% silent failure. Separating the two cut it roughly in half.

    C.120
  5. 26.04.0
    2026 · Expansion

    Card on file for fiber and AIA

    Extended across product lines and onto the modern stack, unifying payment method handling for wireless, fiber, AIA, and business accounts. All six flows now run on the component, it is expanding into the shopping experience, and the average consumer account now stores two payment methods. It spreads easily because a flow only needs a button that opens the component in a modal or drawer.

    C.120

Months from kickoff · partial since last box · C. = heading · ! to !!! = danger

The work

Every state a payment method can be in.

The visible component is a list and a form. The design work is the surrounding set of states — saved, expired, declined, unsaved, deleted, ineligible — that determine whether a payment succeeds.

Shared across 6+ flows Auth, 1FA & unauthenticated Card, bank & digital wallet Expiry, failure & last-card states
01 · Selection

The list, and the default that matters

For a returning customer, the component never opens as a form. It opens as a confirmation — the saved method is already chosen, named, and shown with its last four digits, with Change payment method as a quiet secondary link rather than a required step.

That in-page summary is the whole argument. Most people pay with the same card every month, so the default path should be reading one line and pressing Pay $1,000.00. Only the minority who need to switch ever open the full list.

When they do, the modal carries the states that decide whether a payment succeeds. A selected card gets a filled border and tint — not just a checkmark. An expiring card carries an amber warning icon and “Your card is about to expire!” inline, where the customer is choosing, rather than as a decline three days later. Card networks are shown by logo so the list is scannable by recognition instead of reading.

Two details worth naming. Long nicknames truncate rather than wrap, which keeps every row the same height and the list scannable at a glance. And Add a new payment method sits below a divider marked OR, deliberately separated from Continue and Cancel — it's a different kind of decision and shouldn't compete with committing to a choice already made.

The Norton Secured badge beside the label answers the trust question our FastPay research surfaced: customers hesitated at handing over financial details without visible reassurance.

In pageMake a payment page with payment method summary showing a saved visa card and Change payment method link
In pageThe default state — method already selected, with a quiet Change payment method link. Most customers never open the list.
The listYour payment methods modal listing saved cards with selected state, expiring card warning, and Add a new payment method
The listSaved methods with selection state, network logos, and an inline expiry warning surfaced at the moment of choosing.
02 · Entry

Handing off without losing the customer

Adding a bank account is the hardest continuity problem in the component. The customer leaves our interface for a third-party verification partner — and if that handoff feels like being dumped onto another company's website, the payment doesn't happen.

So the handoff is designed, not defaulted. Every step here happens inside our modal, over our page, with our close control. The partner does the verification; we keep the frame.

The fork comes first. Before any credentials are requested, the customer chooses: Sign in to your bank for instant verification, or Enter details manually for anyone unwilling to hand bank credentials to a third party. Offering both is what keeps the reluctant customer in the flow instead of abandoning it.

Verification returns data, not a dead end. Routing and account numbers come back pre-filled and masked, and the only thing left is to name the account. The nickname field carries its own reason — “Please enter a nickname to save your bank details” — so the ask never feels arbitrary.

Back, not Cancel. The escape hatch returns to method selection rather than dropping the customer out of the payment entirely. Someone who opens bank entry and changes their mind is still trying to pay us.

The contextual message slot at the top of every step is deliberate component architecture: one reserved region rendering info, warning, or alert states — attempt limits, verification failures, maintenance notices — so those messages never get bolted on later in an inconsistent spot.

Choose a pathBank account modal offering Sign in to your bank or Enter details manually
Pick your bankSign in to your bank modal with twelve bank logos and a searchable list of over 1000 banks
Details returnedBank details returned with masked routing and account number and an empty bank nickname field
Name and saveBank nickname filled in with legal text and Save this bank button enabled
Confirmed in contextPayments center showing green success message confirming the payment method was updated
03 · The edge cases

It doesn't always go well — and that's the design work

A payment component is judged on its worst day, not its best one. Cards expire. Deletions fail. Someone tries to remove the only method keeping their service on. None of that is exceptional — at this volume it's daily, and every one of these states had to be drawn, written, and specified rather than left to a generic error page.

The colour system does the triage. Amber means act soon — a card approaching expiry, still usable today. Red means act now — already expired, will not process. Green means done, nothing more needed. A customer scanning this list should know the severity before reading a single word.

Warnings live inside the row they describe. “Your card is about to expire!” sits under the card it belongs to, not in a banner at the top of the modal. Global banners get dismissed and forgotten; a warning attached to the object survives scrolling and still makes sense three cards down.

The last-card state is the one most teams miss. Deleting your only saved method isn't the same action as deleting one of five — so it gets different copy: “You have only one payment method saved.” Same button, materially different consequence, and the interface says so before the tap rather than after.

And when the system itself fails, the message stays useful: “We were not able to delete your card at this moment. You can try again now or later.” It names what happened, offers a next step, and keeps the confirmation in place so nobody loses their position in the flow.

HealthyDesktop payment methods modal, selected card with Edit and Delete, amber expiring warning on another card
ExpiredMobile payment methods list with an expired card flagged in red at the top
RecoverableMobile full-screen modal showing an expired card with Edit and Delete actions
Last cardMobile confirmation warning that this is the only saved payment method before deleting
System failureDesktop modal showing a delete failure message in red above the delete confirmation
ResolvedDesktop modal with green success message confirming the payment method was deleted
04 · Reuse

The same component, six different jobs

The payoff of component work is only visible when you line up the contexts. Every screen here is the same payment method module — same Norton badge, same card summary, same Change payment method affordance — doing a materially different job each time.

What changes is the authority around it. A SplitPay payer sees Your balance and a fixed date, because they control one line and nothing else. An account holder sees Total balance, an account switcher and an editable date. An installment payoff adds reward points and a plan balance; TXT-2-PAY attaches the method to a text channel instead of a button. The component absorbs every one of those without forking.

That consistency is the product. A customer who learns to read the card summary once never relearns it — and because the pattern is shared, the expiring-card warning from the edge cases appears automatically in a flow nobody rebuilt to support it. Fix one state, improve every journey.

Semi-authenticated paymentMake a payment page with wireless and internet account switcher, total balance, editable date and payment method
SplitPay — Payer viewSplitPay payer tender for a single line showing your balance, fixed date and payment method
Installment payoffInstallment plan details page with payoff amount, payment schedule and payment method
DegradedMake a payment page with an expiring card warning on the payment method
HealthyMake a payment page with a healthy payment method and AutoPay signup offer
TXT-2-PAYPayments center with TXT-2-PAY enrollment, payment method and AutoPay discontinuation warning

Screens use placeholder (FPO) content and fictional account data.

Results

Why shared components pay off.

The clearest evidence is what happened to SplitPay when saved profiles arrived.

One component, six journeys

Where payment method selection appears across the account experience.

FastPay

Unauthenticated — no saved profile can be assumed

SplitPay payer

Semi-authenticated — pays only their designated portion

AutoPay & Payments Center

Authenticated — recurring commitment with real consequences

Installments & TXT-2-PAY

In-flow — payoff amounts and text-channel enrollment

What saved profiles unlocked

Returning payers move from full data entry to a single selection.

Retype
Before
full card entry each cycle
1-click
→
Select
After
up to 3 saved profiles
87% payment success rate on the SplitPay path using this component.

The states that decide whether a payment succeeds

Most of the design effort lives here, not in the happy path.

Silent failure

Selection mistaken for commitment — ~35% of AutoPay method changes

Stale method

Deleted or expired methods still attached to recurring payments

Context drift

The same task behaving differently in each flow, forcing customers to relearn it

Working across the org

The connector role.

A shared component has more stakeholders than any single feature — every team that touches money has an opinion about it, and any change ripples into flows I don't own. Most of my work here is negotiating a pattern that serves all of them without becoming a compromise that serves none.

Payments ProductAligned roadmap needs across FastPay, Payments Center, and AutoPay onto one component rather than three forks.
UX LeadOne payment pattern, every flow that collects a dollar
Fraud & RiskBuilt in fraud safeguards and disclosure without adding steps for legitimate customers.
EngineeringPartnered on the component API, content schema versioning, and card-on-file support across product lines.
Content & LegalOwned merchant fee disclosure, terms presentation, and error language that tells customers what to do next.
Third-party partnersDesigned the embedded bank-verification handoff so an external experience still feels like part of ours.
Design OrgContributed the pattern back to shared libraries so other teams inherit the hard-won states.
Research & VoCUsed session data to find where the component silently fails rather than where it visibly errors.
Fiber & AIA TeamsScaled card-on-file to new product lines without fragmenting the interaction model.

Just showing the ability to save the payment method seems to have already had a positive impact on SplitPay completion rates. Next month we should see an organic increase as these users come back and now have a one click payment experience.

— Lead Digital Customer Growth, on saved payment profiles

What I'd take forward

Lessons worth keeping.

  • Components compound. One improvement to payment method selection improved six journeys at once — the highest leverage available in design work.
  • Open as a confirmation, not a form. Most people pay with the same card every month; the default path should be reading one line and pressing pay.
  • Colour carries severity. Amber means act soon, red means act now, green means done — readable before a single word is.
  • Attach the warning to the object. A message inside the row it describes survives scrolling; a banner at the top does not.
  • Own the handoff. A third-party verification step that keeps our frame, our close control, and a Back link is the difference between a pause and an exit.

Where it's headed

Card-on-file expansion across fiber, AIA, and business accounts, tighter integration with AutoPay's redesigned guided flow, and continued migration onto the modern stack so every surface inherits the same behavior.

The goal is a customer who saves a payment method once and never thinks about it again — in any flow, on any product, at any authentication level.

Next projectAI WorkflowHow I lead AI like a team.
← All projects