Skip to content
Victor Dantas, home
← All work

Making an Accessibility Product Measurable

Mapping 11 flows and 53 trackable states for an accessibility plugin, and building the measurement layer every later study here runs on.

Project overview

Company
Hand Talk
Date
2022–2023
Scope of work
  • Product Analytics
  • Measurement Design
  • User Flows
My role
UI/UX Designer
Collaborated with
  • Product team
  • Development team

About Hand Talk

Hand Talk is an award-winning accessibility platform that uses AI to translate digital content into sign language through virtual avatars. The plugin runs inside other organizations' websites, which means the same interface can appear in ecommerce, entertainment, education, and public-service contexts.

The measurement problem

The plugin already generated events, but a single event could not explain a journey. We needed to tell apart outcomes that looked identical in a dashboard:

  • A translation that completed, paused, failed, or was deliberately cancelled
  • An onboarding flow that was completed, declined, or interrupted at a specific step
  • A screen that was closed after an action versus closed without any interaction
  • A preference that was briefly changed versus the final configuration a user kept
  • A link opened from a loading screen versus the same destination opened intentionally from About

The goal was never to track more. It was to make each event answer a question.

Mapping the product

I documented 11 flows across the plugin: unauthorized tokens, About, loading, the legacy survey, the redesigned survey, survey entry, translation evaluation, the translation lifecycle, personalization, first-run onboarding, and onboarding started from the menu.

Each flow included its successful path, its interruptions, its errors and its exits. Mapping those before naming any event is what kept the taxonomy from becoming a pile of unrelated clicks.

A very large Figma board holding the plugin's full screen map: a tall column of screen reader states on the left, and two wide rows of grouped screen flows across the rest of the canvas, each group linking phone screens with connectors and annotations.
The screen map the flows were drawn from. Legibility is not the point here; the extent is.

A shared event language

The framework used five fields so that a designer, product manager, developer, or analyst could understand the same event without additional translation.

The five-part event specification used across the mapped flows.
FieldPurposeExample from the plugin
Event nameThe behavior or state being measuredTranslation cancelled
CategoryThe product area that owns the interactionSite translator
Label / contextThe reason or location that makes the event meaningfulNew translation requested
ValueA bounded state or count used for comparisonCancelled
TriggerThe exact condition that sends the eventA new request interrupts active playback

This structure made related events comparable while preserving the context needed to interpret them. Event names stayed stable, while labels and bounded values explained where or why the behavior occurred.

Designing for states, not only clicks

A translation was the clearest example of why click tracking was insufficient. Playback could finish normally, pause, be interrupted by a new request, stop when the menu opened, fail on unreadable content, or end when the plugin closed. Afterward, the evaluation prompt introduced another set of outcomes.

The translation flow from the GA4 mapping board, labelled in Portuguese. A start node leads to a decision diamond, Tradução em andamento, which branches to Tradução pausada, Tradução cancelada and Tradução Concluída. Cancellation splits again into Fechar o plugin, Nova tradução and Abertura do Menu. Each terminal state connects to a card listing Action, Category, Label and Value.
The translation flow as mapped. Each terminal state carries its own event card with the four fields, and the numbered chips mark interactions reused across flows rather than duplicated.
Text description of this chart

Reading the branches: a translation in progress can be paused, cancelled or completed. A pause can still resume or cancel. Cancellation is never a single outcome, it resolves to closing the plugin, starting a new translation, or opening the menu, and each of those sends the same event name with a different label. Completion is its own terminal state. The board is labelled in Portuguese: tradução is translation, pausada paused, cancelada cancelled, concluída completed.

Click-only view

A user opened the plugin, selected something, and later left.

State-based view

A user started a translation, paused it, opened the menu, and dismissed the evaluation prompt without responding.

The second description supports a product conversation. The first does not.

Important implementation decisions

Cancellation needs a reason

"Translation cancelled" was not enough. Closing the plugin, opening the menu and starting a new translation are different intentions and call for different responses.

