ROLE/SERVICES

Product Design Lead · UX Engineering · Platform Analysis

LOCATION

USA 🇺🇸

YEAR

2025–2026

Summary

BanQu is a ten-year-old platform serving supply chains across 17+ user roles — and like any platform that age, its complexity is a mix: some of it intentional, some accumulated over time. Testing hadn't kept pace. Coverage was unit tests plus a manual UAT that walked one scripted path per flow, even when a flow had four ways to complete. Critical flows depended heavily on manual regression, which made product risk hard to see before release. The product owner and I started this as a working question: could end-to-end testing double as a product audit — mapping which flows matter, which break, and where complexity was intentional versus accumulated? I architected the framework; engineering and QA adopted it. And its byproduct became a second system entirely: an automated documentation pipeline, with 40+ trilingual client guides published to Zendesk.

SaaS Blockchain platform

The Challenge

Solution & Impact

Product Design Lead UX Engineering Playwright E2E Architecture UAT Strategy & Audit Risk Analysis & Roadmap Self-Initiated

Scope

BanQu is a multi-sided SaaS connecting supply chains, smallholder farmers, and financial institutions: 17+ user roles with distinct permissions, forms of 50–100+ fields with conditional logic and computed scores, blockchain transactions that take 2.5 minutes, and an offline-first mobile layer for low-connectivity regions. A massive product surface — and before this work, very little of it had systematic proof that it worked as designed.

Manual UAT answered one question: does the scripted path still complete? It couldn't answer the ones that mattered. Does each of 17 roles get the experience we designed? Do the other three ways of completing a transaction work, or just the one we always walk? Which of the product's many paths are intentional design, and which are complexity that accumulated over time — the distinction that made it possible to decide what deserved coverage at all? Standard QA tests what was built. This framework connects what was built to what was intended — and that connection is where product risk lives. Who was involved: self-initiated, never solo. The product owner and I scoped it together and ran the UX-audit lens jointly. The engineering lead shaped the test strategy — his rule became the framework's backbone: “We already unit-test in code. Verify a component once end-to-end, then drive everything else through the API.” The dev team was trained on the framework and now extends it; QA has started using the framework for day-to-day validation. For the documentation pipeline, I pitched the move off PowerPoints to the VP overseeing client-facing operations and enablement, since it changed what clients receive.

The System I Built

A testing framework built around three capabilities. Role-based verification: critical flows test as real user types, proving permissions work rather than merely exist. Workflow testing: multi-step flows (Farmer creates → Reviewer checks → Approver gates) verified end-to-end — API-driven for speed and stability. Condition-based testing: blockchain confirmation delays, session expiry mid-flight, offline→sync cycles — the conditions users actually experience, not just happy paths.

The form engine (technical detail)

Forms reach 50–100+ fields with conditional visibility, computed scores, and role-gated inputs; hardcoded field names produce tests that break on every schema change — or silently pass while testing nothing. completeFormFromSchema fetches the live schema and fills in multiple passes, handling conditionals, computed fields, and relationship pickers. A new form test is ~10 lines, and field renames don't break it. A typed API client covers the full REST surface, so multi-step workflows run end-to-end without driving every step through the UI.

Tech Stack (technical detail)

Playwright (TypeScript) · role-based storageState for 17+ roles · global-setup + auth wrappers · typed API client · multi-pass form engine. A new role is one line; a new test is ten — which is why the team could adopt it instead of depending on me.

What I deliberately didn't build

Coverage is a budget. BanQu has surveys of up to 700 fields across ten survey types — I declined to automate each one, and built a single representative mini-survey exercising every field type and behavior instead: test the functionality once, not every instance. Same principle at the component level — if ten flows touch the search bar, one flow verifies it and the other nine go through the API. End-to-end testing that repeats unit testing is just slower unit testing.

The Method

From design intent to product reality

How a design assumption becomes a verifiable product decision — the loop every critical flow runs through.

  1. 1

    Design intent

    What experience was promised?

  2. 2

    Product context

    Role, permissions, data, conditions.

  3. 3

    Workflow verification

    Run the real flow, end to end.

  4. 4

    Observed reality

    What actually ships.

  5. 5

    Decision or risk

    A verified promise — or a surfaced gap.

What the loop had to account for
  • 17+ roles
  • Conditional forms
  • Offline sync
  • Blockchain delays
  • Approval gates

The value wasn't testing more. It was proving whether the product delivered the experience it promised.

One Investment, Two Returns

Building the framework surfaced an asset nobody was using: Playwright captures a screenshot at every step, and tests already existed for the flows every client shares. Meanwhile, client documentation lived in hand-maintained PowerPoints — different per client, scattered across SharePoints, drifting the moment a flow changed. So the test suite became a documentation engine. Generic guides (login, password reset, contact support) are generated from the same runs that verify those flows work. Client-specific guides were migrated from the legacy decks through a pipeline I built, and published to Zendesk: 40+ guides live in English, French, and Spanish, with internal use underway and client rollout beginning. The one concern raised — vendor dependence on Zendesk — shaped the architecture: every guide exists as Markdown, HTML, and PDF in the GitHub repo; Zendesk is a publish target, not a home. For generated guides, documentation is tied directly to the tested product flow, reducing the risk of drift. For migrated guides, the repo becomes the source of truth instead of scattered PowerPoints.

