· Emmanuel Abona
Ship Fast, Stay Accessible: A Practical Checklist
There’s a persistent myth that accessibility is a polish phase — something you bolt on at the end when there’s time left over. In practice, the opposite is true: the cheapest accessibility work happens at commit time, and the most expensive happens after launch.
Here’s the checklist I actually run before every release. None of it requires specialized tooling, and most of it takes under a minute.
## Keyboard first
Tab through every interactive element. If focus disappears, gets trapped, or moves in a surprising order, that’s a bug — not a nice-to-have. Every disclosure, modal, and menu needs a visible focus state and a working Escape.
## Semantics before ARIA
Reach for the native element first. A <button> with a click handler beats a <div> with role=button and four ARIA attributes every single time. The best ARIA is the ARIA you didn’t need to write.
## Contrast is a contract
Run your two most-used text colors against a contrast checker. Body text needs 4.5:1, large text 3:1. If your design system encodes color pairs as tokens, you check this once and never again.
## Motion is opt-out
Wrap every non-essential animation in a prefers-reduced-motion query. Loading spinners can keep spinning; parallax heroes should not.
## Forms tell the truth
Every input gets a real label (not placeholder-only), errors are announced to screen readers, and the error text says how to fix the problem, not just that one exists.
None of this is heroic. It’s the difference between a codebase where accessibility compounds and one where it’s perpetually overdue.