No interaction is still a state

Screens closed without interaction were mapped explicitly, which kept silence from being counted as success.

Capture the final preference

Personalization events fired when the user closed the menu or the plugin, capturing the configuration they kept rather than every adjustment they tried.

Two phone screens from Hand Talk's documentation showing the plugin settings panel, with a dark mode toggle off on the left and on the right, and arrows running between them in both directions.
A preference is a state a user can flip back and forth. Only the one they leave behind is worth an event.

Failures need a follow-up path

A translation failure and a user's decision to report it are separate events, which keeps technical reliability apart from willingness to give feedback.

Representative interactions from the implemented measurement plan.
Interaction or stateContext retainedTrigger
Translation completedSuccessful playbackPlayback reaches its natural end
Translation cancelledClose, new request, or menuPlayback ends before completion
Translation failedUnreadable contentThe selected content cannot be processed
Evaluation submittedPositive or negativeA user confirms a rating
Evaluation dismissedNo interactionThe evaluation closes without a response
Preferences savedFinal anonymized configurationThe menu or plugin closes after a change
Tutorial endedCompleted, declined, or interruptedThe onboarding flow reaches a terminal state

What the framework made possible

The flow maps and event definitions became a shared tracking contract between Design, Product and Development. Every later Hand Talk study on this site runs on top of it, and in two of them the dependency is exact.

The redirect investigation needed one label. The same event, Hand Talk Link Clicado, fires from two places: the plugin's loading screen and its About panel. Because the spec gave them one name and two labels, that traffic could later be split 96% against 4% and the disqualified leads traced to the loading screen. Collapsed into a single event, the two paths would have been one indistinguishable number and there would have been nothing to find. See Why 94% of Our Leads Were Wrong.

The evaluation study needed three states. A positive rating, a negative rating and a prompt closed without a response were separate events from the start. That is what allowed a later redesign to be measured as a change in completion rather than a change in volume. See Translation Evaluation Impact Analysis.

  • 11

    Product flows mapped end to end

  • 53

    Trackable interactions and states specified

  • 3

    Later studies that ran on this instrumentation

A privacy retrospective

The original spec used placeholders for translated content, email and installation tokens. Looking at it now, those placeholders mark a boundary I would draw differently: analytics should not receive raw user content or identifying values just because the tooling permits it.

Lessons learned

Analytics design starts before the dashboard. Mapping the product first is what made later questions answerable at all.

The most useful signal is often not an action. Failure, interruption and no interaction say more about friction than a successful click does.

And a measurement framework is a product decision system, not a reporting chore. Its value shows up months later, in the questions a team can still answer.

Écrivance · Nov 2025 – Present

Turning AI Feedback Into a Learning Interface

A language model will happily write four paragraphs about your French essay. None of that is a lesson. This is how I turned model output into a scored, prioritised, act-on-it-now page, for an exam I was sitting myself.

293,849 words written and corrected through the interface

  • AI Interaction Design
  • Product Design
  • Design Systems

Hand Talk · Q4 2022

Why 94% of Our Leads Were Wrong

A UX investigation into disqualified leads revealed an unexpected behaviour pattern, and one redirect fixed everything.

94% → 0% disqualified leads from the plugin loading screen

  • UX Research
  • Behavioral Analysis
  • Optimization

Hand Talk · May – July 2022

Translation Evaluation Impact Analysis

Measuring what an accessibility-led redesign of Hand Talk's evaluation screen actually changed. Evaluations rose 93.30%, and they rose while the audience shrank.

+93.30% increase in completed translation evaluations

  • UX Research
  • Accessibility
  • Data Analysis

Hand Talk · Q3 2023

Accessibility Benchmarking for Product Roadmapping

Mapping 43 features across five competitors and prioritizing what truly matters for users and compliance.

43 features benchmarked into a 7-feature 2024 roadmap

  • UX Research
  • Accessibility
  • Benchmarking