Case Study · Design Leadership · Accessibility

Accessibility at Scale

A case study in stabilizing a growing SaaS ecosystem. I initiated this effort from scattered support signals and led it end to end: securing executive commitment and budget, then driving risk-prioritized remediation, screen-reader and contrast fixes, component governance, engineering enablement, customer communication, and an AI-assisted plug-in that moved accessibility from periodic audits to feedback built into the development loop.

My role
I initiated the effort, secured executive commitment and budget, and led it end to end: prioritization, vendor selection and enablement, component governance, engineering coordination, customer communication, and tooling.
Worked across
  • Product Management
  • Engineering teams
  • External accessibility vendor
  • Customer Success & Support
Outcome
  • VPAT documentation obtained
  • High-ARR account retained, churn prevented
  • Critical violations down on high-traffic surfaces
  • Canonical components & AI-assisted detection
The moment it became real

Scattered signals, one missing strategy

Accessibility didn't begin as a roadmap item. It began as a series of signals: customer ideas in the community, account teams flagging contrast complaints, and direct asks landing in my Slack about partial-support gaps during evaluations. Individually, each felt manageable. Collectively, they exposed something bigger: there was no accessibility strategy, and that was the inflection point.

Community idea titled 'Enhance accessibility in reports (color contrast)' from a VIP customer, asking the system to auto-switch font color based on background so dark text isn't shown on dark backgrounds.
A VIP customer idea: reports showing dark text on dark backgrounds.
Community idea titled 'Improve Accessibility for Gainsight CS', posted on behalf of a customer reporting that grey text on white is hard to read and small text is challenging, requesting per-user accessibility options.
Another, on behalf of a customer: low-contrast grey text and small type.
Slack message tagging Siva Kiran Yellapragada asking whether there are plans to improve support for functions marked as 'partially supports', because a customer evaluating CS is asking in response to the audit report.
A direct Slack ask: an evaluating customer questioning "partially supports" findings.
The deeper problem

An audit revealed predictable violations

An initial audit surfaced the same categories of failure across the platform. What stood out wasn't just the violations, it was the pattern behind them.

Audit view of a form where inputs are not programmatically labeled, flagged as missing accessible names.
Missing labels: inputs without programmatic names that screen readers can announce.
Accessibility panel showing heading levels that skip, breaking the document outline.
Broken heading hierarchy: levels skipped, so the page outline didn't reflect its structure.
DevTools contrast inspector showing a link color at 2.42:1, failing the WCAG minimum.
Poor contrast ratios: interactive text below the WCAG minimum, here a link at 2.42:1.
Example of vague link text that gives no context out of order, such as repeated generic labels.
Less descriptive links: generic link text that loses meaning out of context.
Survey rating where the screen reader only announces 'You are currently on a text element, inside web content,' giving no rating value or role.
Ambiguous screen-reader output: the rating reads only as a bare text element. No role, no value.
Survey rating where the screen reader announces 'Not at all likely 0, radio button, 1 of 11, list 11 items.'
Even when announced as a radio group, the scale's endpoint labels were missed out of context.
Contrast finding demonstrated: an interactive element falling below the WCAG contrast minimum.
Design system drift

The same components, dropdowns for example, existed in multiple variations across modules. Each behaved slightly differently and implemented accessibility inconsistently. That realization ultimately shifted the direction of the work: from fixing screens to fixing the system underneath them.

From signals to a mandate

I made accessibility a funded, owned initiative

Scattered fixes would never hold. So I built the conditions for the work to succeed: I took the signals to leadership and turned accessibility into a funded program with an owner, a scope, and a definition of done, then brought in the right external partner to validate it.

  1. Secured executive commitment

    Worked directly with leadership to make accessibility a funded, owned initiative rather than a side effort, establishing the mandate the rest of the work depended on.

  2. Shaped budget & success criteria

    Helped build the investment case and defined what "done" meant: conformance against WCAG 2.1 AA, with the VPAT as the tangible deliverable.

  3. Selected & enabled the vendor

    Led vendor selection for audit-grade validation, then made the partner effective inside a complex product with screen-by-screen documentation and walkthroughs.

  4. Owned it end to end

    Drove the effort across product, engineering, and customer success, from a cold start through execution, governance, and customer communication.

A strategic choice

Fix risk first, then fix the system

Attempting to correct the entire platform at once would have stalled delivery for months. So I sequenced the work by risk and visibility, protecting the most exposed surfaces first.

Phase 1End user

Brand-visible, high-traffic, legally exposed

  • Survey response pages
  • Emails
  • Email opt-out pages
  • Email inline surveys
Phase 2Customer Success Manager

Daily operational surfaces

  • Gainsight Home
  • Timeline & Cockpit
  • Customer 360 & Relationship 360
  • Spaces
Phase 3Administrator

Configuration & foundations

  • Admin and setup surfaces
  • Completes platform-wide coverage
  • Lower day-to-day exposure

This meant temporarily living with known issues in lower-risk areas, but it allowed measurable progress without paralyzing the roadmap.

Equip teams & make the audit usable

An operating model, not a list of bugs

