Audit report · Sample
Mobile banking app
Executive summary
The app works well for confident customers on a good connection. It fails people on slow networks and people who use a screen reader, and in two places it puts customers’ money at risk. Both of those are quick to fix.Your team fixed both critical findings and every money-handling issue. 16 of 20 findings are confirmed gone. Four remain open, three of them scheduled for the next release.
2016 / 20
FindingsConfirmed fixed
2
2 openAll fixed
7
7 open1 still open
11
11 open3 still open
Fund first
Make every payment wait for the bank’s confirmation, and make retries safe, so no one is charged twice or charged for nothing.
Make the transfer form usable with a screen reader and keyboard. Today it can’t be submitted at all.
Keep customers’ work when the network drops, and give codes long enough to arrive.
Scope
- Client
- A fictional retail bank
- Platforms
- Android app 4.2 and web banking
- Journeys
- Sign-up and verification, Send money, Pay a bill, Statements
- Devices
- 12 devices, from entry-level Android to recent iPhones
- Networks
- 3 network profiles: 4G, throttled 3G and dropping 2G
- Inspected
- 3–14 March 2026
- Re-checked
- 20 April 2026
Lens scorecards
Overall5884/ 100
Each lens is scored out of 100 from the share of checks passed, weighted by severity. The pale mark shows the score at the first report.
Usability
4 findings · 1 major, 3 minor
6886+18
Accessibility
6 findings · 1 critical, 2 major, 3 minor
4188+47
System logic
3 findings · 1 critical, 1 major, 1 minor
5594+39
User habits
2 findings · 1 major, 1 minor
7480+6
Operational
5 findings · 2 major, 3 minor
5271+19
Findings register
Sorted by severity, highest first. Open any finding for its evidence, steps and fix.
Showing all 20 findings
CriticalAUD-003Retrying a timed-out transfer sends the money twiceSystem logic · Send moneyOpenFixed
Evidence · Log
Two debits 38 s apart with the same amount and recipient, after the app showed “Request timed out. Try again”.
Steps to reproduce
Throttled 3G profile. Send money, let the request time out, then tap Try again.
Recommended fix
Send an idempotency key with each transfer so the server ignores a repeated request.
Re-check
Pending. We inspect this again once your fix is live.Retries reuse the key. No duplicate debits in 30 attempts.
CriticalAUD-009Transfer form can’t be completed with a screen readerAccessibility · Send moneyOpenFixed
Evidence · Recording
TalkBack reads the amount field as “Edit box”. With no label, the form can’t be submitted.
Steps to reproduce
Android 12 with TalkBack on. Open Send money and move to the amount.
Recommended fix
Add a visible label tied to the field, and announce validation errors as they appear.
Re-check
Pending. We inspect this again once your fix is live.Completed end to end with TalkBack and VoiceOver.
MajorAUD-005Keyboard focus jumps from the PIN to the footer linksAccessibility · Sign-up and verificationOpenFixed
Evidence · Recording
After the PIN, Tab moves to “Terms” and “Privacy”, skipping Sign in. It is reachable only by tabbing back.
Steps to reproduce
Web banking, keyboard only. Tab through the sign-in form.
Recommended fix
Follow the visual order in the markup, and remove the positive tabindex values.
Re-check
Pending. We inspect this again once your fix is live.Focus order now follows the screen.
MajorAUD-006The sign-up code often arrives after it has expiredOperational · Sign-up and verificationOpenFixed
Evidence · Log
On one network, 9 of 20 SMS codes arrived after the 60-second limit, the slowest after 2 min 40 s.
Steps to reproduce
SIM on the slower network. Start sign-up and wait for the code.
Recommended fix
Give codes 5 minutes, and offer a voice call after 60 seconds.
Re-check
Pending. We inspect this again once your fix is live.Codes last 5 minutes. Voice fallback works.
MajorAUD-013Hints and secondary buttons fail contrast at 2.5 : 1Accessibility · Send moneyOpenFixed
Evidence · Screenshot
Grey #9AA3AD on white measures 2.5 : 1 against the 4.5 : 1 that WCAG 2.2 AA requires.
Steps to reproduce
Any screen with a field hint or a Cancel button.
Recommended fix
Darken the secondary grey to #5F6B78 (5.4 : 1) in the design tokens.
Re-check
Pending. We inspect this again once your fix is live.Token changed. Every screen passes AA.
MajorAUD-014Payment marked successful before the mobile-money callback returnsSystem logic · Pay a billOpenFixed
Evidence · Recording
On a throttled connection the success screen appears, the callback then fails, and the customer is charged with no order.
Steps to reproduce
Android 10, 3G profile with 2 s latency. Pay any bill, then lose the network for 5 seconds.
Recommended fix
Show a pending state with a reference number until the callback confirms.
Re-check
Pending. We inspect this again once your fix is live.Pending state shown until confirmation.
MajorAUD-015Shared family phones stay signed in to the last customerUser habits · Sign-up and verificationOpenStill open
Evidence · Recording
Three participants share a phone with relatives. The app opens straight to the last person’s balance.
Steps to reproduce
Sign in, close the app, and hand the phone to someone else.
Recommended fix
Ask for the PIN when the app returns from the background, and offer quick account switching.
Re-check
Pending. We inspect this again once your fix is live.PIN prompt added. Account switching still to come.
MajorAUD-016Back on the review step clears the whole transferUsability · Send moneyOpenFixed
Evidence · Recording
A participant went back to fix the amount and had to retype the account number, recipient and reason.
Steps to reproduce
Fill in a transfer, reach Review, then tap Back.
Recommended fix
Keep the form state when going back a step.
Re-check
Pending. We inspect this again once your fix is live.Fields are kept.
MajorAUD-017Draft transfer lost when the network dropsOperational · Send moneyOpenFixed
Evidence · Recording
On a dropping 2G profile, the connection fails on submit and every field is cleared.
Steps to reproduce
2G profile that drops for 10 seconds. Fill in a transfer and tap Continue.
Recommended fix
Keep the draft on the device and retry when the connection returns.
Re-check
Pending. We inspect this again once your fix is live.Draft kept and resent on reconnect.
MinorAUD-001National ID field gives no example of the expected formatUsability · Sign-up and verificationOpenFixed
Evidence · Recording
Four of eight participants typed the ID with spaces and were rejected with “Invalid ID”.
Steps to reproduce
Any device. Start sign-up and enter a 16-digit ID with spaces between the groups.
Recommended fix
Accept spaces and strip them, and show the format as a hint under the field.
Re-check
Pending. We inspect this again once your fix is live.IDs with spaces are accepted. Hint added.
MinorAUD-002Labels are cut off when text is enlarged past 130%Accessibility · Send moneyOpenFixed
Evidence · Screenshot
At 150% text size, “Recipient account” reads “Recipient a…” and the fee label disappears.
Steps to reproduce
Android 12, display text size at its largest. Open Send money.
Recommended fix
Let labels wrap onto a second line instead of truncating.
Re-check
Pending. We inspect this again once your fix is live.Labels wrap at every text size we tested.
MinorAUD-004The 96 MB install fails on nearly full entry-level phonesOperational · Sign-up and verificationOpenStill open
Evidence · Screenshot
Play Store “Not enough space” on a 16 GB phone with 180 MB free, the typical state of the devices we sampled.
Steps to reproduce
16 GB Android phone with under 200 MB free. Install from the Play Store.
Recommended fix
Ship an app bundle and move the onboarding video to a download on first use.
Re-check
Pending. We inspect this again once your fix is live.Scheduled for release 4.4.
MinorAUD-007Customers screenshot the payment reference instead of copying itUser habits · Pay a billOpenFixed
Evidence · Recording
7 of 9 participants took a screenshot to share the reference. None used the Copy button.
Steps to reproduce
Pay any bill and reach the confirmation screen.
Recommended fix
Add a Share button that sends the reference as text, and make the reference large enough to read in a screenshot.
Re-check
Pending. We inspect this again once your fix is live.Share button added. Reference is larger.
MinorAUD-008Customers don’t recognise the word “Beneficiary”Usability · Send moneyOpenFixed
Evidence · Recording
Branch staff said they explain the word “several times a day”. Five of eight participants hesitated on it.
Steps to reproduce
Open Send money and look at the first step.
Recommended fix
Use “Who are you sending to?” and “Saved people”.
Re-check
Pending. We inspect this again once your fix is live.Copy changed in English and Kinyarwanda.
MinorAUD-010Error messages are shown but never announcedAccessibility · Pay a billOpenFixed
Evidence · Recording
A wrong meter number turns the field red. TalkBack says nothing, and the customer waits.
Steps to reproduce
TalkBack on. Pay a bill with an invalid meter number.
Recommended fix
Put errors in a live region, and move focus to the first field with an error.
Re-check
Pending. We inspect this again once your fix is live.Errors are announced.
MinorAUD-011Statements take 41 seconds to load on 2GOperational · StatementsOpenStill open
Evidence · Log
The screen loads 2.4 MB, mostly merchant logos, before any transaction appears.
Steps to reproduce
2G profile. Open Statements for the last 30 days.
Recommended fix
Load the transactions first, and the logos later or not at all on slow connections.
Re-check
Pending. We inspect this again once your fix is live.Text loads first. Logos are still 2.1 MB.
MinorAUD-012The home balance can be 10 minutes old without saying soSystem logic · Send moneyOpenFixed
Evidence · Screenshot
After a transfer, the home screen showed the old balance for 9 min 50 s.
Steps to reproduce
Send money, then return to the home screen.
Recommended fix
Refresh the balance after any transaction, and show when it was last updated.
Re-check
Pending. We inspect this again once your fix is live.Balance refreshes, with a time stamp.
MinorAUD-018Tab bar icons have no accessible namesAccessibility · StatementsOpenFixed
Evidence · Recording
VoiceOver reads the five tabs as “Button, button, button, button, button”.
Steps to reproduce
iPhone with VoiceOver on. Swipe across the bottom tab bar.
Recommended fix
Give each tab a label: Home, Send, Pay, Statements, Profile.
Re-check
Pending. We inspect this again once your fix is live.Each tab is announced.
MinorAUD-019Sessions expire mid-form on slow connectionsOperational · Pay a billOpenStill open
Evidence · Log
The 2-minute timeout counts time spent waiting for the network, so slow pages use up the session.
Steps to reproduce
2G profile. Start a bill payment and complete it at a normal pace.
Recommended fix
Count only idle time, and warn 30 seconds before the session ends.
Re-check
Pending. We inspect this again once your fix is live.Warning added. Timeout still counts network time.
MinorAUD-020Transfer fee shown only after the PIN stepUsability · Send moneyOpenFixed
Evidence · Recording
Customers pause for about 6 s when the fee first appears after the PIN.
Steps to reproduce
Send money to another bank and enter the PIN.
Recommended fix
Show the fee on the amount screen, before the PIN is asked for.
Re-check
Pending. We inspect this again once your fix is live.Fee shown with the amount.
No findings match both filters.
Fix plan
The findings grouped into an order of work, so the riskiest rust goes first.
Now
This sprintNext
Next release- AUD-005Keyboard focus jumps from the PIN to the footer links
- AUD-006The sign-up code often arrives after it has expired
- AUD-013Hints and secondary buttons fail contrast at 2.5 : 1
- AUD-015Shared family phones stay signed in to the last customer
- AUD-016Back on the review step clears the whole transfer
- AUD-020Transfer fee shown only after the PIN step
- AUD-010Error messages are shown but never announced
Later
Within the quarter- AUD-001National ID field gives no example of the expected format
- AUD-002Labels are cut off when text is enlarged past 130%
- AUD-004The 96 MB install fails on nearly full entry-level phones
- AUD-007Customers screenshot the payment reference instead of copying it
- AUD-008Customers don’t recognise the word “Beneficiary”
- AUD-011Statements take 41 seconds to load on 2G
- AUD-012The home balance can be 10 minutes old without saying so
- AUD-018Tab bar icons have no accessible names
- AUD-019Sessions expire mid-form on slow connections