UX Case Study Β· NBE Mobile

Redesigning the
Currency Exchange
Calculator

How applying core UX principles transformed a cluttered forex tool into a clear, trustworthy, and efficient banking experience.

Product
NBE Mobile App
Screen
Forex Calculator
Method
Heuristic Redesign
Problems Fixed
12 issues
01 β€” Context

Project Context & User Goals

The NBE Forex Calculator is used by Egyptian bank customers who need to convert between EGP and foreign currencies β€” for transfers, travel budgets, or financial decisions. The primary goal is speed and confidence: know "how much will I get?" without friction.

1
Open Screen
Navigate to Forex Calculator from home
β†’
2
Select Rate Type
Banknote or Transfer rate
β†’
3
Enter Amount
Type in how much to convert
β†’
4
See Result
Receive converted amount instantly
β†’
5
Take Action
Transfer, or view full price list
02 β€” Problem Definition

12 Issues Across Three Severity Levels

A heuristic evaluation of the original screen against Nielsen's 10 Usability Heuristics revealed 3 critical, 4 moderate, and 5 minor issues β€” all increasing cognitive load and reducing user confidence.

Critical Issues

Inconsistent Button Hierarchy

Three CTAs β€” Calculate, Back, Go to Price-List β€” at near-identical visual weight. "Back" is tertiary but only differs by gray fill.

SWAP Button Misplaced & Orphaned

Sits between Amount and Buy Currency with no visual relationship to what it swaps. Should be an icon button between the two currency selectors.

Rate Info Is Unstructured Raw Text

0.018801 USD and 1 USD = 53.19 EGP are plain body text with no label, container, or hierarchy. Users can't parse which is the live rate vs. the inverse.

Moderate Issues

Amount Field Has No Placeholder

Empty box with no currency symbol or hint. Users don't know if they type or wait for auto-fill.

️

Radio Buttons Are Non-Standard

The Banknote/Transfer toggle should be a segmented pill control β€” the correct mobile pattern for mutually exclusive binary options.

All-Caps Labels on Buttons

SWAP, CALCULATE, BACK β€” all-caps reduces readability. Sentence case is the modern iOS convention.

"Go to Price-List" Doesn't Belong Here

A completely different context competing with the primary CTA. Should be a secondary link, not in the action stack.

Minor Issues

Inconsistent Corner Radius

Card, dropdowns, buttons all have slightly different radii. Needs a unified radius token.

️

"1 EGP" Label Is Orphaned

No label prefix β€” reads as a stray debug string rather than a helpful unit indicator.

️

No Visual Feedback States

No disabled state on Calculate before amount is entered, no error handling implied.

️

Excessive Whitespace Below SWAP

Inconsistent spacing gap between SWAP and Buy Currency vs. the tighter spacing elsewhere.

️

Card Clipping at the Top

The green header is partially clipped by the screen edge β€” looks unintentional, not a deliberate design choice.

03 β€” Design Principles

6 UX Principles That Drove Every Decision

Every design decision in the redesign was anchored to a named UX principle. Here are the six principles that drove the most significant changes.

Hick's Law

Reduce choices to reduce decision time β€” fixes Problems #1, #7

The original action stack had three CTAs at near-identical visual weight. "Back" is a navigation escape. "Go to Price-List" is a completely different context. Both competed against the single task the user came to do.

Decision β†’ Calculate becomes the sole filled primary button. "Back" eliminated β€” the OS gesture handles it. "Go to Price-List" demoted to a text link. Decision time drops to near zero.
Fitts's Law

Size and position targets for the body they serve β€” fixes Problem #5

The original radio buttons were approximately 16Γ—16px β€” less than 40% of the 44px iOS minimum. A user with average thumbs had a meaningful error rate on every toggle interaction, before the core task even started.

Decision β†’ Replaced with a full-width segmented pill at 47px β€” exceeding the iOS HIG minimum. Active state uses a branded green gradient for immediate visual confirmation.
Gestalt β€” Proximity & Similarity

Group related elements; separate unrelated ones β€” fixes Problems #2, #3, #11

The SWAP button sat between unrelated elements. The rate values floated as uncontained plain text with no labels or hierarchy. Users couldn't parse which number was forward vs. inverse.

Decision β†’ Swap moved to the dividing line between the two currency rows β€” geometrically centered on what it swaps. Both rate values enclosed in a white card with labelled cells ("EGP β†’ USD"). Proximity communicates structure without extra text.
Nielsen β€” Aesthetic & Minimalist Design

Every UI element should earn its place β€” fixes Problems #6, #8, #9, #12

Four minor problems shared one root cause: all-caps labels creating visual noise; inconsistent radii; the orphaned "1 EGP" string; and the clipped green header. None contributed to the task.

Decision β†’ All labels changed to sentence case. Unified 14px radius token throughout. Orphaned label removed. Header flows as full-bleed gradient β€” no clipping.
Nielsen β€” Match Between System and Real World

