Automated audits catch maybe a third of the real problem
Tools like axe or Lighthouse catch missing labels, contrast failures, and structural markup issues reliably. What they can't catch is whether tab order actually follows visual and logical flow through a 12-column data table, or whether focus lands somewhere sane after a modal closes.
Those are exactly the failures that make software genuinely unusable for keyboard-only and screen-reader users — and enterprise software has a real population of them: RSI, motor impairments, and power users who simply find the keyboard faster for repetitive data entry.
Where dense UIs specifically break keyboard flow
Modals must trap and restore focus
Tab should never escape an open dialog into the page behind it, and closing it must return focus to the element that opened it — not reset to the top of the page, which disorients keyboard users badly.
Tables need arrow-key navigation, not just tab
Tabbing through every cell of a wide data table one field at a time is unusable in practice. Grid-pattern arrow-key navigation (following the ARIA grid pattern) is what makes a dense table actually navigable.
Inline editing needs an explicit edit/view mode
A cell that silently becomes an input on focus can trap keyboard users who don't realize they're now in edit mode. Make the mode transition explicit — Enter to edit, Escape to cancel — and announce it.
Custom dropdowns need real ARIA roles
A `<div>`-based dropdown styled to look native but missing `role="listbox"`/`role="option"` and arrow-key handling is invisible to screen readers no matter how it looks.
Visible focus indicators, not suppressed outlines
`outline: none` without a replacement is one of the most common accessibility regressions — usually introduced for aesthetic reasons by someone testing only with a mouse.
Test it yourself, unplug the mouse
The fastest way to find these bugs is completing a real task — create a client, assign a shift — using only the keyboard. It surfaces problems an automated scanner structurally cannot see.
Build it into the component, not the page
Focus trapping, restore-on-close, and grid navigation all belong inside your shared `Modal` and `DataTable` components — the same wrapper layer that centralizes theming and overlay z-index. Solve it once there and every screen that uses those components inherits correct keyboard behavior automatically.
Solving it per screen instead means re-litigating the same focus-management bugs every time a new modal or table ships, and inevitably missing one.
The takeaway
An automated audit is a floor, not a finish line. Real keyboard usability in dense enterprise UI comes from focus trapping in modals, grid-pattern navigation in tables, explicit edit-mode transitions, and visible focus states — built once into shared components, then tested by actually unplugging the mouse.
Let's talk about your frontendRelated reading
UX · Forms
The Anatomy of a Good Form: Labels, Errors and Field Order That Reduce Mistakes
UX · Reading Behavior
Designing for the Second Glance: What Users Actually Scan vs. Read
Accessibility · Enterprise
Accessibility Beyond Keyboard Nav: Live Regions, Focus and ARIA That Works
See keyboard accessibility applied in production on the FarmGate case study.