{
 "schema_version": "1.0",
 "page_kind": "article",
 "pack_kind": "generate",
 "slug": "reading-is-fast",
 "title": "Reading is fast, writing is slow — why AI answers arrive word by word",
 "dek": "Paste a whole essay into a chatbot and it swallows the thing at once — then answers one word at a time. That asymmetry is physics, not theater: reading and writing in plain english, measured on our own card — and the measurement argued back, which turned out to be the best part.",
 "published": "2026-08-19",
 "series": [
  "guide"
 ],
 "licence": "CC BY 4.0",
 "status": "pending-judge",
 "pack_note": "no judge is seated, so every chip is held",
 "notice": "items with published:false are held and are not this page's published words",
 "source": {
  "url": "https://research.strata2signal.com/reading-is-fast/",
  "md_url": "https://research.strata2signal.com/reading-is-fast/index.md",
  "md_sha": "f2645b1fe830edabcd3e3b764297c1674ef5767c1bc13bfbe82eeebc73687918",
  "html_sha": "408d1e5031e2d481704298294354a2c9b5f463c2a07d7594a4c5377645379a0e",
  "anchors_sha": "8889c9bad0b4dbce19e9bb4e733d3d41c682de3f4ddeab2e25a2e8709f6e7647"
 },
 "short": {
  "paragraph": "Paste a whole essay into a chatbot and it swallows the thing at once - then answers one word at a time. That asymmetry is physics, not theater: reading and writing in plain english, measured on our own card - and the measurement argued back, which turned out to be the best part.",
  "from_dek": true,
  "counts": {
   "words": 3345,
   "minutes": 15,
   "tables": 1,
   "kit": true
  },
  "bullets": [
   {
    "text": "the median speed for reading 528 tokens was 5,415 tokens/s",
    "figure": "5,415 tokens/s",
    "cite": "a-measurement-from-our-own-card",
    "quote": "phase tokens per run median speed range (tokens/s) reading (prefill) 528 5,415 tokens/s 4,942-5,434 writing (decode) 128 135.3 tokens/s 134.9-135.5 Measured 2026-08-18T06:20Z · qwen3.8:27b at Q4\\K\\M (the compression named at the top of this page; it averages under 5 bits per parameter, some tensors kept wider) · temperature 0 · num\\predict 128 · weights already resident on the card · n=10 · rates computed from the runtime's nanosecond durations.",
    "span": [
     7396,
     7414
    ]
   },
   {
    "text": "the big model accepted 49%",
    "figure": "49%",
    "cite": "the-number-that-argued-back",
    "quote": "Measured while checking this page (2026-08-18, greedy decoding, reproduced bit-identically across three separate runner processes): the big model accepted 49% of the guesser's proposals - an average of 2.95 tokens riding each trip through the weights, 128 tokens written in 43 trips instead of 128.",
    "span": [
     10624,
     10628
    ]
   }
  ]
 },
 "sections": [
  {
   "id": "the-mystery-stated-honestly",
   "heading": "The mystery, stated honestly",
   "level": 2,
   "span": [
    1698,
    2306
   ],
   "chunks": [
    [
     1698,
     2306
    ]
   ],
   "chars": 608,
   "digest": "every chatbot reads in bulk and writes at typing speed. on the machine measured for this page, reading ran forty times faster than writing.",
   "digest_skipped": null
  },
  {
   "id": "reading-is-a-group-photo",
   "heading": "Reading is a group photo",
   "level": 2,
   "span": [
    2306,
    3668
   ],
   "chunks": [
    [
     2306,
     3668
    ]
   ],
   "chars": 1362,
   "digest": "in causal models, the math for each token depends on the tokens before it. the prefill phase allows the model to take the entire prompt in one frame, as if taking a group photo.",
   "digest_skipped": null
  },
  {
   "id": "writing-is-one-at-a-time",
   "heading": "Writing is one at a time",
   "level": 2,
   "span": [
    3668,
    5255
   ],
   "chunks": [
    [
     3668,
     5255
    ]
   ],
   "chars": 1587,
   "digest": "writing is a single-file line called the decode phase. because each choice depends on previous tokens, the model must run again for each new token, making writing limited by how fast the card can move memory.",
   "digest_skipped": null
  },
  {
   "id": "the-notes-in-the-margin",
   "heading": "The notes in the margin",
   "level": 2,
   "span": [
    5255,
    6651
   ],
   "chunks": [
    [
     5255,
     6651
    ]
   ],
   "chars": 1396,
   "digest": "the KV cache, or notes, stores what the model computed about every token. this prevents the model from re-doing the reading for every new word, though the notes claim real memory on the card.",
   "digest_skipped": null
  },
  {
   "id": "a-measurement-from-our-own-card",
   "heading": "A measurement, from our own card",
   "level": 2,
   "span": [
    6651,
    8968
   ],
   "chunks": [
    [
     6651,
     8968
    ]
   ],
   "chars": 2317,
   "digest": "on qwen3.8:27b, reading 528 tokens ran at a median speed of 5,415 tokens/s, while writing 128 tokens ran at 135.3 tokens/s. reading was forty times faster than writing for this workload.",
   "digest_skipped": null
  },
  {
   "id": "the-number-that-argued-back",
   "heading": "The number that argued back",
   "level": 2,
   "span": [
    8968,
    13677
   ],
   "chunks": [
    [
     8968,
     13677
    ]
   ],
   "chars": 4709,
   "digest": "the model uses a draft head to guess tokens ahead, which allows the big model to check proposals in a single parallel pass. for the measured workload, the big model accepted 49% of the guesser's proposals.",
   "digest_skipped": null
  },
  {
   "id": "what-this-explains-once-you-see-it",
   "heading": "What this explains, once you see it",
   "level": 2,
   "span": [
    13677,
    16645
   ],
   "chunks": [
    [
     13677,
     16645
    ]
   ],
   "chars": 2968,
   "digest": "the asymmetry explains why answers stream word-by-word, why the first word takes longest, and why AI pricing has two numbers for input and output tokens. it also explains why keeping weights on the card avoids a multi-second load.",
   "digest_skipped": null
  },
  {
   "id": "what-this-page-does-not-say",
   "heading": "What this page does not say",
   "level": 2,
   "span": [
    16645,
    17342
   ],
   "chunks": [
    [
     16645,
     17342
    ]
   ],
   "chars": 697,
   "digest": "the article does not say the ratio is a constant or that reading is free, as long-enough prompts make even the group photo expensive.",
   "digest_skipped": null
  },
  {
   "id": "what-to-take-with-you",
   "heading": "What to take with you",
   "level": 2,
   "span": [
    17342,
    18620
   ],
   "chunks": [
    [
     17342,
     18620
    ]
   ],
   "chars": 1278,
   "digest": "reading is parallel because text already exists, while writing is serial because the answer does not. the notes save re-reading but not the trip through the weights, and a draft head can hurry the single-file line.",
   "digest_skipped": null
  },
  {
   "id": "how-to-check-our-work-and-see-it-live",
   "heading": "How to check our work — and see it live",
   "level": 2,
   "span": [
    18620,
    19912
   ],
   "chunks": [
    [
     18620,
     19912
    ]
   ],
   "chars": 1292,
   "digest": null,
   "digest_skipped": "credits"
  },
  {
   "id": "the-rest-of-the-seminar",
   "heading": "The rest of the seminar",
   "level": 2,
   "span": [
    19912,
    21446
   ],
   "chunks": [
    [
     19912,
     21446
    ]
   ],
   "chars": 1534,
   "digest": null,
   "digest_skipped": "credits"
  }
 ],
 "chips": [
  {
   "id": "c-89c79e3e",
   "q": "how do reading and writing speeds differ in chatbots?",
   "a": "Reading occurs in bulk, absorbing hundreds of tokens almost at once, while writing happens at typing speed, arriving word by word. On the measured machine, reading ran forty times faster than writing.",
   "cites": [
    "the-mystery-stated-honestly"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-feb80412",
   "q": "what mechanism allows for fast reading in causal models?",
   "a": "Because the math for each token depends only on preceding tokens, every token's math can happen simultaneously if the prompt is already present. This parallel phase is called the prefill.",
   "cites": [
    "reading-is-a-group-photo"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-e7534caf",
   "q": "why must writing happen one token at a time?",
   "a": "The model chooses replies sequentially because each choice depends on all previous tokens, including the ones it just wrote. This serial phase is known as the decode.",
   "cites": [
    "writing-is-one-at-a-time"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-dd9d8187",
   "q": "how does a model avoid re-reading the entire conversation?",
   "a": "The model uses a KV cache, or notes, to retain exact computations from previous tokens. This allows new tokens to glance over existing notes rather than re-processing the entire history.",
   "cites": [
    "the-notes-in-the-margin"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-d4abad9a",
   "q": "what was the measured speed difference for qwen3.8:27b?",
   "a": "For a 528-token prompt and 128-token reply, the reading speed was 5,415 tokens/s while the writing speed was 135.3 tokens/s, making reading forty times faster.",
   "cites": [
    "a-measurement-from-our-own-card"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-f028a359",
   "q": "how does a draft head affect writing speed?",
   "a": "A draft head proposes several tokens ahead, which the larger model checks in a single parallel pass. This speculative decoding allows multiple tokens to arrive per trip through the weights.",
   "cites": [
    "the-number-that-argued-back"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  },
  {
   "id": "c-1a7e366a",
   "q": "what determines the cost of ai input and output tokens?",
   "a": "Input tokens involve the prefill phase, which fills a card efficiently and batches well. Output tokens involve the single-file writing line, which occupies more resources per user.",
   "cites": [
    "what-this-explains-once-you-see-it"
   ],
   "published": false,
   "publish_state": "held",
   "quote": "",
   "quote_cite": ""
  }
 ],
 "related": [
  {
   "slug": "the-typist-and-the-developer",
   "why": "shares ground with § A measurement, from our own card · § The typist"
  },
  {
   "slug": "three-at-the-table",
   "why": "shares ground with § A measurement, from our own card · § The arithmetic that catches a mixture red-handed"
  },
  {
   "slug": "how-the-long-table-works",
   "why": "shares ground with § A measurement, from our own card · § Numbers, so it isn't just talk"
  }
 ],
 "thanks": "",
 "kit": {
  "url": "https://research.strata2signal.com/reading-is-fast/data/",
  "licence": "CC BY 4.0",
  "files": [
   "runs-prefill-decode.json",
   "drafthead-acceptance-receipt.md",
   "MATRIX-PROTOCOL.md",
   "MATRIX-RESULTS.md",
   "matrix-runs.json",
   "MATRIX-WINDOW-RUN-2026-08-21.md"
  ]
 },
 "seat_class": {
  "writer": "gemma-class",
  "judge": null,
  "writer_runtime": "vllm"
 },
 "bench": {
  "bullets_written": 3,
  "bullets_kept": 2,
  "digests_written": 9,
  "digests_kept": 9,
  "chips_written": 8,
  "chips_kept": 7,
  "chips_grounded": 0,
  "chips_published": 0,
  "dropped_by": {
   "new_noun": 0,
   "figure": 0,
   "length": 1,
   "cite": 0,
   "judge": 0,
   "quote": 1,
   "directive": 0,
   "redaction": 0,
   "profanity": 0
  },
  "new_noun_tokens_checked": [
   "128",
   "128-token",
   "135.3",
   "27b",
   "415",
   "49%",
   "5",
   "528",
   "528-token",
   "AI",
   "KV",
   "qwen3.8"
  ],
  "new_noun_tokens_withheld": 0,
  "figure_definition": "v3",
  "drops": [
   {
    "kind": "bullet",
    "reason": "quote",
    "item": "on the machine measured for this page, reading ran forty times faster",
    "detail": "no ledger sentence in the-mystery-stated-honestly carries 'forty times faster'"
   },
   {
    "kind": "chip",
    "reason": "length",
    "item": "how does the KV cache impact long conversations?",
    "detail": "q not lowercase"
   }
  ]
 },
 "generated_utc": "2026-09-09T01:28:13Z"
}