How the pipeline works (technical detail)

Each meaningful test action is wrapped in articleStep(), which captures a screenshot and records step metadata; generateArticle() emits the article and a structured steps.json. For migrated guides, the pipeline parses each PowerPoint's XML for its images, composites the deck's own highlight callouts onto each screenshot so visual annotations survive conversion, validates structure and step text word-for-word against the source, then publishes as a draft — uploading images as hosted attachments and reinjecting them positionally, per locale, with trilingual-ready guides prioritized.

QA test suite Playwright capture two returns
One investment, two returns: a QA test suite runs through Playwright, which captures each step and forks into a product audit and a trilingual documentation pipeline. A minimal flow diagram. Test cases move into a green Playwright capture point, then split into two outputs — a product audit above and documentation guides in three languages below. QA test suite already built 17+ roles · 40+ flows Playwright captures each step 1 Product audit flows mapped · risks surfaced 2 Documentation EN FR ES 40+ guides · Zendesk
Flows mapped 0 Guides shipped 0

What the Audit Revealed

Eight structural risks surfaced: five infrastructure risks that fed the first two roadmap phases, and three product-level promises no one could yet prove were being kept.

/FINDINGS — WHAT WAS ACTUALLY BROKEN

C5

Permissions that lied

Available and visible-but-locked looked identical to a Regional Manager. Friction, mistrust, support tickets.

F6

Approvals that doubled

Nested data made state ambiguous — approved twice, or incomplete approved as complete. Revenue-critical.

OL7

Sync that forgot

The farm's data landed, but the asset reference didn't survive the trip. Users believe their work is lost.

Roadmap — ordered by consequence

/ROADMAP — ORDERED BY CONSEQUENCE

PHASE 1 · COMPLETE

Unblock CI

Infrastructure fixes so features ship without test flakiness. 2.5h

PHASE 2 · IN PROGRESS

Replace brittle patterns

Schema-based field discovery; standardized auth so new roles scale. 4h

PHASE 3 · SCHEDULED

Close the product gaps

C5 across all 17 roles, F6 end-to-end, OL7 for complex transactions. 10h

Phases 1–2 were prerequisites; Phase 3 is the product work. Making that dependency visible is what got the roadmap adopted without pushback.

The Findings

Product debt = unverified product promises

The three highest-risk promises on the platform — designed, shipped, and never proven across the conditions that matter.

Role-based permissions

Design promise

Each user type sees the right experience.

What was unverified

Roles were designed, but only ever tested as admin.

Product impact

Wrong options, locked states, confusion, support friction.

Approver workflow

Design promise

Financial data is reviewed before it moves forward.

What was unverified

Complex approval states weren't validated end to end.

Product impact

Ambiguous status, duplicate-approval risk, revenue-critical failure.

Offline → sync

Design promise

Field work syncs reliably when connectivity returns.

What was unverified

Complex transactions were never fully proven through sync.

Product impact

Missing relationships, perceived data loss, lost trust.

The real problem wasn't missing tests — it was shipping assumptions that nobody had proven.

Impact

The team adopted the framework because it came with a prioritized roadmap that made tradeoffs visible. QA moved from reactive (“what breaks this week?”) to strategic (“what's the highest-value product promise still unverified?”). Engineering extends the framework independently; QA has started using it for day-to-day validation; the guides are live and rolling out to clients — one investment now improving both product quality and operational scalability.

55
UAT scenarios mapped
17+
role-based workflows in scope
8
structural risks surfaced
40+
client guides live in 3 languages

What got automated

Associates
Email + phone creation, add to new org
Farm Registration
Full submission + reviewer sign-off
Single Buy
Complex transfer + blockchain confirmation
Transformation
Two-source-to-one, verified on Transactions
Form Conditionals
Visibility, computed fields, required-when-visible
Connections
All 4 ID types, profile edit, ID upload
Asset Pricing
Fixed (immutable) + flexible (min/max)
Batch Send/Receive
Source filtering + supplier confirmation
Chain of Custody
CoC table display + Excel download
Offline
Setup, org-switching, connection + farm creation — full offline→sync regression scheduled (OL7)

+ Multi-Purchase, Revert Transaction — 12 areas total.

Coverage map

55 scenarios mapped — status of the highest-traffic areas at a glance.

Associates
Automated

Invite delivery gaps flagged

Connections
Automated

C5 role visibility, C7 export flagged

Profile Form
Partial

Single-field assertion only

Forms
Automated

Field behavior automated; Approver workflow uncovered

Transactions
Automated

Pricing config automated; fixed-price enforcement not covered

Batch
Automated

Reject path absent

Offline
Partial

Go-offline→sync untested end-to-end