Use language and conventions from the user's world β€” fixes Problems #4, #5

The empty amount field left users uncertain. "Sell Currency / Buy Currency" uses banking back-office terminology. At a currency desk, people say "I want to send Β£200" β€” not "sell GBP."

Decision β†’ Amount field given a "0" placeholder and live currency prefix. Labels rewritten to "You send / They receive." Flag emojis added as the real-world currency identifier.
Nielsen β€” Visibility of System Status

Keep users informed through continuous, appropriate feedback β€” fixes Problem #10

The original provided a result but showed no feedback state when the field was empty β€” the Calculate button looked identical whether blank or populated. No disabled state, no input validation, no error handling.

Decision β†’ Input uses type="text" inputmode="decimal" with a numericOnly() validator that strips non-numeric characters instantly. The receive field updates live on every keystroke.
04 β€” Implementation Steps

From Wireframe to High-Fidelity

Each step in the design process started with a structural wireframe β€” establishing layout, hierarchy, and logic β€” before being refined into the final high-fidelity UI. Right side shows the wireframe reasoning, left side shows the delivered design.

Wireframe
Step 1 β€” Rate Type Selector
[ RATE TYPE CONTROL ]
Active = filled dark Β· Inactive = ghost
Full width Β· Height 44px min (Fitts)

Why a segmented control?

The original radio buttons were 16Γ—16px β€” too small for reliable tapping and semantically mismatched to mobile conventions. A segmented pill control is the standard iOS pattern for mutually exclusive binary choices.

The wireframe established the full-width layout and the filled/ghost active state logic. In high-fidelity, the active tab received the brand green gradient β€” visually linking it to the primary Calculate CTA below, creating a consistent colour language for "primary action."

Principle: Fitts's Law (minimum 44px tap target) + Nielsen #2 β€” Match system to real world (segmented control is the mobile-native pattern)
High Fidelity
Rate Type Selector β€” Active: Banknote
Active: Transfer
Design tokens applied
Gradient: rgb(82,209,124) β†’ rgb(34,145,139) at 166Β° + rgba(0,0,0,.2) overlay. Height: 47px. Border-radius: 32px. Both states shown above.
Wireframe
Step 2 β€” Live Rate Card
[ RATE DISPLAY CARD ]
label Β· muted
label Β· muted
Dynamic β€” updates on currency change

Structuring unstructured data

The original design showed two raw numbers floating in the screen with no container, no labels, and no visual relationship to each other. Users couldn't tell which was the forward rate and which was the inverse.

The wireframe established the two-cell card with a vertical divider β€” making the two values spatially distinct but visually grouped. Direction labels ("EGP β†’ USD") were added directly above each value. In high-fidelity, the labels use a muted green #92a699 and values use monospace type for numerical clarity.

Principle: Gestalt Proximity (grouped card) + Nielsen #1 β€” System Status (labels always reflect selected pair)
High Fidelity
Live Rate Card
EGP β†’ USD 0.018801
USD β†’ EGP 53.19
After currency swap (EUR / GBP)
EUR β†’ GBP 0.8568
GBP β†’ EUR 1.167
Design tokens applied
Direction label: #92a699 Β· 11px. Rate value: #1a1a1a Β· 17–20px. Container: border-radius: 32px. Divider: 3px solid #f5f5f5. Both states show dynamic label updating.
Wireframe
Step 3 β€” Exchange Input Card
[ EXCHANGE CARD ]
Swap = circle Β· centered on divider line
Currency pill = flag + code + chevron
Input = text field (no spinners)

Positioning the swap action correctly

The wireframe established the most critical layout decision: placing the swap button on the horizontal dividing line between the "You send" and "They receive" rows. This is the only position where it is spatially adjacent to both elements it acts on.

The currency pill (flag + code + chevron) was designed in wireframe as a compact interactive affordance β€” small enough to not compete with the amount values, large enough to tap confidently. In high-fidelity, the green brand gradient was applied to the swap button to match the primary action family.

Principle: Gestalt Proximity (swap between what it swaps) + Nielsen #2 β€” Real World Match (flag as currency identifier)
High Fidelity
Exchange Input Card
You send
USD 1,000
πŸ‡ΊπŸ‡Έ USD
They receive
EGP 53,190
πŸ‡ͺπŸ‡¬ EGP
Design tokens applied
Swap: 40Γ—40px circle Β· brand gradient Β· custom exchange.svg with drop shadow filter. Currency pill: border: 0.5px solid #d6e4db Β· border-radius: 8px.
Wireframe
Step 4 β€” CTA Hierarchy
[ ACTION STACK β€” 3 tiers ]
PRIMARY Β· filled Β· brand color
SECONDARY Β· outline Β· neutral
TERTIARY Β· text only Β· no border
Visual weight: β–ˆβ–ˆβ–ˆβ–ˆ Β· β–ˆβ–ˆβ–‘β–‘ Β· β–ˆβ–‘β–‘β–‘
Hierarchy = 1 dominant CTA at a time

