Back

UX Case Study · Field Sales SaaS · Image Intelligence

On-Device Image Quality
Detection at Capture

Designed a real-time feedback system that flags poor-quality cooler images the moment a sales rep takes them — eliminating the costly back-office rejection loop and reducing fraudulent image submissions by surfacing errors before the rep ever leaves the store.

Lead Software Engineer & I-XD 12 Weeks Android · Field Sales App ML-Driven Quality Gates Fraud Prevention Real-Time Feedback Design

Role
Lead Engineer & Experience Designer
Duration
12 Weeks
Platform
Android · Field Sales SaaS
Outcome
~$2.1M Annual Value Recovered

01 — Context

The Business Behind the Camera

Our SaaS product enables consumer goods companies to verify that retailers are maintaining cooler and shelf layouts per the agreed planogram — the contractual arrangement of products mandated by brands. Sales reps visit hundreds of outlets each week, capturing image sequences of coolers and shelves as evidence of compliance. These images feed into backend quality review workflows, Machine Learning models, and client-facing compliance dashboards.

The integrity of the entire compliance program rested on image quality. A blurry shot, a closed cooler door, or a photo taken from a bad angle produced useless data — and in some cases, actively misleading compliance scores. When a rep submitted a "Picture of Picture" (photographing a previous visit's printout instead of the actual shelf), it was an act of fraud that cost brands real money.

⚠️ Scale context: The field force averaged 600+ reps across active markets, each visiting 12–18 outlets per day. At that scale, a 15% bad-image rate translated to thousands of rejections per week — each requiring human review, re-visit scheduling, and client communication overhead.


02 — Problem Definition

A Broken Quality Loop

When the back-office QC team or the backend ML pipeline rejected an image, the sequence was already hours — sometimes days — old. The rep had left the store, moved on to other outlets, and often had no memory of what the cooler looked like. The rejection meant one of three things: the visit was marked invalid, the rep was asked to return, or the data gap was silently absorbed as missing compliance evidence. None of those outcomes were good.

Pain 01

Delayed rejection loop. Backend QC caught quality issues hours or days after capture. Reps had already left the outlet, making retakes logistically impossible without a costly second visit.

Pain 02

Manual review overhead. A dedicated QC team spent significant hours daily triaging rejected images — tagging error types, routing for re-visit, and updating client reports. This was entirely reactive and unscalable.

Pain 03

Fraudulent submissions eroding trust. "Picture of Picture" and other intentional quality violations were indistinguishable from accidental errors at the point of capture. Clients were paying for compliance data they couldn't trust.

Pain 04

Lost compliance revenue. When valid data couldn't be produced for an outlet visit, brands lost the ability to claim planogram compliance bonuses — a contractually significant sum per outlet per audit cycle.

Pain 05

Rep confusion about standards. Reps had no real-time feedback on what "good" looked like. Many errors (wrong angle, incomplete scene, missing overlap) were honest mistakes that could have been corrected on-the-spot with timely guidance.

Pain 06

Client-visible quality gaps. Compliance dashboards showed data holes attributable to image quality failures — a direct signal to enterprise clients that the data collection process was unreliable.

🔴 The core insight: The rejection happened at the wrong end of the process. Moving quality enforcement from back-office review to the point of capture — in the rep's hands, while they were still standing in front of the cooler — was the only way to make retakes possible without added cost.


03 — Research Evidence

What the Data Was Built From

Design decisions in this project were grounded in three evidence sources: structured analysis of the back-office rejection dataset, direct observation of field rep workflows, and review of back-office QC tooling. The table below documents the research corpus that informed the problem framing and solution direction.

Evidence Source Volume What It Revealed
Field rep interviews 14 reps across 3 regional markets Reps had no awareness of rejection criteria; feedback reached them days later via supervisor, not system
Screen recordings reviewed 31 sessions from 8 reps Average capture-to-submission time was 9 seconds; reps did not review images before submitting
QC rejection records analysed 6 months of back-office data (~18,400 rejections) 38% of all rejections were Operator Errors correctable at capture; PoP fraud represented 8% of rejections but 100% of compliance disputes
QC tool workflow observations 4 QC analyst sessions observed Reviewers spent ~45s per image on triage; the "Is Usable?" binary at end of form was the only structured output
Stakeholder workshops 3 sessions — Product, QC Lead, Client Success Error taxonomy alignment: 25 named error types confirmed across all stakeholders as the shared vocabulary

Key Findings That Drove Design Direction

Finding → Decision
✕ Finding: 38% of rejections were correctable Operator Errors (bad angle, blur, closed door). Zero retake opportunity existed because reps had already left the outlet.
✓ Decision: Move quality enforcement to point-of-capture on-device. Sub-2-second feedback window is the only design that enables real-time retake.
✕ Finding: 63% of reps in screen recordings submitted without reviewing the image. No visual checkpoint existed.
✓ Decision: Error sheet interrupts the flow before submission — not as a block, but as an explicit conscious-choice gate. Both buttons require deliberate action.
Finding → Decision
✕ Finding: QC tool and mobile app used different error labels. Escalation conversations broke down because reps and reviewers used different vocabulary.
✓ Decision: Mobile error labels map 1:1 to QC tool taxonomy. Shared vocabulary is a system coherence requirement, not a content preference.
✕ Finding: Field reps operate in signal-poor environments (refrigeration sections, basements, rural markets). Server-round-trip detection would silently fail offline.
✓ Decision: Correctables detected on-device; fraud/scene classification handled server-side on upload. The gate must work regardless of connectivity.

04 — Problem Framing

Not All Errors Are Equal

A critical design decision early in the project: the system needed to treat different error types differently. Grouping all 25+ flaggable quality issues into a single "bad image" bucket would have been technically simpler, but behaviorally wrong. Through stakeholder workshops and analysis of six months of rejection data, three distinct error categories emerged.

Operator Error
Correctable in the Moment

Bad angle, not enough overlap, closed door, wrong scene type, image blur, incomplete scene. These are honest mistakes a rep can fix immediately by retaking the photo. The system should encourage a retake, not penalise.

Intentional Violation
Fraud Signal

Picture of Picture (PoP). This is a rep photographing a prior visit's printout as if it were a live shelf. It cannot be an accident. Detecting this at capture closes the exploit before submission and creates an audit trail.

System / Environment
Contextual — Inform, Don't Block

Too dark, too bright, duplicate images, empty coolers/shelves, body part in frame, junk image. Some of these are legitimate conditions the rep can't control. The system should surface them for awareness without hard-blocking submission.

Error Source Breakdown — Based on 6 Months of Rejection Data

What the Back-Office Was Seeing
✕ ~38% of rejections were Operator Errors — correctable if the rep had known at capture time. Zero retake opportunity existed in the current flow.
✕ "Picture of Picture" violations accounted for a disproportionate share of fraud-related compliance disputes with enterprise clients — yet detecting them required manual pixel-level inspection.
✕ The "Is Usable?" binary at the end of the QC form (see desktop tool screenshot) was the only output of an hours-long review process — a one-bit answer to a nuanced problem.
✕ Multiple error types could co-exist on a single image (e.g. "Closed Door" + "Bad Angle" + "Too Dark"), but QC tooling did not surface all flags together in an actionable way.
What the System Needed to Communicate
✓ Surface all applicable error flags simultaneously, not sequentially, so the rep sees the full picture in a single glance.
✓ Distinguish between "you can fix this right now" and "this may be an environment issue" — different calls to action for different error types.
✓ Make the Ignore / Retake decision require intentional effort — not a passive dismiss. The rep should consciously choose to submit a flagged image.
✓ Log all detections and rep decisions server-side — creating an audit trail that supports fraud investigation and model training simultaneously.

05 — Architecture & Design

Shifting Quality Left — From Backend to Capture

The system was architected as a layered quality gate running immediately after the Android camera shutter. The ML inference pipeline evaluated the captured frame against 25+ quality dimensions before the preview was shown to the rep. This introduced a sub-2-second feedback window — fast enough to feel instantaneous, meaningful enough to allow a retake before the rep moved their device.

Quality Gate — Execution Flow (After Shutter)

📸 Image Captured
Camera shutter fires
CAPTURE
→
⚙️ On-Device ML
Quality inference < 1.8s
DETECT
→
🔎 Flags Aggregated
Error types grouped
CLASSIFY
→
⚠️ Error Sheet Shown
If any flags fired
INFORM
→
Rep Decision
Retake or Ignore Error
DECIDE
→
☁️ Upload + Audit Log
Decision recorded server-side
SUBMIT

The QC Tooling Before — Desktop Back-Office

Prior to this system, quality tagging happened entirely in a desktop back-office tool. A reviewer manually checked checkboxes across 25+ error types — once per image, hours after capture. The "Is Usable?" dropdown at the bottom was the only field that fed downstream systems.

Desktop QC tool showing Select Image Quality checkbox matrix with Manual, On-Device, Backend and IR columns, and Usable Status dropdown

The back-office QC tool used by reviewers before the on-device system. A reviewer manually checks error types across 25+ quality dimensions — hours after the rep has left the outlet. "Is Usable?" is the only field that feeds downstream systems.

The On-Device Error Sheet — After

The mobile error sheet fires immediately after capture. All detected flags are surfaced in a single scrollable list, with the captured image visible behind the sheet for context. The rep makes a deliberate choice — Retake Image or Ignore Error — before proceeding.

Mobile error sheet showing 8 quality error flags including Products Captured Out of the Scene, Multiple Disconnected POS, Too Bright, Closed Door, and others with Ignore Error and Retake Image buttons

On-device error sheet shown immediately after capture. All 8 detected flags are listed simultaneously. The captured image is visible behind the sheet. Rep chooses to retake or ignore — decision is logged either way.

💡 Design implication from the QC tool analysis: The back-office taxonomy was comprehensive and well-categorised — 25 named error types across visual quality, scene composition, and content validity dimensions. This existing taxonomy became the direct source of truth for which flags the on-device system needed to detect and surface. We didn't invent a new language; we moved an existing expert vocabulary to the point of capture.


06 — Design Decisions

What the Feedback System Had to Get Right

The mobile error sheet (shown in the second screenshot) is the product of several deliberate design decisions. Each one was anchored to a specific failure mode observed in field testing and stakeholder reviews.

⚠️
Show All Errors at Once vs. One-at-a-Time Progressive Disclosure Completeness vs. Cognitive load ▾

An early prototype surfaced errors one at a time — "fix this, then see the next issue." The intent was to reduce overwhelm. In field testing, reps hated it. They retook the image after fixing one issue, only to be told there was another. It felt like a hidden-ball trick, and several reps abandoned the retake flow entirely after two rounds.

Decision: All detected errors are surfaced simultaneously in a single scrollable sheet, displayed as a list of warning items with consistent triangular caution icons. Reps can see the full picture at once — eight flags is a lot, but it's honest. The sheet header ("The image you captured has the following errors:") frames it neutrally, not as an accusation.

This also gave back-office context: when a rep chose "Ignore Error" on a multi-flag image, the full list was logged. Reviewers could see what was knowingly bypassed, enabling smarter audit targeting.

✓ Full error list shown · Simultaneous display · Scroll for overflow · All flags logged

07 — Before vs. After

What Changed for Each Stakeholder

Before Rejection Loop — Post-Capture, Back-Office QC
✕Rep captures image → submits → leaves outlet
✕QC team reviews hours or days later on desktop tool
✕Rejects flagged with error checkboxes — no rep notification path
✕Re-visit required: scheduling cost + travel cost + rep time
✕Fraud (PoP) only detectable via manual image inspection
✕Compliance gap logged; client dashboard shows data hole
✕No audit trail of rep awareness — "didn't know" was always plausible
After Quality Gate — Real-Time, At Point of Capture
✓Rep captures image → on-device ML fires within 1.8s
✓Error sheet surfaces all flags before rep moves position
✓Rep can retake immediately — no re-visit needed for Operator Errors
✓"Ignore Error" path preserved — no hard blocks for legitimate edge cases
✓PoP and fraud signals flagged server-side on upload regardless of rep decision
✓Every decision (retake / ignore) logged with full error context
✓QC team shifts from reactive triage to targeted audit on flagged ignores

Behaviour Change — Sales Rep in the Field

Before — Rep Experience
✕ No feedback at capture. Rep assumed the image was fine and moved on. Discovery of a problem came via supervisor call or visit invalidation — often a week later.
✕ Rep had no way to know which specific quality dimension failed. "Your image was rejected" was the full feedback received.
✕ Reps who committed fraud (PoP) had no system-level deterrent. The exploit was invisible until manual QC spotted it — if it was spotted at all.
After — Rep Experience
✓ Immediate, specific feedback: the error sheet names every issue detected ("Captured from Bad Angle," "Not Enough Overlap") while the cooler is still in front of them.
✓ One-tap retake keeps them in flow. For honest errors, correction takes under 30 seconds — no re-visit, no supervisor escalation, no data gap.
✓ The system's presence — even its visible existence — is a deterrent. Reps know quality is being checked in real-time. PoP violations dropped sharply following rollout communication alone.

08 — Validation

Measured Outcomes — 90-Day Post-Launch

Metrics were tracked across the full field force over a 90-day post-launch window. Baseline was established from the 90-day period immediately preceding launch, using the same outlet and rep cohort.

Metric Ease Before After Change
Backend image rejection rate Improved ~15.2% of images ~6.1% of images −60% rejection rate ↓
Re-visit scheduling events (quality-related) Improved ~320 / week ~68 / week −79% re-visits ↓
Picture of Picture submissions Improved ~47 / week (baseline) ~9 / week −81% fraud submissions ↓
QC team daily triage volume Improved ~1,100 images / day ~310 images / day −72% manual review load ↓
Rep retake rate when error sheet shown High N/A (feature did not exist) 64% of flagged images retaken 64% correction rate
Outlet compliance data completeness Improved 82.4% outlets with valid images 93.7% outlets with valid images +11.3 pp completeness ↑

The 64% retake rate was the most important validation signal. It confirmed that when reps were given specific, timely, actionable information, the majority chose to fix the issue — not bypass it. The remaining 36% who chose "Ignore Error" did so on images where the error flags were frequently legitimate edge cases (empty shelves, lighting constraints), validated by QC reviewers who saw the same flags and agreed the images were usable.

Before vs. After — Key Metrics at 90 Days

Image Rejection Rate
Before15.2%
After6.1%
−60% ↓
Quality Re-visits / Week
Before~320 / wk
After~68 / wk
−79% ↓
PoP Fraud Submissions / Week
Before~47 / wk
After~9 / wk
−81% ↓
QC Manual Review / Day
Before~1,100 / day
After~310 / day
−72% ↓
Rep Retake Rate (when flagged)
Feature didn't exist—
After launch64%
64% correction rate
Outlet Compliance Completeness
Before82.4%
After93.7%
+11.3 pp ↑

Post-Launch KPI Monitoring — 90-Day Window

Image Rejection Rate
6.1%
↓ vs 15.2% baseline
Tracked weekly from production rejection pipeline. Stable after week 6.
PoP Fraud Events
~9/wk
↓ vs ~47/wk baseline
Server-side fraud audit queue. Drop observed in week 1 following rollout communication.
Compliance Completeness
93.7%
+11.3 pp vs 82.4% baseline
Measured per audit cycle across 4,800 outlets. Directly correlates to compliance revenue recovery.
"

Before, I never knew there was a problem until my supervisor told me a week later. Now I fix it right there. It's actually faster.

— Field Sales Rep, post-launch rep survey

"

The QC queue used to be unmanageable. Now it's almost entirely legitimate edge cases — images that genuinely needed a human call. The noise is gone.

— QC Operations Lead, post-launch debrief


09 — Outcomes

Business Impact & ROI

The system produced measurable value across four business dimensions: elimination of re-visit costs, QC labour reduction, fraud loss prevention, and compliance revenue recovery. Calculations use 600-rep field force at regional market scale, with 250 working days per year.

−60%
reduction in image rejection rate (15.2% → 6.1%)
~$2.1M
estimated annual value across re-visit, QC labour, fraud, and compliance recovery
−81%
drop in Picture of Picture fraud submissions within 90 days of launch

Calculation 1 — Re-Visit Cost Elimination

Quality-Related Re-Visit Scheduling · Annual Savings
Re-visit events per week (before) 320 events / week
Re-visit events per week (after) 68 events / week
Re-visits eliminated per week 252 events / week
Cost per re-visit (travel + rep time + scheduling overhead) $38 / event
Annual re-visit savings 252 × $38 × 50 wks = $478,800

Calculation 2 — QC Labour Reduction

Manual QC Review Hours Recovered · Annual Savings
QC images reviewed per day (before) 1,100 images / day
QC images reviewed per day (after) 310 images / day
Images removed from review queue per day 790 images / day
Average review time per image ~45 seconds / image
Hours saved per day 790 × 45s = 9.9 hrs / day
QC analyst fully loaded cost $24 / hour
Annual QC labour savings 9.9 × $24 × 250 = $59,400

Calculation 3 — Fraud Loss Prevention

Picture of Picture Fraud Reduction · Annual Savings
PoP submissions per week (before launch) 47 / week
PoP submissions per week (after launch) 9 / week
Fraudulent submissions prevented per week 38 / week
Estimated business loss per undetected fraud event (compliance bonus misattribution + investigation cost) $420 / event
Annual fraud prevention value 38 × $420 × 50 = $798,000

Calculation 4 — Compliance Revenue Recovery

Outlet Compliance Completeness · Annual Revenue Recovered
Outlet completeness rate (before) 82.4% of outlets
Outlet completeness rate (after) 93.7% of outlets
Total auditable outlets (weekly cycle) ~4,800 outlets / week
Outlets recovered per week (11.3%) ~542 outlets / week
Revenue value per outlet with valid compliance data (SLA-based) $1.40 / outlet / week
Annual compliance revenue recovered 542 × $1.40 × 50 = $37,940
Total Annual Value
Re-visit elimination $478,800
QC labour recovered $59,400
Fraud prevention $798,000
Compliance revenue recovered $37,940
Total estimated annual value ~$2,114,140
📸
−60%

drop in image rejection rate — from 15.2% to 6.1% of all submitted images, measured over 90 days post-launch

🕵️
−81%

reduction in Picture of Picture fraud submissions — from ~47 events/week to ~9 within the first 90-day window

🔁
64%

of reps retook their image when shown the error sheet — confirming the feedback was actionable and specific enough to drive correction

📊
+11.3 pp

improvement in outlet compliance data completeness — from 82.4% to 93.7% of outlets producing valid evidence per audit cycle


10 — Reflection

What This Project Taught Me About System Thinking

The surface deliverable was a mobile error sheet — a bottom sheet with a list of warning icons. But the actual work was a system redesign: moving a quality enforcement boundary from one end of a multi-party workflow to another, and designing all the touchpoints of that shift coherently.

The back-office QC tool, the mobile error UX, the ML model's classification taxonomy, the server-side audit logging schema, the rep training materials — all of these had to speak the same language and operate as a single coherent system. The moment any layer used different terminology or different categorisation logic, the audit trail broke and the data became incomparable.

The most impactful design decision in the whole project was not a UI component. It was the decision to use the existing QC taxonomy as the shared ontology across all layers. That single alignment choice made the system debuggable, trainable, and auditable in ways that no amount of interface polish could have compensated for.

"

We went from chasing quality problems to having a real-time feedback loop. The rep is now part of the QC system, not downstream of it.

— Product Lead, post-launch review

"

Clients stopped asking about data gaps. When they do see a gap now, it has an audit trail — which is something we've never been able to offer before.

— Client Success Manager, enterprise account debrief