{
  "id": 912558,
  "title": "Engineer-to-Engineer: Building a Typing Test That Doesn't Lie to You",
  "url": "https://urgent.news/2026/08/14/engineer-to-engineer-building-a-typing-test-that-doesnt-lie-to-you",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-08-14T22:05:37.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/lizely/engineer-to-engineer-building-a-typing-test-that-doesnt-lie-to-you-5822"
  },
  "original_language": "en",
  "account": "If you've ever shipped a typing speed feature into a developer tool, an educational dashboard, or a hiring pipeline, you'll know that words per minute (WPM) is a metric that can easily be manipulated and is difficult to defend in a code review. This article is for the people building the measurement itself: how to create a typing test that withstands scrutiny from accessibility leads, data engineers, and skeptical senior developers.\n\nThe two meanings of \"word\" you need to settle before anything else are:\n1. The classic 5-character word, where total characters typed (including a trailing space) divided by 5.\n2. The linguistically grounded word, counting whitespace-delimited tokens present in the source text.\n\nThese definitions produce noticeably different numbers for the same user, so you must pick one and document it or expose the formula in a tooltip for the user to see.\n\nA naive implementation measures time from the first keypress to the last keypress and divides, but this approach has three issues that show up in real bug reports:\n1. Idle gaps inflate the denominator unfairly.\n2. Cold-start padding distorts short runs.\n3. Backspace handling changes the meaning of the score.\n\nTo avoid these issues, stop the clock after a certain period of no input, run a warm-up prompt for short runs, and handle backspaces appropriately by computing raw CPM over all characters committed and accuracy as correct / total_attempted.\n\nA reasonable internal model should have three numbers: Quantity (formula), Surface to user? (raw or net), and whether it's a primary or secondary metric. Never display gross WPM, as it rewards sloppy typing. Display the corrected (net) WPM instead.\n\nWhen picking a corpus, consider dictionary vs. prose and domain-specific tokens. Also, think about keyboard layout and accessibility concerns for users on screen readers or alternative input devices. A per-bigram latency map can be a highly useful diagnostic feature once the headline metric works.",
  "summary": "If you've ever shipped a \"typing speed\" feature into a developer tool, an educational dashboard, or a hiring pipeline, you've probably noticed that the simplest-looking metric in computing — words per minute — is also one of the easiest to game and the hardest to defend in a code review. The original article in this series pushes past the 80 WPM plateau. This one is for the people building the…",
  "key_points": [
    "Define two word meanings: classic 5-character vs. linguistically grounded",
    "Naive implementation flawed by idle gaps, cold-start padding, and backspace handling",
    "Use net WPM with warm-up prompt, idle timeout, and backspace handling for accurate measurement"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}