Sample report

The report your
team would get.

A full audit of a fictional mobile banking app. Filter the findings, open any one for its evidence and fix, then switch to the re-check to see what changed.

Audit report · Sample

Mobile banking app

01

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

Critical

2

2 openAll fixed

Major

7

7 open1 still open

Minor

11

11 open3 still open

Fund first

  1. Make every payment wait for the bank’s confirmation, and make retries safe, so no one is charged twice or charged for nothing.

    AUD-003AUD-014

  2. Make the transfer form usable with a screen reader and keyboard. Today it can’t be submitted at all.

    AUD-009AUD-005AUD-013

  3. Keep customers’ work when the network drops, and give codes long enough to arrive.

    AUD-017AUD-006

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
02

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

03

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.

04

Fix plan

The findings grouped into an order of work, so the riskiest rust goes first.

Where’s the rust in your product?

Book a free scoping call. We’ll learn what you’ve built and who uses it, then send a fixed-price proposal within [RESPONSE TIME].

Founding clients: we’re taking on [N] organisations this year at a reduced rate, in exchange for permission to publish a case study.