A vendor audit answers "what's broken." Teams still had to answer "what does this mean for us." Engineers asked what a finding meant in our context; PMs asked whether a change altered how a feature behaved. I built the connective tissue to answer both.

  1. Screen-by-screen flow documentation

    Mapped each in-scope surface so findings landed against a concrete screen and state, not an abstract rule.

  2. Feature walkthrough recordings

    Recorded flows and business context so the vendor and engineers understood the why behind each screen, not just the markup.

Spreadsheet mapping features, screens, and accessibility findings row by row for vendor and engineering reference.
Feature mapping: each screen and finding documented to reduce interpretation. Reducing interpretation was the goal.
What changed in Phase 1

From ambiguous to announced

Bringing structure to the most exposed surfaces produced concrete, testable change. Critical violations dropped significantly across high-traffic surfaces.

Before
  • Headings skipped levels
  • Inputs weren't labeled programmatically
  • Focus order jumped unpredictably
  • Confirmation messages weren't announced
After
  • Semantic hierarchy stabilized
  • Predictable tab traversal
  • ARIA roles clarified
  • Dynamic announcements implemented
Fixed screens

The remediated states

Screenshots of the corrected screens go here, the accessible counterparts to the issues above.

But Phase 1 revealed a truth

If we kept fixing screens individually, the accessibility debt would return. The real fix had to move upstream, to the components themselves.

The turning point

Component governance over one-off fixes

As audits continued, it became clear that component inconsistency was the root cause. Multiple versions of modals, dropdowns, buttons, and form controls. Each slightly different. Each slightly off. So Phase 2 became about entropy reduction.

01

Mapped occurrences module by module

Conducted a structured component review and mapped where each variant appeared, screen by screen, to see the true scope of the drift.

02

Defined canonical versions

Recommended a single accessible version of each component so conformance became a property of the system, not a per-screen effort.

03

Reviewed weekly, decided by use case

Aligned weekly on use-case-driven decisions so adoption stayed grounded in real product needs.

Less visible than Phase 1. But more important.
Canonical components

One accessible version of each

Screenshots of the canonical, conformant components go here.

Reducing ambiguity for engineering

Specified, not inferred

Default audit output left implementation open to interpretation. So I documented the expected behavior at the level engineers actually build against: announcements, focus, and error states. PMs vetted the documentation before handoff. Engineers no longer had to infer accessibility behavior. It was specified.

  • Screen-reader announcement expectations documented per control
  • Modal focus management: entry and exit focus mapping
  • Error announcement specifications for single and multiple invalid states
Annotated Configure Filters dialog specifying error announcements: focus moves to the first invalid field and the screen reader announces the specific error.
Error announcement spec: where focus moves and exactly what the screen reader announces, for single and multiple invalid rows.
Tab order and focus management demonstrated through a complex table and dialog.
Scaling beyond manual oversight

From periodic detection to embedded feedback

Manual governance does not scale indefinitely. Many violations were detectable at the code level before release, so to prevent recurrence we developed an internal AI-assisted plug-in.

  • Scans markup against accessibility standards
  • Flags violations inline
  • Suggests replacement semantic code
  • References the relevant WCAG guidance

Instead of discovering issues during audits, engineers could resolve them during development. Accessibility shifted from periodic detection to embedded feedback.

Internal AI-assisted plug-in scanning markup and flagging accessibility violations during development.
The plug-in flags violations against accessibility standards as code is written.
Plug-in suggesting replacement semantic markup with a reference to the relevant WCAG guidance.
It suggests replacement semantic code and links the relevant WCAG guidance.
Customer communication & retention

Turning a churn risk into a trust signal

Sequencing customer-facing surfaces first wasn't only a technical call, it was a retention strategy. I kept high-value accounts close while the work was in flight.

Business impact

Direct, proactive communication with high-ARR accounts, plus visible progress on the issues they cared about, prevented at least one key customer from churning.

I maintained ongoing updates with customers tracking accessibility, building confidence that the initiative was real, owned, and on track.

Retention playbook
  • Customer-facing surfaces sequenced first
  • Direct line to high-ARR stakeholders
  • Regular, credible progress updates
  • VPAT and public statement as proof points
What actually changed

The shift was predictability, not just polish

Before
  • Accessibility was reactive
  • Component fragmentation
  • Interpretation variance
  • Audit-dependent
After
  • Risk-prioritized roadmap
  • Canonical components
  • Clear execution blueprints
  • AI-assisted detection
  • Embedded governance cadence
VPAT
Documentation obtained
Enterprise-ready proof
0+
High-ARR account retained
Churn prevented
0
Risk-based phases
End user → CSM → Admin
AI
In-development checks
Embedded, not periodic
Leadership reflection

Leading it, not just fixing it

The biggest change wasn't visual, it was predictability. By securing a mandate, fixing risk first, and then the system underneath, accessibility stopped being a recurring scramble and became a property of how the product was built: canonical components, specified behavior, and detection in the development loop. The lasting value wasn't any single remediated screen, it was the program, initiated and owned end to end, and the enterprise trust it earned.

Want accessibility built into the system, not bolted on?

I lead it hands-on, from risk-based prioritization to component governance and the tooling that keeps it from regressing.

Get in touch