There are many inputs on the personal computer, but the oldest and most central is the keyboard. As such, the most robust and fully-featured code lives here (usually at the OS level), and thus when other programs decide to override the OS for whatever reason, subtle bugs creep in.

Twitter's spellcheck is historically unreliable

Twitter users asked for years for an edit button because of the pain of typos: you would quickly dash off a thought and send it out into the world, and an hour later you would realize you made an egregious error. At this point your options were to delete the post completely (losing all your precious fake internet points), or to let the error be, suffering the internal and social shame of knowing you wrote something so egregious.

Some typos are because of speed and inattention. Within the past few years, twitter rolled out a feature that allowed users to review their posts before posting them. The flow goes as follows:

  • write your post
  • submit
  • your post pops up front and center for 30s, or more or less depending on settings
  • you force yourself to re-read it
  • you either assert you want to post this, or return to editing

I tried to like this for several weeks but had to turn it off. As it turns out, when I'm in the mindset of having written, I find it very difficult to read what I actually wrote. That is, I look at the words, but I see what I think I wrote, not what I actually wrote. The "speed bump" cost a lot of extra mental burden without producing commensurate gains.

However, part of the problem has always been that the twitter text renderer is semi-custom, which means at many times throughout its history it has hidden spellcheck highlighting as you type.

Twitter, Slack, Obsidian... render the actual composer in a different location than where you type

This one is a bit hard to describe, so I'll use a picture:

Where you type is not where your letters show up

(See also: this 𝕏 post.)

This happens most reliably in Obsidian, and intermittently in any other program that overrides the OS's text libraries. Here, I'm using the macOS "Text Replacement" feature[1] to add apostrophes to words automatically.[2]

It should be clear from the screenshot that the program has a system text element "buried" underneath the actual program UI, and is using its content to determine what to render in the program UI.

This happens intermittently in many programs, and it's always offset from the actual position of the cursor. Normally, it would be a minor annoyance, just a simple oversight, except for the following point.

Apps that "hack" the system text renderer do it wrong

In a normal program — say, macOS's built in TextEdit app — when a text replacement is suggested, I can ignore that replacement by continuing to type, or pressing the delete key.

In programs that override the system text libraries, hitting backspace inserts the replacement. Additionally, sometimes (I haven't identified the exact conditions that make it happen) typing normally does so as well!

For instance, here is the result of the keystrokes i, m, backspace, nternet:

Internet'm

I also have a replacement for st -> St., to aide inputting addresses, and occasionally I'll get the equivalent of this:

St.and

Discord positions the text cursor in the wrong place when typing large blocks

On iOS, when you go to type a couple paragraphs in a discord chat, you can see the cursor "dance" up and down between the correct position and some other, weird, computed position.

This induces significant input lag, and is visually frustrating, like being able to hear your own voice on a phone call.

The Microsoft Office suite is indifferent to input latency

I subscribed to Office 365 for several years, and I put up with all kinds of indignities[3] because of the suite's utility. However, what caused me to finally churn was when I could no longer bear the input latency between hitting a keystroke and having a glyph appear on-screen.

I don't know what the root cause was, but frankly, I don't care. The keyboard is my primary method of interacting with the computer, and I absolutely need characters to show up on screen with a latency below say 30 milliseconds in order to maintain flow. For better or worse, having definite confirmation that the letters I typed are correct is a critical part of my input loop, and the entire office suite was breaking that contract.

Much ink has been spilled about how hardware advancements have allowed software developers to become indifferent to performance, but Microsoft's Mac Business Unit are, in my experience, the absolute worst offenders here. I will not let your trash software force me to upgrade my computer, at the cost of thousands of dollars and days of lost time, unless I absolutely have to.

Text is fundamental, and everyone gets it wrong

Text is fundamental to how we interact with computing, and almost everyone gets it wrong in some way. Most users won't complain like I do: they'll put up with the problems, or (begrudgingly) upgrade their hardware, or learn not to do the thing, or silently churn off your program.

I would rather put my energy out into the universe, and say "devs, get this right, dammit!" The only way we can hope to end up in a world where software fulfills its promise to humanity is for people in power to maintain high standards, and to care about the little things, and text is the biggest little thing there is.


  1. This feature is most famous for the "omw" -> "On my way!" built-in conversion. ↩︎

  2. I use this primarily on iOS because the apostrophe is on a different keyboard than the letters, so each time I want to type a contraction these shortcuts save me several strokes. ↩︎

  3. In particular, for several years Office used to wipe 100% of my user settings every time I updated; there were data loss bugs related to having a legacy format document open for more than six hours with auto-save turned on; it was incapable of rendering level-3 headers as anything other than a black box for several years; and they kept pouring time and effort into features that I would never, ever use while slowing down the programs as a whole. ↩︎