One dominant action, always

The original screen had three buttons at near-identical visual weight β€” CALCULATE, BACK, and GO TO PRICE-LIST β€” all competing for attention simultaneously. This violated Hick's Law: the more options at equal weight, the longer the decision time.

The wireframe established a strict 3-tier hierarchy before any colour was applied: filled (primary), outlined (secondary), text-only (tertiary). In high-fidelity, the gradient was applied only to the primary action β€” Calculate β€” making it the only element that fights for attention. Clear recedes to an outline, and the price list becomes a quiet text link.

Principle: Hick's Law (1 dominant action) + Nielsen #8 β€” Aesthetic & Minimalist Design (remove competing elements)
High Fidelity
CTA Stack β€” 3 Tiers
View full price list
Primary β€” filled gradient, full visual weight
Secondary β€” outline only, recedes visually
Tertiary β€” text + icon, no container
Design tokens applied
Primary height: 52px Β· border-radius: 16px. Secondary border: 2px solid #d6e4db. Tertiary: no border, no background β€” gradient icon only.
05 β€” Decision Log

Every Change Mapped to Its Principle

ElementChange MadePrincipleRationale
Rate type selectorRadio buttons β†’ Segmented pillHick's Law
Fitts's Law
Reduces friction; meets 44px iOS minimum tap target
Rate displayFloating text β†’ Labelled two-cell cardGestalt ProximityGroups related data; users immediately know what each value means
Rate labelsStatic β†’ Dynamic from selected pairNielsen #1 β€” StatusSystem always reflects current state; labels match user's selection
Amount inputEmpty β†’ "0" placeholder + prefixNielsen #2 β€” Real WorldRemoves ambiguity; users know exactly what to type and in what unit
Field labels"Sell/Buy Currency" β†’ "You send / They receive"Nielsen #2 β€” Real WorldConversational language matches how users think about transfers
SWAP controlFull-width button β†’ Circular icon on dividerGestalt Proximity
Fitts's Law
Positioned between the two fields it affects; spatially communicates function
Currency selectorsText dropdowns β†’ Flag + code + chevron pillNielsen #2 β€” Real WorldFlags are the universal real-world currency signal; chevron signals affordance
CTA hierarchy3 equal buttons β†’ Primary + Ghost + LinkHick's LawSingle dominant action eliminates decision paralysis
Button labelsALL-CAPS β†’ Sentence caseNielsen #8 β€” AestheticMatches iOS conventions; improves readability and modernity
Input validationtype="number" β†’ text + numericOnly()Nielsen #1 β€” StatusPrevents bad input instantly; removes spinners; triggers numeric keyboard
Container structureFlat stacked β†’ Tab card + overlapping calc cardGestalt ProximityVisual depth communicates hierarchy without adding elements
06 β€” Outcomes & Reflection

Measured Improvements

While this is a design exercise rather than a live A/B test, the improvements can be projected against established UX benchmarks and mobile interaction research.

6

↓
Interactive elements above fold (9 β†’ 3)

3β†’1

Primary CTA candidates β€” Hick's Law applied

44px

All tap targets meet iOS HIG (was 16px)

100%

%
Rate labels now reflect selected currencies

Error

↓
Input validation prevents non-numeric characters

0

Orphaned UI strings remaining (was 3)

Good design, when it's done well, becomes invisible. It's only when it's done poorly that we notice it.

Jared SpoolUX researcher & author

Task Completion

The critical path now requires zero extra steps. The receive field updates live, so users get their answer before pressing any button.

Cognitive Load

Applying Gestalt principles and Hick’s Law, 9 independent elements were consolidated into 3 grouped sections. Users process less at once.

Real-World Language

“You send / They receive” aligns with how users describe transfers in conversation, reducing the need for mental translation.

Mobile Fidelity

Every control now conforms to iOS HIG β€” segmented controls, minimum tap areas, numeric keyboard, bottom-anchored primary actions.

Core Insight

Every friction point had a root cause in a violated UX principle. None were arbitrary β€” they were predictable consequences of ignoring established knowledge about how humans perceive and interact with digital interfaces.

  • Radio buttons violated Fitts's Law β€” too small for touchscreens.
  • The misplaced SWAP violated Gestalt proximity β€” not near what it acts on.
  • Three equal CTAs violated Hick's Law β€” forced an unnecessary choice.
  • All-caps labels violated Nielsen's aesthetic heuristic β€” noise with no utility.
07 β€” Live Implementation

Try the Redesigned App

The fully functional redesigned Forex Calculator β€” built from the Figma design spec with all UX improvements applied. Select currencies, enter an amount, and see live conversion.

↑ Fully interactive β€” tap tabs, select currencies, enter amounts to see live conversion

Note: The conversion rates shown in this prototype are static values based on the rates at the time of design. They do not reflect live market data. In a production implementation, rates would be fetched in real time from NBE's forex API.