Page 4

Newsletter
  • Get a newsletter digest every Friday:
Contact

Send me feedback, tips, bug reports, and anything else:

About me and the blog

My name is Marcin Wichary (he/him). I’ve worked as a UX designer, typographer, front-end person, and manager at Google, Medium, and Figma. I’ve also written a book about keyboards and typing, gave talks, and published essays about design, typography, and technology.

Unsung is my blog about software craft and quality.

More info about Unsung

Send me feedback, tips, bug reports, and anything else:

More info about Unsung

“Something seems to be going crucially wrong with the frame rate.”

Let’s Game It Out is a YouTube channel where Josh Knoles occasionally grabs a modern videogame and tries to play it in a particularly creative way – finding bugs, breaking things, doing an action more times than anyone thought possible. What makes it even more fun is that what’s tested often are early access, unfinished games. Here’s an example 27-minute video of a game called Parking Tycoon:

There are many more. I could tell you that occasionally putting one on teaches me something about bugs or lets me put myself in the mind of a very inventive user. Sure, occasionally, perhaps. But mostly these are just fun to watch.

Five moments in snapping history

Bear (a notetaking tool) has simple image resizing, with one extra nicety – if your images are near each other, resizing one will snap to the width of the other:

In the Finder, columns snap to the width necessary to keep all the names untruncated – and not one pixel more:

(Sidebar: This is also the only place I’m mentioning today that nicely uses the trackpad’s haptic feedback at the snap moment. I tried to indicate it in the video; this is not the final visual treatment I’m thinking of, but let me know if this kind of visualization of haptics feels useful to you!)

macOS does something really interesting when you get its windows close to each other. Instead of typical snapping – pulling the thing you hold toward the other item like a magnet – it instead prevents you from going further for a while, in either direction. Perhaps the right analog here would be glue:

If initially feels a bit funny, but I think I like it. It’s less aggressive and avoids needing some sort of cancellation (an option or a modifier key) if you don’t want it, because it never feels in a way.

It also works for matching heights, like in Bear:

In Figma, building atop regular snapping, we introduced something I awkwardly called “self-snapping”: if your objects are inside a container, the container will snap its padding to whatever it sees on the other side, without any explicit auto layout/​flexbox:

I am sharing these five examples (and one from before) because I think they exemplify a nice thing: precision without bureaucracy. In each case you could imagine an explicit heavy option somewhere in the menu…

  • Bear: Set Image Width…
  • macOS: Match Window Heights
  • Finder: Restore Column Width
  • Figma: Unify Padding

…that would feel slow and cumbersome.

Instead, these take the freedom of direct manipulation and sprinkle just enough almost-invisible structure in a moment where that structure is undeniably useful. (Of course, you still might want explicit options somewhere in the menu or your command palette, if only for accessibility reasons.)

I like that these quiet features have your back and make you look good, and that their creators understand that something almost aligned can feel worse than something completely misaligned.

“Try quickly typing 1+2+3. I bet you won’t get 6.”

Earlier this month, I talked about a rotation button in photos that behaved really nicely in iOS, and not so great on the Nothing Phone. Here’s a story of a similar fumble iOS once made that might bring the point home even more.

The calculator app has been preinstalled on iPhones ever since their debut in 2007. For the longest time it hasn’t been anything more than a standard four-function calculator with a decades-old feature set. If you’re not careful, however, you can mess up even that.

Ten years into iPhone’s history, iOS 11 introduced a problem just like the Nothing Phone rotation – quickly tapping on keys would show them as responding, but the actual action wouldn’t be registered. Michael Tsai’s aggregator’s first entry has a video from Stephen Heaps:

It shows typing 1+2+3+4 where iOS forgets one press of +, resulting in 1+23+4 = 28. Many more people posted about it afterwards, and showed various other examples.

It is oddly enthralling to see a computer fail at basic math. But what’s particularly historically interesting and perhaps even more embarrassing for Apple is the absolutely rich history of solving this kind of a problem.

Calculators evolved alongside typewriters as the earliest devices with button-like (as opposed to piano-like) keyboards. But the stakes were different.

Imagine a badly constructed typewriter and all the ways it can disappoint you: the letter might be faint if you press the key lightly or puncture the paper if you press it too hard, the output might be misaligned, or the typebars will jam in some way, forcing you to go again.

A typewriter has to work hard to divvy up a blank, analog piece of paper into a reliable, pleasant-looking grid via escapements, ratchets, and so on. But a calculator’s work to convince the analog world to be digital was much more important. After all, it’s not likely that the typewriter key you pressed will output the wrong letter – but on a badly constructed calculator, a light press of 5 could absolutely output 4, or 6, or 4.5.

And, while the typewriters only take your words verbatim, the calculator’s job is precisely to create new numbers out of the numbers you type. An imprecise mechanism can mess up that math. A jam could perform a partial or nondeterministic calculation. Adding 1 to 999,999 and the force necessary for the resulting cascading carry could break a device in the middle of work.

On top of all that, languages have a built-in redundancy. Evn if yuo mak many typoes, th sentece can stil be understod. But all numbers basically look alike. A calculator could make a mistake when it comes to a number that is absolutely vital for your payroll, for engineering, or for navigation – and you would never spot it.

Understanding all this, many calculator makers even already in the 19th century spent a wild amount of effort convincing people not just that their devices were helpful, and fast, and easy to use, but also that they could be trusted. Buttons were carefully weighted. Comptometers came with a locking mechanism. If a machine felt something didn’t go right, it would stop working and require a hard reset. The message was: “You can trust me, because I won’t ever show you bad math, and I’ll stop myself before I will ever lie to you.” Charles Babbage was so confident in his Difference Engine that he welcomed people to try to mess with its mechanical wheels in the middle of the calculation, convinced that even a sabotaged machine won’t ever make a mistake.

Just like with the Selectric decades later, those things were solved by people who cared, in the much harsher mechanical conditions.

Of course, I don’t expect everybody at Apple core iOS team to be a calculator UI historian (although it would be nice for at least one person on the team to be one!). It is embarrassing that no one on the team had enough imagination to realize that making a button respond to a quick press during animation, but not register it would cause all sorts of serious trouble. (The bug was fixed in iOS 11.2 by removing the animations, and subsequently the animations were brought back without the original problem in iOS 11.3.)

But maybe the bigger embarrassment is that Apple didn’t have a battery of tests to run on top of the UI at various speeds, mimicking fingers of what must be millions of people using the calculator app. That, too, has been a standard procedure for decades.

Those tests seemed missing in 2017. I hope 2+3+4 years later that’s no longer the case.

“Is this acceptable? Not really. Is it understandable? Absolutely.”

When you visit parts of the website of the Driver & Vehicle Licensing Agency in the U.K. outside of standard office hours, you will see this:

It seems ridiculous, almost like the famous 500-mile email bug, but Dafydd Vaughan explains how it came to be. It won’t be a surprise that the story starts with an old computer system, built around a day/​night cadence where people would visit the agency during the day, the information would be collected, and all the data processing would happen overnight:

At the time, many of DVLA’s services – particularly those relating to driving licences were still backed by an old IBM mainframe from the 1980s – fondly known as Drivers-90 (or D90 for short). D90 was your typical mainframe – code written in COBOL using the ADABAS database package. Most data processing happened “offline” – through batch jobs which ran during an overnight window.

The team upgrading it in 2013 decided to not attack too many things at once, and swap the innards but keep the day/​night system intact.

I’ll let you read some details inside if you are interested, and if you want to learn why the 2013 decision is still a 2026 (or at least 2025) reality. Like many of these, it is a story of heavy financial and technical constraints. But I will excerpt this bit, because I think many teams in any company – design systems, security, or “core” (whatever that happens to be) – would relate to it:

It’s difficult for an organisation to keep its focus and attention on a complex upgrade – particularly without getting noticeable benefits along the way.

The tricky part is that in many places you do end up in a legacy situation that is exactly as absurd as “an internet service having opening hours,” but you might be too close to the problem to even realize it.

“Maze of pages, redirects, and confirmation emails”

Nikita Prokopov on his fun Tumblr-like site Grumpy Website that collects UI transgressions with light commentary:

Why log in when you have to, when you can instead experience the same Kafkaesque maze of pages, redirects, confirmation emails, copying codes, and searching for a second device—all a week in advance?

I agree with authentication experiences being absolutely horrible, especially in the corporate context. But I think the “your login expires in 5 days” callout is actually positive. Your reauthentication will happen anyway according to the security regimen. Instead of it potentially surprising you at a wrong moment – for example just before, or in the middle of the presentation in front of a boss – you could get ahead on that process during the next moment of downtime, and have some peace of mind.

I know Slack has a similar warning, although I don’t happen to have a screenshot handy; I imagine a few other places do, too.

(However, that gesture doesn’t give apps permission to handle expiring credentials badly. There should be no excuse for losing anything the user is doing – for example writing a long comment – just because the reauthentication kicks in in the middle of them doing that. Even the app losing its mind for a while just as its separate parts are waking up to the reality of reauthentication at their own pace and throwing strange errors, but the login screen hasn’t reappeared yet, can be really confusing.)

The Swiss Cheese model, pt. 1

Have you head of the Swiss Cheese model? You see it sometimes in descriptions of how complex systems fail. The visual usually goes like this:

The whole idea is: even if you have multiple layers of safety – like many slices of cheese – there are always holes in each slice. Typically, a hole in any slice is covered by a non-hole in the previous one or the next one. (For example, a car might not allow you to grab your keys if you have not shifted to park – or, if you start driving with a handbrake on by accident, the car might yell at you.) But occasionally, the holes just happen to line up, and a larger disaster strikes.

The model is used in analyses of past accidents, and prevention of future ones. It has proponents and detractors. It’s hard to talk about its applications because the most common examples are horrific. In my book, I wrote about Therac-25, and that was a really unpleasant chapter to research and to write. Other go-to case studies are equally bleak: Chernobyl, Challenger, the Tenerife airport disaster, the Deepwater Horizon explosion.

But I wanted to share it because in my head it applies to UI design also, and sometimes helps me think of how small details add up to a larger whole.

In this first part, let’s start with a more traditional example, although a non-drastic one. Here’s a story of Knight Capital Group, a financial services and trading firm. I’m going to hand off the summary of the accident to Henrico Dolfing:

On the morning of August 1, 2012, Knight Capital Group opened its systems for what should have been a routine trading day, yet within minutes the firm began sending a flood of unintended orders into the U.S. equity market, buying high and selling low across dozens of stocks in a pattern that made no economic sense and could not be stopped through normal controls. What initially appeared as unusual market activity quickly escalated into a systemic failure inside one of the largest market makers in the United States, with algorithms behaving in ways that neither traders nor engineers could fully understand in real time. […]

By the time the issue was identified and the system shut down roughly 45 minutes later, Knight had generated more than 4 million executions across 154 stocks, covering approximately 397 million shares, and accumulated positions worth billions of dollars, resulting in losses of more than $460 million […]. The scale of the incident was not only financial but structural, as a single deployment failure had propagated through a system responsible for a meaningful share of U.S. equity trading. […]

Here’s what happened.

Long ago, the firm built a pretty boring function called Power Peg to automate some transactions. The function used a standard shared limiter that made it stop executing when all the required transactions were fulfilled. After some years in use, the function was deprecated in 2003 and stopped being used then, but crucially, the code was never actually removed.

Some time in between 2003 and 2012, the limiter functionality was upgraded, and the old code stopped being compatible with it. All code in production was rewritten to use the new limiter, but the Power Peg feature wasn’t, as it was already deprecated and not in use.

In 2012, the firm started writing a new program for automated transactions. Its creators decided to reuse the same software flag that previously activated Power Peg. The existence of the old code was known at the time, and the idea was that the code would be overwritten by the new program, so the reused flag would only trigger new code.

In July 2012, the new code was finished and the firm started to install it on all the servers, overwriting Power Peg. The firm intended to deploy the new code to all eight servers, but a mistake resulted in it only arriving on seven servers.

No one caught that mistake.

At this point, you can piece it all together. At this point, I imagine many of you have been wincing more and more with each passing paragraph.

On August 1, the flag for the new functionality was turned on. Everything was fine on seven servers, but on the eighth one, the flag reawakened dormant code that immediately started executing. As the old code was not compatible with the new limiter, it was never limited, cascading into millions of transactions in less than an hour, and a lot of collateral damage; the subsequent market reaction to the news of the firm losing over $400 million and caused its own stock to tank.

Oh yeah, I didn’t mention this yet – the failure killed the firm. (Well, it resulted in a merger, but that seemed to be a way to save face after Knight Capital Group almost went under.)

How does the Swiss Cheese apply to this? You can see it as five holes in five different slices of cheese:

  • it was a mistake to not actually remove the old code
  • it was a mistake to reuse the same flag
  • it was a mistake to not deploy to all 8 servers
  • it was a mistake to not have a procedure for someone to double check the deployment
  • it was a mistake to not have a way of auto-detecting (and perhaps auto-stopping) the runaway processes when the regular limiter failed

What’s important to understand about this model is that either of these in isolation would objectively be a small mistake, and caught by the other slices. As a matter of fact, any four of these happening would still not add up to a catastrophe.

But in this case, the five mistakes lined up perfectly.

Many analyses of such accidents blame a single event in the chain – in this case often the sysadmin that didn’t deploy the code to eight servers properly – but this is primarily because we like stories of individual agency, and are not well equipped to understand stories of systems. (Even Star Trek added a Borg Queen.)

That’s the accident eventually dubbed “a Knightmare.” More examples of systems closer to our hearts in following parts.

text.makeup

I am generally not someone who cares much for easter eggs (unless they come with interesting stories), but John Gruber’s one-liner made me pause for an unexpected reason:

Joanna Stern explains why this emoji is correct today: 📅. (This one too: 📆)

I thought the two different calendars was some trickery, but the answer is simpler than that. I did not realize that, inexplicably, there are two distinct calendar emoji: one for calendar, and one for a tear-off calendar.

The way I learned about it was to use a tool I made a few years ago called text.makeup:

I thought this would be a nice opportunity to share it with you. If you’re debugging a string you don’t understand, or are just interested in learning about various Unicode or encoding secrets through playing (see the left sidebar!), it might be a fun thing to use.

I just updated it with the most recent emoji (and Unicode goodies) that will drop after September this year.

“No such thing as too fast”

On Mastodon, Alex Russell, a product architect who’s worked on Chrome and Edge, and has focused on tech standards for a while:

Once Upon A Time At Google, a team presented results that had confounded them: making the system load several times faster increased engagement somewhat, but in line with Tammy’s findings, engagement went way up for every 100ms improvement below the 1s threshold.

Going fast enough to become “dial tone” changed user behaviour and expectations in a hugely positive way for the product.

This sort of “no such thing as too fast until you prove it” lesson is everywhere.

Phrasing it as “no such thing as too fast” is really interesting, and not something I encountered before.

(The way I understand the “dial tone” remark is commenting on reliability of landline phones in the second half of last century. The landlines were extremely reliable and even came with their own power source; you could pick up the handset and the dial tone – the system’s confirmation it’s ready for you to dial – was inevitably and immediately always there, already waiting for you. There was never any delay when the phone had to get ready for you to call.)

Russell links to a report by Tammy Everts:

If you make websites for a living, stop what you’re doing and read this research by Tammy Everts; it shows what many of us have been saying for a long time: even if there is such a thing as “fast enough” (there isn’t), it’s generally much faster than you are targeting.

The report itself is perhaps too deep and jargony for this blog, but the TL; DR seems to be: Google suggests the time for the site to finish loading its largest piece is 2.5 seconds, and Everts argues and shows evidence that it’s a lot less.

I have before focused on “finger speed” – making sure the interactions operate at the “speed of flow,” which requires sweating speeds counted in milliseconds. Everts’s and Russell’s comments confirm that millisecond-speeds matter for other reasons, too.

A good kind of an update: The responses

Thank you to everyone who answered the call for good software updates from last week. I received so many nominations that the list below is severely narrowed down, but I appreciated every response!

I grouped the answers in sections I saw emerge organically, I included links to apps, and did some light editing for clarity. (You can always explore more answers on Mastodon and Bluesky.)

I hope you find this inspiring in some way – I know I did! – or at least enjoyable.

Something I asked for

People shared examples of improvements they particularly asked for, improvements that meant something for people close to them, or even simply seeing people given credit for ideas:

I’m a space educator and bring a mobile planetarium in schools. I use a piece of open source software called Gaia Sky. It is developed by only one developer, and I seem to be one of only a handful of people in the issue queue requesting updates. Always a prompt and incredible reply from the developer.

I filed a request: “In my shows, I tell the audience that the rings of Saturn are made of bits of ice, rock, and dust. Then when I fly through, it shows a mostly 2D ring system. Has [making the rings use particles instead] been considered before?” I made the issue on February 12, and by May 11 had a Saturn ring system with thousands of little rocks and pebbles running smoothly in my planetarium dome. Kids loved it.

Earlier this year I contacted Fantastical’s Flexibits requesting that hiding an event was accessible through the menu bar, not only in the contextual menu. Few weeks later, they emailed me to let me know the feature was coming in the following release.

The dev behind OpenStreet Browser listened to my feedback and added a filter item to a more logical category.

The recent SailfishOS update brought back the weather app and implemented Bluetooth for the Android support. Both of those are things my dad asked for, so I was quite happy! :)

The [social network] Pachli developer is amazing, the care he puts on everything, and mentioning every people that was involved on new ideas/​fixes/improvements/​translations... I do not remember others doing it. It’s great.

Every Pachli update is a prove of something great happened/is happening... Increases the hope world count a little.

I enjoyed using Easy CSV Editor and JSON Editor by VDT Labs in 2020-ish. Unfortunately, JSON Editor was macOS-only at the time while Easy CSV Editor was also available on iOS. So I contacted the guy behind VDT Labs, and asked whether he planned publishing an iOS version of JSON Editor anytime soon.

He got back to me immediately, said he didn’t have any plans, but liked the idea. He asked for my opinion on a few decisions he’d have to make, then published an iOS app literally weeks later. I love using his software. […] When you published I trust in TextEdit, his stuff came to mind immediately despite getting the occasional feature here and there. It’s nothing flashy, but the apps are simply reliable and haven’t changed much at all.

Apps that are updated respectfully, without changing too many things

On that last note…

The last AntennaPod UI update looked great, but didn’t force me to re-learn how it works. It has remained stable from a UX standpoint for as long as I have been using it.

I use the Infuse app primarily on the Apple TV (but also on the Mac and iPad occasionally) and I’m constantly impressed at their singular commitment to deliver on making their app useful for its users in all sorts of small thoughtful ways on an ongoing basis. Most recently it was supporting Plex and Jellyfin-style folder/​file naming conventions for movie extras.

The only upgrade that always pleases me is a major Debian release. actually I’m happy because it’s been a rock for more than 20 years for me. I hate how everything is perpetually changing in IT nowadays. Debian doesn’t. The only change I fondly remember is when zfs integration got easier.

Updates that showed developers cared about more groups of people than just mainstream

Pachli’s update to include pronouns of the posters in the timestream.

OCR on macOC and iOS expanded into Swedish a while back. Super useful, especially on OS level, so all apps can use it.

Not sure what version, but the recent macOS that added made-for iPhone hearing aid support made a huge difference in my work life.

TL; DR: Apple established a standard for “made for iPhone” hearing aids that pair directly to iPhones quite a few years ago, but it’s only recently (in the post M1 era) where Macs have supported the same protocol. It means that calls and other audio from my work Mac go directly to my aids, without needing a clunky intermediary device worn around the neck. Since I need to wear the aids anyway, it means seamless access to audio. It’s just such a nice quality of life improvement.

An update that made an app better for me was the recent addition of flood warnings to Watch Duty. I have a mountain cabin in California but my main home is now in coastal North Carolina. I installed, and pay for, Watch Duty for warnings on California fires, but I can now also use it for warnings about North Carolina flooding, which can happen during tropical storms.

Updates that felt genuinely focused on helping users

The grocery list/​recipe keeper/​meal planner app AnyList. They just added “leftovers” tags and recipe queues to a recent update and my wife’s over the moon. It meshes perfectly with how her brain operates.

It has not been made fully public, but I am playing with the preview release of [font editor] Glyphs. And it’s great: Huge number of small fixes all around, but the whole UI has been revamped to match the macOS latest. Running variable fonts for testing is so much easier with an axes slider. Lots of editing tweaks that make things much easier. Genuinely nice and useful stuff, they pay attention and listen.

Every upgrade to Halide has made me happy. I can’t think of a specific change but every upgrade seems like it does better what a camera app should do: have stuff where your finger needs to go without thinking about it. Anything that helps my finger hit the right place at the right moment without thinking it’s a win. I think a camera app is the ultimate example of cognitive load mattering.

I’ve been building different things with [web framework] Web Origami and the most recent 0.7.0 beta release allowed me to do a lot of things I couldn’t before.

The creator is an absolute pleasure to work with. He listens to folks using the tool. Every update is gold and makes meaningful improvements based on how people are actually using it.

[Window manager] Niri consistently has extremely well thought and well implemented out features. Many of them are things that I hadn’t even considered wanting from a window manager that I now can’t live without.

Every update I have ever received for the Android application Kanji Study has been delightful. Chase Colburn does a great job with steadily improving the app and adding great new features. There are a bunch of little UI flourishes in it that I think you’d like. The kind of thing that comes from a tight loop between developer and users, smoothing off the edges that provide friction.

Something that comes to mind is the way it implements history. If I clicked on one of the characters in the Kanji listing for 美人, it would take me to the page for that kanji, and it’s easy to end up down a short rabbit hole if you’re the kind of person who enjoys leafing through a dictionary semi-randomly. But there’s a good history functionality that makes it a breeze to get back, and you can jump to an arbitrary point in that history instead of mashing “back” until you get to where you want to be. That’s not award-winning design, but it’s good design.

Updates to core stuff that never asks for limelight

Flighty: I don’t think I’ve seen a team work so hard to get the core use of their app nailed perfectly. No enshittification, no horrific UI changes. Their most recent update just further enhances what they’re great at.

[Painting app] Krita’s latest version has on screen text editing and it’s a very welcome addition to an already great tool!

I don’t know how recent it was, but the one for macOS where you can cut and paste text from images was a real pleasure to encounter.

When [3D modeler] FreeCad hit 1.0 – lots of small improvements in the sketching workbench made an area of the app you spend lots of time in so much nicer.

I’m thinking of the Transit trip planning app, which I love! There’s a bug fix for a problem where you would be en route, then looking at a different app on your phone, then come back to find out that the Transit had been killed in the background, and you had to restart your trip planning. That was a definite problem and i’m excited to hear that it’s been fixed!

I was also reading about the big design update they put out last year, which i continue to enjoy and get a lot of use out of. :)

Overcast! Recent update that added selectable text, and generally they made some good stability improvements recently.

[Text editor] Zed once had “improved font rendering on Linux” in the release notes and the text really looked better after the update.

I really want to share the Fantastical Calendar Mirroring feature. I have happily paid for Fantastical for years. And over that time I have paid for some calendar mirroring tools, none of which I liked for the money. Now I get a streamlined mirroring feature in the app I already love. It was a total surprise too!

I have used Fantastical for years now and, when I had to switch to using a Windows desktop at work last spring, I downloaded the released-but-still-under-development Fantastical for Windows app. I was accustomed to changing the visible calendar group on macOS using Ctrl+1 and would often try it out of habit, even though it wasn’t implemented on the Windows version yet. In fact, I would even mentally convert the macOS Ctrl+1 command to Windows-speak and type Alt+1. Then one day earlier this year, Alt+1 actually changed my calendar group. Much to my surprise, I had again typed the shortcut, despite it doing absolutely nothing many times before, and found that Flexibits had not only added a keyboard shortcut for that setting, they had added the keyboard shortcut I knew to expect coming from macOS.

When did iOS add document scanning with OCR? iOS 17? 18? Much better to use a phone instead of a dedicated scanner for periodic receipt scanning, plus the document then syncs to a Mac.

[Text editor] BBEdit 16 has some nice quality-of-life improvements, like per-project colour settings, which might help me to avoid accidentally making changes to the wrong version of a project, something I’ve done more than once.

This is a sad, sad commentary on my life choices in general, but i happen to be really glad that a recent Outlook for Mac update gained the ability to import PST files. [Legal software] eDiscovery still exports in PST format, so until this feature launched you had another step (or more, depending on your method) in getting exported mail back into a mailbox that lives on a Mac.

App makers working hard on developing trust in ongoing updates

The Playdate game console. They do such a great job adding joy and functionality to the platform with each software update. I continue to love the music and thoughtful interactions throughout, but more specifically the recent-ish update they added to the game browser, adding in folders and improving access to games on the system.

Cities: Skylines II has been on an incredible upward trajectory ever since Paradox gave the game to Iceflake. Optimization, features, just overall feel of the game have all improved since they took over at the start of the year. It’s a great redemption arc for a game that many people want to be great, but fell short in its first few years.

[RSS reader] NetNewsWire: every update does something genuinely useful like action log in one of the latest updates, so I can see what’s the problem if feed update takes suspiciously long time.

Wrike Desktop for Windows: very much a rolling release model, they do a monthly update, and I’m just happy when my work applications don’t break or get a bunch of BS added that I didn’t need (just didn’t want to use enshittification twice in one email). The most recent update was minor, some field admin changes and some further detailed reporting. Can’t beat that.

The release notes I’m always excited for are Zen Browser. They’ve been cranking through a roadmap of user-focused features, and their design is opinionated about it. Not always right, mind, but with strong convictions. Recently, improvements around tab tiling and the addition of “boosts” – color scheme and element zapping without an extension.

Stripe continually improves. it’s the SaaS vendor I use and am most pleased by. Every few months they add a new feature and I usually react “ah, that’s good” and “wow, their documentation is so good I can decide if I want to implement this and implementation will be so easy”

The team at [map software] QGIS consistently makes the app better with each release. Over the years I’ve made my peace with a dorky OSS interface and I appreciate that this isn’t being continually reinvented. Meanwhile, they’re keeping up with all the changes and movements in geospatial tech and ensuring that updates to key packages make their way in.

Let’s hear it for game devs who do free content+QoL updates for years after release. No Man’s Sky is the poster child here, but I’m constantly amazed by the number of indies who substantially add to the game experience long after they’ve been paid. (And yes, I know this helps sell the game + DLCs). I think Criterion’s Burnout Paradise was the first to really surprise me this way. IIRC they didn’t add much content for free (maybe a couple of game modes?), but they overhauled the UI completely.

Yeah, Pachli and [browser] Vivaldi came to my mind too. These are the ones that I’m not afraid to update, and while they were great already, somehow they are still getting better and better.

the Typeface app for MacOS continues to be a spark of joy for me. Recent updates have added a nice font pairings tool and thoughtful UI updates. I always look forward to new updates from this dev.

[Personal finance app] YNAB! This one has been the most consistent over the past few years for me. It feels like every single update just made it so much better. They added a summary home screen, removed some fluff, and added even more reflection features which is really convenient for a budget app.

App makers that feel like they’re going against the current bad trends

For me, every [photo gallery] Ente update so far was a significant improvement and going in the direction I’d like things to go. Recently, I was positively surprised by the new offline gallery feature to use Ente without account from March this year – refreshingly different from where most projects are heading.

NetNewsWire 7 required macOS Tahoe when it came out, but was in a later update made compatible with previous macOS, Sequoia.

[Personal database] Obsidian — one change that was fun.

The folks at FernCRM made their platform AI-optional. They basically will turn off all the AI features if you don’t want them. And for the folks who use those features a tiny bit, they offer selective metering so you don’t have to pay for everything if you don’t use everything.

I literally canceled a premium subscription to a software I liked because it was mandatory and weirdly intrusive. People appreciate choices!

Pretty much any [social network server] GoToSocial update falls into that category for me. [Software framework] Forgejo updates do as well.
I found that projects with a strong anti-AI policy generally deliver delightful updates. I wonder if there’s a correlation. (I really don’t, there is.)

The excellent [podcast app] Pocket Casts just launched generated chapters in podcasts. They’re automatically added with (whisper it) AI, but that doesn’t matter. They just work and are surprisingly useful and delightful to use. This isn’t an “AI feature” - it’s a feature that just happens to have been made possible because of AI.

I find myself looking at the chapters of almost every podcast I listen to now as a sort of preview and taster and navigation menu. Helps me decide if I want to commit to the whole episode or just skip to a particular section. Wonderful stuff. I didn’t realise it would be such a valuable addition until it was added and I started using it. I’ve attached a screenshot from a recent episode of Blair Braverman’s brilliant What To Carry, What To Burn pod (which I can also recommend).

Updates that are presented well and fun to explore

We chatted about good release notes before, and here are some more good updates – ones designed that exude some amount of healthy pride, and ones that people simply enjoy reading.

Every [3D software] Blender and [gaming engine] Godot release brings tons of cool new stuff to play with, and their release notes pages are delightful too! [Blender release notes + Godot release notes]

The first thing that makes me happy is how pretty the notes look. They’re not a boring list of changes.

Soulver 4’s release notes were great: an overview of the new features followed by examples / documentation of how to use them.

I also enjoy reading This Week in Plasma for [Linux distribution] KDE, even if I don’t use it much and it’s not release notes strictly speaking, but the fact they explain what and why they did is so cool.

Apps that don’t pressure people to update

The most delightful part of the [calculator app] Soulver update is that they’re still doing major paid versions (not subscription).

Soulver 2 and 3 never stopped working. (I never got to use Soulver 1, so can’t speak to that.) In fact, the email that announced v4 said: “Please note, there’s no pressure to upgrade if you’re happy staying with Soulver 3, which you can continue to download from here.”

Ever since I started using Blender a few years back, every update has been solid, well documented, and focused on improvements to real things its users care about. Whenever I check the release notes it’s like: “new geometry nodes! more cycles renderer optimizations! more compositor features!” Even if this post jinxes it and the next release has all kinds of AI garbage grafted onto it, it will also never force me to update.

Particular updates that stuck in my memory

I really liked this section:

You asked for recent, but about 30 years ago I got a BIOS upgrade which fixed a bug in the HD driver and made it quicker. That was sweet.

I was just thinking the other day about how the MKII version of Roland’s MC-500 sequencer software is still one of the most joyous software updates I can ever recall. This was in like 1987 or something.

The details are somewhat lost in the mists of time but I just remember getting a whole boatload of new functionality, some of which I didn’t even know I needed, and yet it all fitted perfectly within the conventions established by v1 so there was nothing new to learn in terms of the UI. Amazing stuff for what was essentially a numerical keypad and a few function keys.

The MkII software came out when they released MkII hardware – but was completely compatible with my MkI. That was the big joy about it, getting all the great new features without having to obsolete/​upgrade my hardware. (I think it even came with a sticker to put over the logo.) Can you imagine that?!

I hope you’ll forgive me breaking the rules a little bit, but one of my favourites ever was Super Mario Brothers 3.

Let’s pretend as we all should that Super Mario Brothers 2 never existed and look at SMB3 as a sequel that fixed so many things from SMB:

  • You could now go backwards in a level in case you missed something
  • You could replay a level you’ve already cleared to explore and find new things
  • You had a place to put power-ups for later
  • You could freaking fly

Perhaps that’s the dream – to release an update so good that the users think about forever.

“It would’ve been much simpler to just use an animated cigar.”

In this 7-minute video, kaptainkristian talks about the fascinating process of making Who Framed Roger Rabbit, the pre-CGI hybrid animation/​live action movie from 1988:

This is called “bumping the lamp” – a phrase coined by Disney during the production of Roger Rabbit to describe going above and beyond what was expected of the animators.

It would’ve been perfectly feasible if Roger stayed flatly illuminated throughout this scene like a cartoon normally would, but instead the animators put in the time to shade every cell uniquely so that the practical light would bounce off from the same way it would a physical object.

And they had to account for that dynamically shifting lighting with every contour in Roger’s limbs, his clothes, his face, the cast shadow he creates on the environment as well as the texture of the light, the slightest difference in color temperatures, the lamp sways… even Roger’s ears have a slight translucency, since they’re much thinner than the rest of his body. They thought of that.

Audiences had no expectation for this level of realism in 1988, but all these seemingly-superfluous details help sell the effect at a subconscious level.

“Bumping the lamp” can be seen on two interlocking levels: one that focuses on the quality of the output (as above), and one that focuses on process toward personal mastery of craft.

On that second level, here’s an anecdote from the original Mac team, a few years earlier:

One day Burrell started doing something radical. Andy came by my cube and said “You’ve got to come see what Burrell’s doing with Defender.” “How can you innovate with a video game?” I wondered. I’d seen Burrell and Andy innovate on all kinds of things, but I couldn’t image how he could somehow step outside the box of a video game - the machine controlled the flow and dictated the goals. How could you gain some control in that environment?

We started up a new competition, and when Burrell’s turn came up, he did something that stunned me. He immediately shot all his humans! This was completely against the goal of the game! He didn’t even go after the aliens, and when he shot the last human, they all turned to mutants and attacked him from all sides. He glanced in my direction with a grin on his face and said “Make a mess, clean it up!” and proceeded to dodge the swarm of angry mutants noisily chasing after him.

I am neither a good visual/​motion person, nor a great gamer. But I recognize this desire to once in a while walk up to a pool and throw yourself into a deep end of it, out of principle. Sometimes when I start a new project, I choose a different framework or method I haven’t used before, just so things are harder. On Aresluna and here on Unsung, I very deliberately chose “no centering” as an arbitrary principle, just to push myself to embrace the – harder, but more rewarding – asymmetry, and see where that takes me.

I am sharing this just after I shared the other maxim because I believe in those more that I believe in style guides or design principles coming “from above.” I see craft blossom when it can flow from individuals, and when the organization and attendant processes recognize that. Let people bump the lamp, make a mess, feel certain way about weird things, and do other things – and then let others observe, learn from that, and share the strange rituals and arbitrary rules that make them try harder when no one’s asking for that.

Thanks to Jon Wiley for sharing the original video.

Max one weird thing

If you want to record the screen from your iPhone on your Mac, open the QuickTime Player app but ignore New Screen Recording, and click on New Movie Recording instead.

This instruction is a fever dream of three weird things in sequence:

  • What on earth is “QuickTime”?
  • I am recording with a player?
  • Why can’t I choose the option that describes exactly what I want to do?

It’s interesting to me to think how we got here:

  • QuickTime is a 1990s brand, an offshoot of QuickDraw. Instead of QuickAnimate or QuickPlay, Apple called it QuickTime because it felt cute: time is what separates static images from video. The branding was much more prominent in the 1990s and 2000s, but mostly fell out of use – searching for “quicktime” in system settings today, for example, yields zero results.
  • Long ago, the Player was the only free, consumer-facing part of QuickTime, so it needed special branding. You could purchase QuickTime Pro – you would even get aggressive ad banners for it inside Mac OS! – and its encoding and saving capabilities would then be sprinkled across the entire system.
  • “New Movie Recording” originally offered recording from external video cameras (like iSight, another cute name). “New Screen Recording” was added later, for recording from internal screens. My guess is that technically, architecturally, or both, it was easier to treat external screens (like iPhone or Apple TV) as external video cameras since the UI and affordances matched them more closely. So that’s why screen recording from external devices ended up under “New Movie Recording.”

As a UX historian, this is fun and fascinating! I love tracing back that kind of stuff and learning how certain strange things came to be.

As a user… not so much.

“If you want to record the screen from your iPhone on your Mac, open the QuickTime Player app but ignore New Screen Recording, and click on New Movie Recording instead.”

This feels thrice arbitrary, closer to a magical incantation than a computer command, requiring you to hold a bunch of counterintuitive things in your head, or look them up every time. “Wait, what was the strange name?“ “Yeah, it’s called a player, but that’s ok.” “Hmm, I remember something about not choosing the obvious command.“

I have this internal rule that a flow or a space in the UI should have at most one weird thing. I can’t prove it to you mathematically, and I would be the first to find exceptions to my own rule. But one weird thing makes me nervous, and two or more weird things in concert raise the hair at the back of my neck. Two weird things is when the “launch blocking” bulb lights up in my head. Work needs to happen to bring the weirdness count back to 1 or 0.

This is one example of what I dragged Apple earlier for: it’s not just speed that matters. It’s noticing this kind of complexity, places where an easy way was chosen, design debt accumulated, and things got simply too weird. Apple allowed three weird things to accumulate here.

(By the way, delightful weird doesn’t count! But it’s hard for me to imagine anyone defending these three things above as delightful or positive in any way.)

“If you want to record the screen from your iPhone on your Mac, open the QuickTime Player app but ignore New Screen Recording, and click on New Movie Recording instead.”

“If you want to record the screen from your iPhone on your Mac, open the Recorder app and click on New Screen Recording.”

It’s not trivial to get to this or something similar, but it’s also not really hard. You can get rid of weird things, but you need to want it.

Sets of overlapping circles

This is a design joke that always makes me laugh:

This was made by… someone, a while back, I believe in response to the Twitter logo redesign of 2012, which showed the new logomark as composed of exclusively circles:

Now, to be clear: that Twitter logo redesign was gorgeous, and I do not particularly care if it was designed out of circles or whatever else. I don’t even think its announcement was presented in an overly pretentious way – it was nowhere near the 2008 bloviating Pepsi redesign or the rank amateurism of Yahoo’s 2013 logo.

It’s just… design can be so pretentious and up its own golden-ratioed ass, and I can’t help but love anything piercing that bubble. (In my perfect, naïve world, Doug Bowman – the designer behind the logo – also finds the joke hilarious!)

Also, I feel like design is just not… funny, all that often. Quick, think of any product design joke.

See what I mean?

I can’t, either. My favourite graphic design joke is “if it’s big and ugly, it’s not big enough.” (You know, it’s funny because it’s sad.)

“Cursed knowledge we have learned that we wish we never knew.”

Immich is a self-hosted photo/​video app, and one of their side pages is Cursed Knowledge:

Cursed knowledge we have learned as a result of building Immich that we wish we never knew.

There is something about this format that I really enjoyed as a reflection but also as a way to share with others – simple one sentence/​paragraph updates with links, so you can inhale quickly but also go deep if needed. There’s some overlap with bugs here, but it’s not necessarily only buggy stuff – also quirks of formats, observations, etc.

I made a cursed knowledge page for Unsung – let me know!

Thanks to Casey Gollan for posting about the original page.

“If HEIC has no haters I’m dead.”

Over on Bluesky, Melanie Walsh asks:

Favorite and least favorite file formats? I’ll start.

Favorite: TXT
Least favorite: HEIC

The answers – both replies and quote posts – are really interesting because most of the time they’re not about inherent capabilities of each format, but:

  • how well supported it is in the general ecosystem?
  • how painful it was last time I used it?
  • who’s using it and for what?
  • if there is one app I use it with, do I like this app? (interesting in the context of PDFs which some people love, and others hate)

Of course, Walsh put a finger on the scale with her initial example, but HEIC stands out as a favorite least favorite. I understand this is mostly out of its limited support, raising a question whether Apple spent the right amount of time socializing and incentivizing its adoption – even on a Mac, you can’t escape blank stares the moment you drag it into many websites/web apps:

HEIC on the other hand, Apple’s way of making photos smaller and everything else more complicated than it needs to be.

By the way HEIC is when you drag a picture from your Notes app into your email, and then it laughs in your face and is like sorry, girl, I’m HEIC!! I don’t do things like that!!

I didn’t know I had a least favorite file format but yeah HEIC can fuck right off

Sweet fucking hell fuck heic into the sun

Reading the replies here makes me feel like I live in an oddly privileged bubble in an inverse of the usual meaning of privilege for being a poor Android-using mfer who has never seen a HEIC in their life and had to actually look that sh*t up.

Least favorite is a toss up between HEIC (WHICH NOBODY ASKED FOR, APPLE) and WEBP

Controversial but I hope everyone involved with HEIC only tastes soap instead of cilantro forever

I agree with this person that WebP is much better supported than it used to, but it sometimes takes one link in the chain – cough Google Docs cough – for you to avoid a format forever. And, those are always lagging indicators. If a format didn’t work once in an important flow, it might take many years before you come back:

all the people saying “webp” in the quotes might as well be fighting WW2 still. look for another grievance. please

Some other fun answers:

IF IT’S CALLED [C]OMMA [S]EPARATED [V]ALUES WHY DO I HAVE TO OPEN A WINDOW AND CHANGE THE DEFAULT DELIMITER OPTION FROM TAB TO COMMA ??!?!?!

Favorite: MP3 (invented piracy, patents all expired, doesn’t need an FPU)
Least favorite: DICOM (nightmarish metadata, too many possible image encodings, when it wants a 3D volume the solution is just “a bunch of files in a folder”, also IT IS A NETWORK PROTOCOL >:( )

Least fave: .R01, .R02, etc... – nothing needs to be split into multiple rar files! Please stop! The world has moved beyond this.

Least favorite: can I count those awful pointer doc types Google uses, like .gdoc and .gsheet

favorite: transparent PNG
least favorite: transparent PNG that is not really transparent but just a fuckin checkered background

I forgot about this meme:

For least fav I voted for GIF, having not only spent countless hours trying to make good-looking animated gifs that do not weigh tens of megabytes, look horrible, and cause performance issues… but also having worked on two different products (Medium and Figma) that had to swallow gifs made by others, and seeing engineers lose their minds peeking into their insides and how messy they were.

To be fair, GIF comes from the late 1980s, and simply outlived its purpose. It’s a fascinating format that literally deserves a book written about it: the messy patent wars, the pronunciation, the technical format and many surprises hiding inside, even the word “gifs” transcending the format itself to mean “short animated memes.”

To go back to the thread, a small pattern that I also encountered from time to time:

Least favorite: .md, specifically when it’s used for Sega Genesis game roms. There’s already a type of text file type called .md, so Windows tries to open them in notepad. Just call it .gen instead, nerd.

Favorite: TS, the one that opens in my IDE
Least Favorite: TS, the one that opens in Quicktime

Lastly, because of course someone had to do it:

Favorite: Gaylord Archival® Reinforced Acid Free Manilla
Least favorite: Office Depot Vertical Hanging Folders

More absolutely strange Google shortcuts

I’m endlessly confounded (as a user) and fascinated (as a designer) when it comes the shortcut conventions in Google’s professional web apps.

They seem… bad, but bad in a strange, inexplicable, enthralling way. Previously, we encountered this:

The lessons there were, primarily: don’t… do this, and also maybe don’t show it like this.

Today’s entrant, from Google Drive, offers a different lesson:

Immediately, I have so many questions. Why a sequenced shortcut instead of something simpler, in a space where there aren’t that many shortcuts? Why Control of all things? On a Mac? Why is it so different than Google Docs in every way – don’t you all talk to each other? And why not a proper typographical symbol for Control (^ is not ⌃)?

But there is also a mechanical lesson here. I’d encourage you to actually press any of these three shortcuts, and watch your fingers doing that. I bet you will observe one of two ways:

  • ⌃ down, C down, C up, ⌃ up, F down, F up
  • ⌃ down, C down, C up, F down, F up, ⌃ up

Turns out, people are messy when it comes to modifier keys. That messiness was even encouraged from the very first day we breathed life into the very first modifier key. Most of 20th century typewriters had a full stop and a comma on both shifted and unshifted positions – pressing Shift was heavy early on, and this helped when punctuating all-caps sentences or preparing for a capital letter starting the next sentence. (Also, Shift Lock wasn’t as smart as Caps Lock is.)

But even without that encouragement there are still two legitimately valid ways to understand “^C then F” – you release ⌃ before the second key, or after – but Google Drive only listens to the first one. Couple this with giving you zero feedback after ⌃C, and I won’t be surprised if many people try this sequence once, and give up assuming it’s just not working. So, it feels it’d be good to think about being extra forgiving here, the same way it’s good to think about “coyote time.”

As always, please let me know if you see the method in this alleged madness. After all, the goal for this blog is not to blindly ridicule things, but to learn together through thick and thin.

Flickr’s optimistic committing

Somewhere next to optimistic loading and optimistic saving exists another technique to make apps feel faster: optimistic committing.

Flickr is a great example. After navigating to photo upload, you enter a sort of a foyer where you can drag in the photos, reorder them, name and tag them, and otherwise prepare them before pressing the big Upload button.

But Flickr also optimistically assumes you will press that button, and slowly starts uploading the heavy photos in the background the moment you drag them in.

Like all optimistic schemes, being friendlier toward the user complicates things for Flickr’s designers and engineers. After all, there is still a regular upload modal after you do commit to the upload…

…so the two states – quiet staging area upload, and the official visible upload – have to be reconciled and kept in sync.

Also, optimistic but eventually cancelled uploads have to be cleaned up from the servers.

Lastly, there’s signposting. Contrary to lighter optimistic loading schemes, which typically simplify reality by pretending no data transfer is actually happening, the optimistic committing here is actually visible through small indicators:

I think this transparency is welcome. In the past, Meta (who else!) got into hot water for abusing optimistic committing:

Did you ever record a video on Facebook to post directly to your friend’s wall, only to discard the take and film a new version? You may have thought those embarrassing draft versions were deleted, but Facebook kept a copy. The company is blaming it on a “bug” and swears that it’s going to delete those discarded videos now. They pinkie promise this time.

In this context, it’s good that Flickr conveys data is being sent to the servers; I believe this helps with building trust.

On top of transparency, I think it’s also good that this process shows the progress of uploading with a lot of precision – not just between files, but also within each file. Internet connection speeds vary so much, not just geographically, but also even situationally, that this is really helpful in practice. There are many moments where auto saving to the cloud needn’t bother the user unless the connection goes offline for a longer while, but this feels like a situation where clarity is better than magic.

My one (1) Medium secret

When I was at Medium, over a decade ago, I really enjoyed going deep on typography.

People seemed to generally enjoy what we did. Writers really loved automatic em dashes and range dashes, discovered the beauty of hanging punctuation, and as funny as it might sound today, the smart quotes were a huge hit, too. I was proud of the tight drop caps, the underlines brought me some notoriety, and we even supported ligatures at a time when not only this wasn’t the default, but it also had some mildly scary performance consequences.

But for every two things that worked well, there was also something that in retrospect proved to be me trying too hard, and had to be quickly undone.

I was really excited about resurrecting pilcrows, but many users saw them as rendering or escaping errors.

I briefly added vulgar fractions to all the places where Medium rounded numbers, but that made those numbers confusing and weird in practice.

(And I already mentioned the strange, rare bug with system fonts, although I suppose there are always bugs.)

It was an interesting calibration process. And somewhere in between successes and failures was one thing that I have never mentioned before, and one nobody ever brought up.

I recently shared the story of 2015’s typographical redesign of Medium. As we were exploring the candidate typefaces, we fell in love with one in particular: Charter, a font designed by the industry legend Matthew Carter – and no, this is not a bug, Google Search switches to using Carter’s own Verdana to honor him.

Charter had this perfect balance of “casual” and “refined” we wanted for Medium at the time. Unsurprisingly, it also came with a bunch of typographical niceties – among them lowercase (old-style) digits, which I really wanted:

But there was a problem. Those lowercase numerals came with a “medieval 1,” a particular style of a lowercase digit 1 that resembled an uppercase I. People hated it and were confused by it, thinking indeed that a bug caused a letter I to make its way to the numbers.

No amount of pleading would get us to push that digit through. The backup plan was going with uppercase numerals, but I hated the idea; those digits felt so ugly and pedestrian to me – they were not just uppercase, but also monospace! It was a frustrating situation, being so close and yet separated from a warm Charter embrace by one glyph that it didn’t happen to have.

And so… I drew one.

I, someone who has never ever designed a typeface, decided to vandalize Matthew “The Most Widely Read Man In The World” Carter’s typeface and plop in a new digit 1 of my own creation.

The internal complaints stopped. Weeks later, we launched the new fonts, Charter front and center, my fresh non-medieval 1 attached. I don’t remember the exact details, but we found a way to do this that was compatible with the font’s licensing – and yet I never talked about it because… well, I think you can understand why.

I believe my rogue 1 lasted until a subsequent redesign in 2022, long after I left the company. A decade in, I still don’t know how to feel about it. Did I save Charter as a candidate for Medium by mutilating it a bit, am I writing this post just to launder my own ego, or is this the equivalent of a perp coming back to the scene of the crime? Was I ambitious (laudatory) or ambitious (derogatory)? Maybe you can tell me. But I hope either way it makes for a fun story.

“Animating something and animating something well are two very different things.”

From Jakub Krehel, a new blog post about self constraint in the era when AI makes it easy to ignore constraints altogether.

My caveat is that the post doesn’t fully come together for me – jumping from AI to animations and then back to AI the way the author did does not feel cohesive.

At the same time, in the middle of the post, there are some nice examples of animating juxtaposed with overanimating that caught my attention. We talked about sugar and juice before, and this adds to that conversation. Here’s one example:

Not all animations need to be wholly meaningful and functional – just like not all graphic design, iconography, and typography have to be – but part of growth as a designer is knowing how to limit your budget of “superfluous” stuff even if no one else tells you to, and then how to spend that budget really, really well.

“Not being good at something doesn’t mean you can’t love it.”

Perhaps ironically given the subject matter, I found this 34-minute video by Razbuten a bit intense, but I would still recommend it to people who work on onboarding, settings, etc.:

In the video, the author tries to answer the question: how to make any given game a challenge, given there is no universal standard of difficulty and every player arrives at a game not just with different skillset, but also likely different goals.

There are many techniques a game can use to adapt to the player – a simple upfront difficulty selector, complex difficulty settings, a training level, adaptive difficulty, accessibility/​assist modes – but there are no easy answers. Each method comes with pros and cons, and perhaps the very notion that a game should adapt to the user is flawed; some players might find it more rewarding to have to step up to the game instead.

In the video, Razbuten covers a lot of examples really well. I’m not going to say any of this maps 1:1 to productivity software as goals of games are very different than goals of apps… but even though I have never played any of the games mentioned, the examples made me think. After all, some of the psychology of mastery will be the same between these two realms. (I bet there were at least some of you who saw the previous post about LaTeX and thought “this looks hard and fascinating – I’m going in,” and others took a note to never approach it.)

“…or I could click seventy buttons.”

I like Angela Collier’s videos about physics and I was delighted to discover this 18-minute one…

…because it’s a great continuation to the thread about the complexity of Microsoft Office I shared recently.

Collier talks about why physicists prefer LaTeX to Word. LaTeX is sort of a nerdy HTML that predates HTML. It looks like this…

…and given how nerdy HTML already is, you might imagine this is a power-user tool that’s chiefly about power and control. But Collier makes the argument that there are some things that LaTeX makes much easier:

  • there is absolutely no need (or peer pressure) to spend time styling the document by choosing fonts, colors, etc.,
  • there is no “live preview,” and making a PDF is a separate step similar to compilation in coding – which means it doesn’t constantly occupy your mind,
  • GUIs can slow you down because the keyboard is faster than the mouse,
  • LaTeX doesn’t give you a lot of control over positioning, which is better than giving you only a semblance of control over positioning (this is the TikTok meme Collier alluded to briefly).

This is really interesting because it goes right to the core of the uncomfortable truth: naïve design decisions meant to make things easier might achieve the opposite. I shared the ForkLift example where the team didn’t understand what made the previous version great, and more recently the animation that could slow people down.

(Of course, there is also the issue of typographical craft of LaTeX documents set in Computer Modern, but let’s save this for another time.)

Also, the video starts with Collier apologizing for potentially making the audience feel dumb in a prior video. I don’t think it’s a joke, and I found it thoughtful and refreshing.

The adjective of the present or the verb of the future

My arch nemesis lives only about 1.5 blocks away from me. It’s a coffee shop door. More specifically, it’s a sign on that door:

This is what happens with embarrassing regularity: I am inside, about to step out, my brain reads PUSH from the other side – and so of course, like an idiot, I push the door instead of pulling it.

Sure, bad design. But don’t worry, I am not going full Don Norman on you. I wanted to show you this other thing, in Pixelmator Pro:

A pretty non-threatening menu, it seems, but sometimes when I see a treatment like this, my brain actually sees this…

…and it takes just a bit of extra thinking to figure out where I am and where I’m going.

This is one of the recurring boolean problems in UX design. Given a choice, do we show the noun/​adjective of the present, or the verb of the future? Because another way would be to show the current state:

To me, this is unambiguous; the state is easy to understand visually without thinking, and the implied flip action also feels pretty natural. You could go even further:

Without knowing much of the context here, this would be my recommendation. Of course, this last configuration not only implies toggling but also implies showing, but that’s probably okay given all the context surrounding it?

Now, like with many things I talk about here, I don’t have the benefit of user testing or research. (In practice, though, they aren’t often available for small things like this, anyway.)

Also, this isn’t a universal recommendation. This is an evergreen UX problem for a reason. If there were other commands around it, the showing/​hiding verbs might have to appear. Same if no option had a checkmark by default. (One or two checkmarks establish an implied “show/​hide” verb for the whole section, but without any, it might feel like an unusual menu filled with only nouns.)

There are more conventions – “Turn X On,” showing both options, submenus – each one with pros and cons. It’s good to be aware of all, because even if your tool uses one consistently, users might bring a different one as a default way of processing things. But the worst part about the Pixelmator menu is that it’s mixing conventions:

This screenshot, like the first one at the top, is real. It’s hard for me to understand the rationale here, and it makes processing this menu even harder. Maybe I need to go to a certain neighbourhood coffee shop to get more coffee…

A good kind of an update?

I know software updates can be exhausting these days; on top of regular weariness of things changing, there’s contentious stuff like Liquid Glass, or thoughtless AI integrations.

So, I’m curious: What is a recent software update, anywhere, that made you happy? Something that made an app genuinely better for you, or showed a developer listening to users, or was just plain old delightful?

I’d love to learn, and I will summarize the responses next week.

If you want to, you can respond on Mastodon and Bluesky – and see other a few people’s nominations as inspiration – or send me an email. Thank you in advance!

“Nothing at all like the bloated app that Dropbox’s Mac client has grown into”

John Gruber at Daring Fireball penned a short eulogy for Maestral:

As of today Maestral continues to work just fine. I don’t know when these certificates are expiring. And I don’t know what I’m going to do when they do.

Dropbox enshittified its app – my friend joked once that Dropbox is a rare example of a company that pivoted away from a product-market fit – and it seems Apple’s API changes didn’t really help, either.

Maestral stepped in to help restore the minimalistic, functional core of Dropbox – I believe Doctorow terms this “disenshittification” – but it was helmed by one person, Sam Schott, who has every right to move on to other things.

An accident inside an accident

I have never been particularly fond of “shake to undo” on the iPhone. It’s not a pleasant gesture to perform, I feel like typically I don’t have strong enough of a grip on my iPhone to invoke it without fear, and the gesture often undertriggers, requiring an even harder and more cumbersome shake, etc. etc. (One thing I never want to undo is my screen’s pristine surface by having it meet the sidewalk.)

I am aware that many years ago, iOS introduced an alternative: a three-finger swipe. But I feel like Apple flubbed that, also – three fingers are hard to plop onto a small screen, and while regular going back navigation means swiping from left to right, undo is inexplicably a three-finger right-to-left swipe. I mean, okay, it’s explicable – it’s the movement of the cursor before and after the typing is undone. But to my brain that feels less strong than the other association, and undo is not always about typing.

I also see many people not knowing about this alternative and I must not be the only person struggling, since I see more and more apps throw in the towel and put undo and redo as on-screen actions:

Curiously, I even spotted Gmail on desktop doing that recently:

It’s all a welcome improvement under the circumstances, but those are literally all over the place – imagine if on a laptop, each app had a different key shortcut for undo. (We’ve had that, in the 1980s. The 1980s Nostalgia Industrial Complex doesn’t want you to know about stuff like that.)

Anyway, some time ago I promised more onboarding content, and here’s a little thing that happened to me recently. The inciting incident is that I accidentally shook my iPad, and then I saw this:

Wait, does it mean there is yet another, third undo shortcut?

I swiped through the carousel to see these:

None of these feel particularly pleasant to use – although they are nicer on the iPad than on the iPhone – but I started playing with them, and I discovered a fourth entry point. Just a single three-finger tap shows a new-to-me onscreen editing menu, sort of the equivalent of the Edit menu on the desktop:

This works on the iPhone and the iPad, and since then that’s the one thing I did remember and I find using. So, to summarize:

  • shake to undo – unpleasant
  • double tap with three fingers to undo – unpleasant
  • a three-finger swipe to undo – unpleasant, confusing direction
  • single tap with three fingers to show a menu, then tap to undo – less unpleasant, but stuck with me

Yeah, even this still doesn’t feel great. But it’s there in a (no pun intended) pinch.

So, is this a success story for onboarding? I think not quite. It all started with an accidental iPad shake, after all, and the gesture I ended up using I also discovered accidentally. But to be fair, I also did learn something, and I think there are some bones of the right solution in here somewhere. Onboarding and in-product education generally feel so bad that even this rickety encounter can be counted as a small victory.

“Relying on passengers to open the doors proved to be a bit of a curse.”

It’s Button Week here on Unsung, and here’s a 10-minute video by Jago Hazzard about the door opening/​closing buttons on London’s tube:

We previously covered elevator buttons and the enduring myth that – at least in America – they are just “pacifiers,” disconnected from the elevator’s systems.

The door opening and closing buttons in London went a different, but no less complex route, having to do with changing expectations, dwell time, and air conditioning. The video also briefly covers how the subway trains changed, which is fun to see.

The great release notes of BBEdit

I have to admit that when a reader wrote to me and said…

Every point release of BBEdit delights me. I live in BBEdit. It’s one of the few packages for which I read through the release notes every time (they often have spots of hilarity).

…I got a bit concerned. One thing that I hate more than wasted release notes (“Bug fixes and performance improvements” is the boilerplate’s boilerplate) is funny release notes – the ones where instead of actually conveying what changed, the text field is used for something, erm, “creative.” (Perhaps most infamously, Medium had had a spell of “fun” release notes about 10 years ago, to a mix of amusement and blowback).

But I needn’t have worried. The release notes of BBEdit are just plain old solid good work, with only a sprinkle of humor:

  • The “Zoom” command makes a triumphant return to the Window menu.
  • Fixed crash which would occur when displaying completions from language servers which violate the published specification and provide something other than a string for the details field of a returned completion item. (glares at Solargraph)
  • SNUCK IN A SPECIAL FEATURE FOR CRAIG NO NOT HIM THE OTHER ONE I HOPE HE LIKES IT

It’s been a while since we looked at release notes, and these are a great example of something that can help you understand not just what an application is, but what it will become. For example, I saw this fly by…

  • Made a change in the minimap so that punctuation isn’t greeked, which helps improve visualization.

…and even though I have never used BBEdit, I immediately started nodding. It made sense; greeking is helpful for letters, but I can see how it can do more damage than good for punctuation that has a pretty specific visual signature. BBEdit’s author knows what they’re doing.

Another person (whom you might recognize) chimed in to say:

Nothing in BBEdit is “abandoned.” Everything is on the table for possible improvements. Also remember that this is an app that was originally written for classic Mac OS!

This made me think about what separates apps that you’re excited to keep growing from the apps you’d rather see frozen in time.

The release notes of BBEdit made me trust it so, so quickly. Not just the pace of change and clarity of communication, but also indeed this certain feeling that the product is “alive” in all the right ways. Even if I don’t know or use the features, I quickly get a sense that the changes are for me, or at least other people like me, rather than serving unspecified corporate needs, chasing fashionable trends, or pursuing unnecessary pivots. Hell, even the ratio of changes – new features vs. quality-of-life fixes vs. performance improvements – seems good.

On top of all that, it’s fun to read good release notes, because you can learn something new. These, to me, were fascinating:

  • “Entab” and “Detab” have had their names changed to “Convert Spaces to Tabs” and “Convert Tabs to Spaces”, respectively. This is more verbose but less abstruse.

Jargon!

  • There is a new setting in the Keyboard preferences: “Enable macOS “Help” key”. This is off by default, so that pressing the “Insert” key which is present on some PC-style keyboards doesn’t open the in-application help. (This frequently happens accidentally.)

Keyboards!

  • If an FTP browser window is active and disconnected, “Open from FTP/​SFTP Server” will start its connection sheet, rather than doing nothing.

Determinism!

“If you never saw the words Game Over, did you really do it all?”

A truly fascinating 17-minute video where Chris Siebert at 100th Coin ventures out to play Super Mario in a way where every single byte of code and every single byte of graphics are used, and then shows his work:

There was something about seeing the visualization of the entirety of the code being “used” that made me sit up:

It reminded me of IBM 1401, the 1959 business computer I saw a lot at the Computer History Museum. It takes up a big chunk of the room…

…but is still so simple that you can watch its console and understand exactly what is going on in its little huge electronic brain:

There’s something very powerful about this and made me imagine a version of it for my code, my CSS, my blog. Even the web lost a lot of its visited link vs. unvisited link fog of war kind of feeling of exploring the space and understanding how it is shaped.

The video gets into the coding weeds in between 2:25 and 13:35 – by the way, isn’t it scary to imagine your code pored over decades later, bugs and hacks and all? – but if you skip this part, make sure to come back at 13:35 for the verdict, and then for the graphics.

Spoiler alert: Some bits of code are never used, but the reasons are fascinating. All the untouched bytes are remnants of shameful mistakes, abandoned decisions, head fakes, and twin protections so strong that their first layer never gets penetrated – each one of them a tiny afterimage of other possible versions of Mario we’ve never gotten.

About Unsung: Recent improvements

This is a meta post about this very blog. If that’s not interesting to you, skip to the next one!

Here are some improvements I’ve made to Unsung in recent months. Always curious of your feedback or pointers to places that do these things better!

Weekly emails

I made it so clicking on every (non-YouTube) video or image takes you to the equivalent of the weekly email you’re looking at, but on the web, where you can watch the videos in their natural habitat. It’s scrolled to the right position, so you can just continue reading there.

I’m sorry, I know it isn’t great to shove people outside of their mailbox, but I don’t think there is any way for videos to work well inside emails, and a lot of Unsung is about precise videos. (The only thing allowed is GIFs, and they are really not up to the task.)

Video playback

On that note, I improved the handling and controls of video playback. On mobile, you can tap to play/​pause and swipe left and right to move. On desktop, you can drag the handle, or also swipe left/​right. You can also use ← → keys to advance frame by frame.

My goals are to have video controls that are both minimalistic (for example, never covering the contents) and precise, to match how videos are used here. (But if you tab to the video, it still shows “classic” controls for accessibility.)

Blink comparators

You might have noticed that I added some blink comparators in a few posts where they seemed to be useful (one, two, three, four). Is that fun? Does it work for you? Because I have more ideas for light interactivity on Unsung.

Technical details

Some people asked technical details about specific things on this blog, so I added a technical details page with answers.

Dashboard

If you are interested in that kind of stuff, I added some more charts and stats to Unsung’s internal dashboard (and deprecated sentiment, which wasn’t really working).

“You are a printer we are all printers”

From Nilay Patel, a recommendation for the best printer of 2023:

Here’s the best printer in 2023: the Brother laser printer that everyone has. Stop thinking about it and just buy one. It will be fine!

The Brother whatever-it-is will print return labels for online shopping, never run out of toner, and generally be a printer instead of the physical instantiation of a business model. […]

I am telling you to just buy whatever Brother laser printer is on sale and never think about printers again.

Patel did the same in 2024 and 2025 – you should check them all out if you want to smile, because they’re genuinely funny, as are some of the comments:

I’ve been using one of these for 6 years. The low toner indicator came on about 7 months ago. I bought new toner.

Reader, I haven’t replaced anything. It still prints fine, the new toner is still sitting on a shelf somewhere.

Least frustrating printer I’ve ever owned. Would buy again.

I’m sharing these on this ostensibly software-related blog not only because printer enshittification happens primarily via software. I wanted to share it also because this feels very similar to me to the post about TextEdit – a simple and deserved desire to own technology that works without any strange machinations, forced updates, and stress.

Balls (practically) to the wall

The last post about the Nothing Phone not buffering its button presses reminded me of something.

Here’s IBM Selectric, a 1961 typewriter:

Past decades get compressed into a singular point in time, so we might all think of Selectric as “yet another old typewriter,” and I definitely did before learning about it. But the Selectric came 80 years after the first typewriters, and it packed so much user-benefitting innovation it really was an iPhone of its time. (Alas, I don’t believe there was a matching “are you getting it?!” keynote.)

Selectric was, honestly, a triumph of engineering. It popularized swappable typewriter fonts, showcased good industrial design, enabled jam-free typing, and even invented – although that came a decade after its introduction – an actual destructive Backspace. Crucially, on day one, its typing experience was so fantastic that many of the keys on keyboards we’re using 60 years later are still in the same place Selectric put them.

What’s even more impressive? Selectric was purely electromechanical. It had no software, no chips, and no electronics. Everything it has accomplished was expressed in the mechanical language of steel, grease, links, and levers.

Here’s one problem that’s trivial in software, but hard in hardware: How do you prevent people from pressing two keys at the same time?

This is a thing that plagued typewriters since day one, and IBM’s engineers came up with a smart solution: each key was connected to a bar (interposer), each bar had a little protruding notch (lug), and that notch would smoothly dip into a little horizontal row of steel balls (selector compensator tube).

The balls had just enough wiggle room for one notch, so if you tried to press a second key at the same time, the balls would now be packed tight, there would be no room to accommodate the second notch, and the key press would be blocked.

I thought that was really clever, but it was even more clever than that. If you read my essay, you know it starts with the very notion that fingers overlap: as one is going up, often another one is already pressing down. If you were to block any second press before the first press was completely done, you wouldn’t be able to type very fast – and Selectric was meant to be a professional typing tool.

Here’s where the choice of the carefully sized and arranged steel balls came into play. In practice, the second press was not completely blocked. The lug was able to slide just a little bit in between the adjacent steel balls. It was a half press – or, effectively, a half-character buffer. It was all fine-tuned just enough to not impede overlapping typing, while still offering protection from two keys at the same time.

Now, if Selectric did this, in a universe where creating even a half-character buffer meant a little row of carefully machined steel balls, and added weight, and anticipating future wear and tear, and multiple pages in the maintenance manuals… what’s your excuse?

If you’re a button, you have one job

One thing I was (and still am) worried about when it comes to my recent big interactive essay is that by showing all these classic desktop examples, the whole thing might appear old-fashioned, relevant only to a bygone era.

Yet, the challenges it shows are universal. Here’s something I just spotted. This is how you rotate an image on an iPhone and on a Nothing Phone:

It’s a pretty standard control – tap once to rotate counterclockwise, tap a second time to do it again, etc. – with a helpful transition of the photo’s orientation so that you don’t lose yours.

Now, I’m going to exaggerate the problem a bit and tap 90-degree rotation quickly eight times. Eight times should result in what engineers call a “no op” – the image rotating twice in full, and ending up where it started. That indeed happens on the iPhone:

But it’s a different story on the Nothing Phone/​Android:

iPhone will remember and buffer the taps, so that the second, pending rotation will happen as soon as the first is done. The Nothing Phone button gives you a tap confirmation via both haptics and sound, and then ignores the tap if a previous rotation is still animating.

Why does it matter?

I often keep thinking about the framework of situational disability, stating that disability is not just something that happens to a few people and no one else. No, pretty much everyone will occasionally encounter a situation that will make them effectively disabled, and this is why accessibility matters much more than many of us assume:

I think similarly about casual and non-casual use. Photo-taking on phones is typically casual. Phone cameras are typically very good at detecting the photo orientation – but get confused when you’re pointing down. Now, as an example, if you had to take photos of a bunch of landscape documents, you might end up having to rotate dozens of photos, one by one. And it would be so much more predictable and pleasant if you could just tap the button three times at any pace you wanted without thinking, without paying attention, without getting your UI blocked by an animation that no longer helps you.

This is, I suppose, “situational power user-ness.” Given a long enough timeframe – or, in this case, a large enough population – even a casual interface like phone photo editing (or, GarageBand) will meet someone who will have no choice but to treat it more seriously and expect more from it.

By the way, buffering the taps is not the only answer. You can also stop/​accelerate the animation after an interrupting tap, and it seems the iPhone does that as well. But the rule is: never force the user to wait for the animation to finish.

“The root of all margin-collapsing evil”

I liked this page I just learned of called Incomplete List of Mistakes in the Design of CSS. It might not mean much to you if you don’t write CSS, but could be fun to check out if you do. Here are some choice quotes:

  • border-radius should have been corner-radius.
  • It shouldn’t be !important — that reads to engineers as “not important”. We should have picked another way to write this.
  • white-space: nowrap should be white-space: no-wrap.

It reminded me of a similar list called Known Anomalies in Unicode Character Names. Here’s one example:

U+02C7 CARON
U+030C COMBINING CARON

The “caron” should have been called hacek and combining hacek. The term “caron” is suspected by some to be an invention of some early standards body, but it has also been claimed by others to have been in use at Linotype before the days of digital typography. Its true origin may be lost in the mists of time.

These are great because they simply say “this is how we messed up.” They are succinct and candid about problems. More work needs to be done at this point, of course – the CSS list only really contains the “simple,” low-level observations, and I think for both CSS and Unicode fixes cannot simply be made because people and systems rely on the existing behaviour – but the first step is admitting you have a problem, right?

If you’re on the outside, it can be comforting to realize “oh, it wasn’t just me, other people don’t like this, too.” (Scanning bug reports from other users can help in a similar way.) If you’re on the inside, consider making a list like this for a long-standing project. It might do you or your team good!

If you are aware of more documents like these, I’d love if you could send them over.

“I know you think I’ve lost my mind, but trust me.”

A fun (and funny!) 9-minute video from Linternet User about designing a perfect onscreen lever with the right amount of juice:

Love seeing real work in progress like that, plus it ends up in a place I didn’t expect.

It was also great to see “delay and snap” action elucidated so clearly. It feels like a variant of rubberbanding (or, elastic scrolling) where you intentionally disconnect an object from the cursor or finger dragging it.

A simple notification preview in Retro

A nice and I think effective notification preview in Retro, with a verbatim sample text of a notification right below its name:

Not only you can see exactly what you’re going to get and make a much better-informed decision, but the app even uses actual names of your in-app contacts, so you can relate to the notifications more.

Finder’s elite eliding

I know I’m usually driving the Finder pretty hard, but I think that’s a necessity, given its position as the center of macOS for power users, and its situation where it feels like Apple pretty much gave up on it.

But I also want to show things that Finder does well, and this might be something no one does nearly as thoughtfully: text truncation.

This is what happens when you have a filename that’s too long:

This is really nicely done, for many reasons that work in lockstep:

  • Finder cleverly elides text from the middle, knowing that both the ending of the last words (or digits!) of the file name, and its extension are important.
  • Finder shows the full name in a tooltip. I’m surprised how many tools forget to do that, offering no easy explanation for the missing letters. Here are some examples from Notion and Bear, neither of which offers help on hover:
  • Finder position the tooltip exactly atop the existing text. I think this is really clever: it avoids overlapping other useful information, and makes it faster to reorient yourself. Compare with, for example, AirTable:
  • Lastly, Finder only shows the tooltip when it’s needed. This is something where so many places lose their way. For example, here’s Paper and Google Drive, throwing up a tooltip indiscriminately, even if it has absolutely nothing to add to the conversation:

Why does this last thing matter? Because unnecessary tooltips are distracting, cover information, and also – maybe most importantly – turn the interface into a minefield where no safe places remain to just mindlessly rest your cursor without worry.

This last thing is very fuzzy, but so important. You know how unpleasant a lot of articles are on the web these days, solely because you’re always on the edge about what’s going to happen while you read? Am I going to be moved up and down? When and where is the ad going to appear? When will I encounter a new subscription pop-up, and what will be the weird way to close it this time around?

I know you don’t literally tense your muscles while reading those, but I feel like in some sense, in the back of your head, there is always this unpleasant worry that you’re dealing with an unstable interface.

This is not as strong, but I feel a similar way about unnecessary tooltips; they make interfaces feel less stable. You rest your cursor, something jumps up at you, you get distracted and move your cursor instinctively to avoid it, and with any luck, you trigger yet another tooltip, and so on.

I will write more about this in the future. If you asked my former coworkers, I bet a significant portion would say “this guy gets angry at tooltips, like, all the time.” I promise I will get angry at tooltips more here. But today? Today, kudos to the Finder. It shows us that if you care, you can make this small moment feel really great and thoughtful – knowing that small moments multiplied in the thousands are no longer small.

Make the logo^H​^H​^H​^H​^H​^H​^H​^H​something bigger

Speaking of breaking search, an absolutely horrendous design decision I just spotted when using Bing Search:

Yep, you saw this correctly: as you scroll, the ads (already pretty much masquerading as regular search results) actually get bigger to grab your attention.

Jesus.

I don’t know why I was reminded of this fav Twitter joke:

On a more serious note, I was also reminded of this.

“That’s a big number – by almost any scale other than Google’s.”

Thirteen years ago today, Google killed Google Reader. In 2023, The Verge wrote a great piece about the shutdown:

Google’s feed-reading tool offered a powerful way to curate and read the internet and was beloved by its users. Reader launched in 2005, right as the blogging era went mainstream; it made a suddenly huge and sprawling web feel small and accessible and helped a generation of news obsessives and super-commenters feel like they weren’t missing anything. It wasn’t Google’s most popular app, not by a long shot, but it was one of its most beloved.

In the essay, Google Reader is presented as a victim of Google+. I was at Google when Google+ was announced and can corroborate the feeling of an end of an era at the company. The first large internal presentation was a shell shock: the arrival of secrecy, bureaucracy, corporate delusion, inevitable sycophants following not-so-inevitable bozos. But perhaps it was the opposite – Google as a company would have changed anyway, and Reader just randomly ended up being among the early beloved things that stood in the way. (I mean, arguably, Google changing for the worse destroyed even Google Search since.)

I am worried about the open web, but excited seeing some resurgence in RSS usage, and more and more people wanting to come back to the feeling of control, care, and intentionality that using Reader represented. Just a few months ago, Roger Wong found himself reflecting on Reader, too:

What gets me is that the vision Wetherell drew on that whiteboard—a single place to follow everything you care about, organized by your taste, shared with people you trust, and non-algorithmic—still doesn’t fully exist. RSS readers are the closest thing we have, and they’re good enough that I’ve built my entire reading and writing practice around one. But the curation layer Wetherell imagined is still unfinished.

I’m introducing a new tag to Unsung, software eulogies, which right now encompasses Aperture and Reader.

One has to be careful about nostalgia since it has its own gravity and can corrupt as much as a runaway World of WarCraft virus. “They don’t make them like they used to” is a potent drug that can make us disinvested in shaping the future, but it is also true that, well, we don’t make software like we used to. Part of Unsung is about finding inspiration in history, and while each one of us can miss a certain era of computing, certain machines, and certain software for whatever reasons we choose to – healthy or not – I do believe we collectively miss Aperture and Reader for the right reasons that are worth listening to.

“No one knows who patient zero was.”

If you stepped into the dwarven capital of Ironforge on September 13, 2005, you would find only bones. Lots of bones. The city, along with every other major population center in World of Warcraft, had been ravaged by a plague that slaughtered players by the thousands, their bleached bones covering every street.

This is the beginning of the retelling of one of the most infamous bugs in videogame history, written by Steven Messner in 2019. It’s a surprisingly thrilling read.

The TL; DR of the whole issue is that during a specific special event in World of Warcraft featured a big bad boss who actually stole blood off of players to replenish his own health. The fun narrative idea was that players were meant to infect themselves with a virus called Corrupted Blood, to trick the supervillain into getting infected, too.

Things worked well except… the virus escaped containment.

“The corrupted blood was an effect and the designers forgot to clear it off your pet, so if your pet got despawned while it was in the encounter, it would save your pet with corrupted blood on it. The next time you summoned your pet there was no code to go «Oh you’re not in the raid, we should get rid of the corrupted blood.»”

If this reminds you of something, yeah, RuneScape had a similar incident a few months later in 2006. Here, it was also similarly tricky for the developers to figure out how to restore order:

“Our choices were either to go through every pet in every server in every country in the entire world and check if it had corrupted blood and get rid of it, or get really hacky code in where every time you summoned a pet it would check and see if it had corrupted blood on it and get rid of it.” […] Despite numerous hotfixes, it was nearly a month until Blizzard fixed the problem completely by making it impossible for pets to contract the disease.

The disaster had a few interesting codas. The first one was that World of WarCraft and other games eventually started occasionally introducing an epidemic – now 100% intentional – as special events in their games.

The second one? The accidental in-game event helped researchers understand actual real-life epidemics. As summarized on Wikipedia:

Of particular interest to researchers in the use of MMORPGs for epidemiology is that character responses to a virtual pandemic are the result of individual player reactions, adding “a level of authenticity that doesn’t exist in other simulations”. Disease researchers typically study disease spread and control through the use of three general models, all of which make significant assumptions about human behavior. As behavior is difficult to predict, the effectiveness of these models is limited.

“The evilest will-breaking browser game to exist.”

In 2023, Neal Agarwal created The Password Game, a viral browser-based game. Wikipedia has a nice summary:

Although the initial requirements include setting a minimum of characters or including numbers, uppercase letters, or special characters, the rules gradually become more unusual and complex. These can involve managing having Roman numerals in the string to multiply, adding the name of a country that players have to guess from random Google Street View imagery (as a reference to GeoGuessr), inserting the day’s Wordle answer, typing the best move in a generated chess position using algebraic notation, inserting the URL of a YouTube video of a randomly generated length, and adjusting boldface, italics, font types, and text sizes.

The explanation goes on for another paragraph, but I don’t want to spoil too many surprises. However, if you’re not a puzzle kind of person, you can just watch a 40-minute video of Bog trying to beat it:

Last year, Agarwal followed The Password Game with I’m Not A Robot game, making fun of similarly onerous CAPTCHA requirements. Here’s Bog completing it once again – and you can also find other YouTube creators doing the same for both games:

In the same category, a game designer Linternet User just launched a teaser for their game CAPTCHA Hell, which has a different take and looks fun:

I need to add that underlying all of this “fun” is not just tons of frustration with passwords and CAPTCHAs, but also a genuine accessibility problem, as described by Robin Christopherson in 2019 in an article titled AI is making CAPTCHA increasingly cruel for disabled users, or by A11y Collective a few years later. I don’t know what is the absolute latest in the battle with AI bots; anecdotally, I have been seeing almost zero text CAPTCHAs and less visual CAPTCHAs, at the expense of more and more CloudFlare turnstiles (and Google’s equivalent), which make you only click the button, and do a lot of work under the hood to determine if that button press felt human-y or robot-y:

These challenges include proof-of-work (computational puzzles), proof-of-space, probing for web APIs, and various other challenges for detecting browser-quirks and human behavior. As a result, we can fine-tune the difficulty of the challenge to the specific request and avoid showing a visual or interactive puzzle to a user.

There is no more explanation. I think the nature of the beast is that the actual details of how to tell one group from another cannot be shared, which is a shame – I’m very curious.

“Invalid-reverse-solidus validation error”

In my three decades online, it has never occurred for me to try this, and I found it so delightful once I did – both Chrome and Firefox will quietly rewrite backslashes in URLs into slashes:

Not Safari, however, even though the URL living standard says it should.

I am very curious if the presence of backslashes in URLs is owing to Windows still showing backslashes in file paths, or just because people casually don’t see any difference between / and \, which are arguably both similar, and relatively alien in everyday typography. (“Solidus” is the proper typograpical name for this kind of a slash, partly to disambiguate it from all the other slashes with their equally fascinating names.)

Mailbag: The curious case of the disappearing Polish S

Even before the “remaster,” my essay about the Polish S bug was routinely discovered by Hacker News and other places, so I thought I would take a look at all the commentary over the years and summarize.

First, pragmatically, these are the lessons for any keyboard shortcut designer:

  • On Windows, AltGr (Right Alt) and Ctrl+Alt shortcuts are one and the same, and Right Alt and alphabetic keys are used for some languages to output regular accented letters. You should not prioritize Ctrl+Alt shortcuts anywhere your users write text.
  • On a Mac, ⌥ and most keys generate characters. They do so even on English layout for extra typographical flair, but particularly in other languages, regular accented letters might hide there. Note that these are not just letter keys, but also digits and other keys. You should not prioritize ⌥ shortcuts anywhere your users write text.

I couldn’t find a good image, so I made these two as an example. First is Mac’s American keyboard with ⌥ held. Second is Polish keyboard with ⌥ held, with Polish letters highlighted:

Jumping to the promised comments, I liked this story:

Outlook has a shortcut Alt+S to send the current e-mail. In Polish “Hello” is “Cześć”. When you acidentally have non-Polish locale enabled and write “Cześć” in Outlook - you send “Cze” as your whole e-mail.

“Cze” is a very informal greeting, sth like “Yo”. There has been thousands of such e-mails in Polish companies sent to people who really shouldn’t be greeted with “Yo.” :)

Here’s a little summary of other similar bugs. I verified some of them:

  • “Oh, that explains why I accidentally triggered Claude with Alt+Space, despite it being configured as Ctrl+Alt+Space.” Link
  • “Noticed similar issues with official Australian VISA / immigration pages. You can’t simply fill some forms with your email address using Finnish keyboard. Why? Because they block usage of AltGr button on their page. They also prevent using clipboard blocking copy paste option for that sign. User has to be smart enough to switch to US keyboard and then enter @ sign and then switch back. So this is nothing new, but it’s absolutely rude from part of the site designers to vandalize basic functionality like that. Normally @ is produced by AltGr+2.” Link
  • “In a similar fashion, you cannot type the capital letter Ł in Notion. You type the letter with ⇧⌥L on the Polish keyboard on a Mac. Notion uses the ⇧⌥L keyboard combo for its own purposes.” Link
  • “Medium learnt its lesson in 2015. Google still hasn’t and you cannot type Ś in Sheets, at least not on MacOS.” Link
  • “Meanwhile, in 2026 I suddenly cannot type capital Ś in Edge on Mac. I feel like I moved back in time 25 years or so.” Link
  • “I wonder if it is a similar reason why currently on MS Teams I can’t type the letter ń.” Link
  • “It’s just like the new Copilot 365. Every time I try to type Ć, Copilot pops up. I have to close the app constantly.” Link
  • “I had a similar issue when ASUS’s bloatware background service decided to bind something to both Alt+S and Alt+A globally. I have to keep it disabled or else I won’t be able to type ą, Ą, ś and Ś without using Caps Lock to work around the issue.” Link
  • “In an Nvidia overlay there is a shortcut Alt+Z. It’s pretty annoying because it triggers on both left and right Alt, so polish users cannot type letter ż without opening the overlay or rebinding it. Nvidia pls fix.” Link
  • “The very same bug used to be present in early Windows mobile GPU drivers - with global hotkeys making it impossible to enter Ł (with Intel GMA 950) and Ć (with ATI Catalyst). Being a Polish geek, I used to earn lots of free dinners from frustrated friends who were forced to copy-paste those letters on their brand new laptops. Funny how the same bug recurs in different types of software due to an obscure locale-dependent edge case - and it’s much less known than, for example, the Turkish dotted/​dotless I.” Link
  • “Installing KeePass used to silently disable ”ą” key (AltGr+A hotkey). KeePass broke system of every Polish user immediately after being installed.” Link

I’m sharing this for awareness. I believe many other languages/​writing systems also have this problem; the examples are lopsided toward Polish only because my original example was about Polish.

Lastly, I found this an interesting anecdote:

In Portugal we had a similar workaround in the early days of computers not supporting our alphabet properly. Like in Polish there are plenty of words that without diacritics get another completely unrelated meaning, e.g. caça vs caca, which you didn’t want the interpretation to be left to the receiver.

So tricks got invented, like adding additional letters for the missing diacritics, é becomes eh, è becomes he or eh as in the former case, the example above would be cac,a and so on. However it was still quite flexible, not everyone uses the same extension set.

I wouldn’t be surprised if every single language outside of English developed some sort of a way to cope and adjust to limitations of originally American-oriented computers. In my book, I wrote about Japanese and Turkish, and there is another book – The Chinese Typewriter – that spends a lot of time talking about this very issue for China.

If this subject is particularly interesting to you, venture out into the Hacker News waters to see more commentary: 2015, 2021, 2024, 2026.

¿Por qué no los dos? pt. 1

I praised ⌘⇥ recently in my essay for cleverly not showing itself when you press the keys really fast.

Here’s another nice detail. If you press and hold ⌘⇥, you will eventually stop at the end. (You can then press ⌘⇧⇥ or ⌘` to go in the other direction.)

However, if you are already at the end, pressing ⌘⇥ again wraps around to the beginning:

The issue of whether to wrap around or not is more universal; you can see it in many lists, ⌘F, and so on. On one hand, it’s nice to have a solid deterministic stopping end that you can rely on, especially since sometimes the last item on the list is special (“See more items…”). On the other hand, going all the way back from the end can be frustrating, too, especially on a Mac that does really strange things with Home/End/​PgUp/PgDn keys.

I thought the hybrid approach that ⌘⇥ is doing here was clever, and might be applicable elsewhere.

“Felt a bit like sorcery.”

For decades now, Raymond Chen has been posting to his blog The Old New Thing about various technical Microsoft quirks, occasionally venturing into Unsung territory. Last week, Chen shared a nice remembrance of Tony Krueger, a person responsible for implementing the red squiggly underlines in Word:

Tony worked on Word 1.0, 1.1, 2.0, then on Word for OS/2 and Word for Mac, then returned to Word 6.0 and several versions beyond that. He probably holds the record for “most versions of Word shipped.” […]

Tony made the spell checker much more unobtrusive so that it didn’t interfere with your foreground work. And when it found a problem, instead of waiting for you to trigger a spell check, it immediately drew red squiggles under potentially-misspelled words (and later green squiggles under potential grammatical errors). […]

Today, there are red (and even green and blue) squiggles in nearly every word processor, and often outside word processors. Tony did it first. The next time a red squiggle catches one of your mistakes, say thanks to Tony. I think he’d appreciate it.

Read on for some fun celebrity encounters, and even a touching comment from Krueger’s father. Another person adds that a “PM named Diana” and another Microsoft employee, Jim Walsh, might have been the people who designed the feature.

Chen doesn’t name it specifically, but it’s my understanding that the red underlines were named Spell It (meh), and appeared in Office 95 in 1995. Steven Sinofsky confirms it on his blog, adding “The red squiggles were simply reflective of a proofreader’s style of mark (also one of the early uses of color in the interface).”

As far as I can tell by looking at various screenshots and photos of boxes, the feature wasn’t advertised at all. It was only mentioned more explicitly a few years later in Office 97:

“Icons that are iconic”

Apple might have undone the macOS Tahoe menu icons decision, but this wasn’t the only contentious iconography issue in their ecosystem.

On his blog, Jim Nielsen writes how Apple filed away so much expression by forcing rigid icon bureaucracy in macOS. Nielsen focuses mostly on distinctiveness; previously, you could make the icon unique by its general shape or the shape of its contents, but one of these two levers has now been taken away:

This over-emphasis on “systems” design seems endemic to modern software. Systems prescribe rules because they are the easiest attributes to document, enforce, and automate — “All icons must use this shape, this lighting, this stroke.” Excellence, by contrast, is harder to systematize. It requires judgment, taste, care, experience, and a sensitivity to context — all in service of meaning and purpose, not superficial similarity.

However, one also can’t help but notice how ugly and amateurish the Creator Studio icons are, so it all feels absolutely like a net negative – the new system took something away and the proposed replacement feels low quality:

Elsewhere, on Rogue Amoeba’s blog, Paul Kafasis straight up asks Apple to undo the 2025 decision to contain macOS icons inside squircles:

Apple’s prohibition on shapes is a step backward for both usability and creativity in app icons. Icons are now harder to distinguish because they’re no longer allowed to be distinctive. But there’s no technical reason for it. Apple could, and should, once again allow icons to take on a wide variety of shapes.

Both these prompted me to think a bit of Apple’s app iconography as a system.

Let’s start with iOS:

  • I believe the rigid squircle shape of app icons starting with the first iPhone was to make them look like a grid of buttons, and also to establish apps as a new primitive, particularly with the subsequent arrival of the App Store. (Similarly how over time “a face in a circle” became recognizable as a “personal avatar,” a user proxy primitive.)
  • Soon, the rigid shape also helped when custom Springboard wallpapers arrived in 2010 – it reduced the likelihood of apps blending with the background.
  • Recently, a new option has been added to remove names of apps, which is another way to disambiguate them.
  • Also recently, Apple’s generally unpleasant-looking theming options (color tinting and glassification) reduced color coding as a way to recognize a particular icon.

At the same time, iOS is still highly spatial. Most apps have a specific physical place on a specific page of the Springboard, or inside a specific folder. I believe that this helps a lot even if shape coding, color coding, and name disambiguation are failing or turned off to begin with.

Now, for MacOS:

  • The original Mac OS X followed in the footsteps of the classic Mac OS and allowed arbitrary shapes, allowing for more flexible shape coding, although with some guidance on angles and styling:
  • However, more recently, the iOS squircle shape has been first strongly suggested (in 2020) and then rigidly enforced (in 2025) for macOS as well.

But then, the usage of app icons in macOS is different than in iOS.

First of all, macOS isn’t nearly as spatial as it used to be, and I would say not as spatial as iOS. Even Dock is more malleable compared to the memory palace rigidity of the Springboard, and its overflow section with suggestions and hand-off is very fluid. ⌘Tab is completely non-spatial and just like the Dock doesn’t upfront identify apps by their names. App icons also appear in more fluid contexts like Spotlight, Finder, and the right side of the menubar (I know iOS has some of those as well, but I would imagine they’re getting much less use overall). This all increases the pressure on icons to be easily distinguishable.

At the same time, there are fewer issues with custom backgrounds on macOS. Most icon surfaces have opaque backgrounds and while you can keep your apps on the desktop or put backgrounds in Finder windows, I don’t think that’s very common.

I’m probably missing some other aspects, but this would be my summary of where we’re at:

  • Apple has not done a good job shepherding their app iconography system. The system feels too rigid, and some of its ostensible benefits (dark mode, color tinting, glassification) have been executed poorly. You could imagine a better tinting system that doesn’t feel like a cheap CSS filter applied to the icon, or (my dream!) a way to tint individual app icons. I personally love when apps – here Raindrop, Bear, and Retro – give you a lot of icon options in various colors, so I can invest in color coding:
  • People’s trust in Apple’s skillset has deteriorated after the unveiling of horrendous icon redesigns in 2025’s Tahoe, and more recently in the abovementioned Creator Studio (the 2026 updates are nice, but very minor). This is in some contrast with other controversial visually-motivated changes appearing at the same time. Say what you want about Liquid Glass, but there are moments it looks absolutely gorgeous (see the video below for perhaps my favourite Liquid Glass surface). Forced menu icons felt similar: embarrassingly naïve as a system, but with icons themselves executed well (which you can still appreciate when perusing SF Symbols). But the app icon changes seem to have been assigned to the team that delivered on neither good visual craft, nor good systems thinking.
  • I think it’s fair to look at Creator Studio specifically, and fear Apple is following in Microsoft’s and especially Adobe’s unforgivable footsteps in prioritizing abstract corporate identity goals over both functional and visual aspects of app iconography. Adobe’s product icons used to be beautiful and distinct before they got all shoved into the same “uppercase + lowercase letter” framework that became a canonical example of a system that took something away from the user but didn’t really give anything in return:
  • I also feel this feeds right into another fear of Apple’s actions steamrolling over particularly indie app developers where being able to express one’s identity via the app icon feels much more important than it would be for a huge company.
  • I don’t see Apple abandoning their stance on the rigid, distinctive app icon squircle shape. It’s possible that iOS apps will start appearing on touchscreen Macs outside of screen mirroring. Even without that, it just simplifies things for them, even if the jobs for macOS app icons are not the same as those for iOS app icons.
  • At the same time, I could see Apple allowing the app icons to stick out of the basic squircle shape, like some macOS apps did in between 2020 and 2025; I believe it would even be possible to detect programmatically if the basic squircle shape is still there in the background. This would improve shape coding, and give icon designers some clearly much-desired flexibility. The icons below still register as squircles to me – why not allow this as an option? (For both macOS and iOS.)
  • I wish Apple standardized app icon changing UI on iOS. Right now, each app offers their own interface in a different place – you could see that above – and rarely links to that place from the Springboard’s long-press menu. But imagine if you could nicely change app icons in situ in the same flow when you’re customizing the Springboard itself! (And then, the same for Dock and macOS.)
  • I think it would also be a nice gesture to allow to rename iOS Springboard apps to whatever you want the same way you can rename folders, to give some users an opportunity to disambiguate by that if everything else fails.

The curious case of the disappearing Polish S

Speaking of remastering (and diacritics), I grabbed my older Medium deep dive called The curious case of the disappearing Polish S, and put it on the new site.

It looks so much better than on Medium and while I was at it, I’ve redone all the visuals, and updated it a little bit.)

It’s still probably one of my favourite bugs to encounter. I hope you enjoy!

Noise as information and information as noise

In 1982, the videogame Yars’ Revenge for the Atari 2600 needed to show a “neutral zone” in the middle of the screen. The console was so primitive – an entire great book was written about this – that it didn’t have any video memory. Any cheap effect would do, even random noise… but something as simple as generating noise was also too much for the underpowered system. So the creator of the game decided to do something that in any other situation would mean at the very least trouble, if not a downright security disaster. He crossed the wires and output on screen… the game’s own source code:

The source code looked noisy enough, and the problem was solved. (Somewhat recently, Retro Game Mechanics Explained analyzed it carefully in this YouTube video, to make sure it’s not just a myth.)

A similar approach was used in a Nintendo GameCube game Metroid Prime, at a moment when the protagonist’s visor needed to appear disrupted. It was two decades later, but the team still bounced off of hardware limitations, this time around memory:

The GameCube only has 24MB of RAM, so every texture has to be carefully considered. If we used a low resolution texture (64x64) to save memory the “static” would be blurry and not crisp. One engineer on the team came up with a great idea: what if we just use the memory holding the Metroid Prime code itself! We quickly tried it out and it looked amazing. When you see Samus’s visor affected by electrical “noise” in game, you’re actually seeing the bits and bytes of the Metroid Prime software code itself being rendered on the screen. Turns out machine code is sufficiently random to work great as a static noise texture!

This is how it looked:

A few years later, in 2008, people working on Xbox 360 were testing a new interface for their entire console. It was called NXE – New Xbox Experience – and in the bottom-right corner it showed delightful ripples:

…or, not just delightful. While NXE was tested internally, the ripples actually encoded the serial number of the console, to prevent leaks. Apparently, it was built specifically so that Microsoft only needed just two images to find out the entire serial number.

A less surreptitious version of this idea exists today – for example, setting up a new Apple Watch shows a pretty pattern…

…that also happens to encode enough information to identify the specific one watch. It really appears to be nothing more than an obfuscated QR Code, and “boy, have they patented it.”

I know concealing a message inside another message is called steganography. I don’t think all of these fall under that umbrella, and I don’t even know all the above can be called “hacks.” I just thought they were interesting examples of information masquerading as noise, and noise pretending to be information.

Frozen in time

A few readers wrote in response to me sharing Panic’s blog to say that they witnessed online publications doing the same.

Here’s a 1993 essay by William Langewiesche from The Atlantic Online (sic!) that’s still on the web – which, by the way, you should read because it’s really great writing – juxtaposed with a screenshot of a 2026 Atlantic essay on the same machine:

Likewise, here is a BBC News article from 1997, and another one just from today:

I do see those as something different, though. The old articles here are basically preserved as they were, which you can tell by the tiny images, pixel fonts, narrow widths, and so on. They’re likely the output of contemporaneous CMS frozen in time, functionally equivalent to a “Save As…” command.

This is better than those articles disappearing altogether, and better still than them being carelessly converted in bulk to a more modern CMS, resulting in formatting mistakes, broken images, and missing context. But what I appreciated about Panic’s approach is that it felt unified with the rest of the blog. In a way, it was less like preservation “as is” and more like “remastering” – ask any Star Wars fan about the difference – with slight updates to fonts, more thorough integration, and thinking about readability on smartphones that didn’t exist in the 1990s.

Of course, compounding the difficulty of online preservation, “as is” in the computer realm doesn’t really exist; even The Atlantic Online’s 33-year-old HTML is served using modern fonts via crisp and tiny pixels 1993 would die for – but even if it’s increasingly more and more possible, you also probably wouldn’t want to emulate an old, flickering CRT and Internet Explorer 3 to read it. On the web, just like elsewhere in computing, you truly can’t go home again.

Thanks to Phil Gyford for a few examples.

I was wrong about Duff’s device

Duff’s device is a C language technique that looks like this:

send(to, from, count) {
register n = (count + 7) / 8;
switch (count % 8) {
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while (--n > 0);
}
}

It achieves two things:

  • It unrolls the loop in chunks of eight. Unrolling the loop is when instead of telling the computer “do X 5 times,” you say “do X do X do X do X do X,” trading some code readability and memory usage for higher speed.
  • It cleverly (ab)uses a property of the C language to unroll the remainder of the loop, which normally would be impossible to do as the remainder is less than 8 and different every time. It does so by basically overlapping a do/while loop atop a switch/case structure in a way that should come with a coding equivalent of a parental warning.

I always assumed the technique is from the 1970s and was just a show-offy thing that didn’t serve any function, a “look how clever I am” from a programmer who was perhaps just a touch too nerdy. But yesterday, I found a 1988 message from the said programmer, Tom Duff, and it turns out I got almost everything wrong.

First of all, the technique was from 1983, when Duff was at Lucasfilm – much later than I expected.

Second of all, it actually solved a problem. Duff’s device wasn’t just making things faster abstractly, but actually fixed a user-visible performance issue. “[The loop before applying the device] was the bottleneck in a real-time animation playback program which ran too slowly by about 50%,” writes Duff.

Most importantly, however, Duff himself had mixed feelings about it:

Disgusting, no? But it compiles and runs just fine. I feel a combination of pride and revulsion at this discovery.

I recognize this set of feelings from many different software hacks I invented in my life. I think it’s important to carry them all with you – not fall in love with the hack and continue seeing it for what it is (and what it will be in the future as code ages), but at the same time not be above using it if it’s solving a real issue.

Also, Duff adds:

Many people […] have said that the worst feature of C is that switches don’t break automatically before each case label. This code forms some sort of argument in that debate, but I’m not sure whether it’s for or against.

I can’t speak for C, but I have always felt frustrated about JavaScript stealing that convention – it’s so error-prone, and in my many years programming in it, I have never had to use a Duff’s device or anything else that benefitted from it.

“If you can’t stand by a feature, you shouldn’t launch it.”

On the most recent episode of The Talk Show podcast, this monologue from Jason Snell made me nod my head (the passage starts at 1:35:47):

[… Apple] decides to do a big feature. The circus comes to town, they build the feature, they launch it, they leave town, and that feature sits there.

And the problem is, there’s bugs, things are broken, and in Year Two, you’re like, “You’re going to fix all the things that were broken in the thing you shipped last year, right?” And in the last decade, I would say, a lot of times what happens is they just don’t. And if you’re lucky, they’ll fix it Year Three or Year Four, […] give it a polish.

The thing that troubles me most about Apple software quality in general is the feeling like they don’t have the people to own the thing that they launch. They build the thing that they launch, and then those people go off and do something else, and nobody is maintaining and improving the thing that’s there.

And whether it’s Time Machine, things that are often really system critical but that are super quirky, then they will do a brush up and you’ll be like “yay,” but… there’s still this bug, and then it’s “good luck, wait three more years.”

Or I think the one that we’re all thinking of this year is Screen Time, which they have a big revamp of. […] On one level, it’s great, but on another level, if you’ve talked to anybody who’s tried to use Screen Time, it’s broken. And so what they’re really doing here is trying to fix it, and we’ll see how they do. […]

The new features with problems is not a crime. It happens. The crime is: they never fix the problems.

And that’s the part that I would like to see Apple get better at: if you’re going to launch something, you got to maintain it. Sometimes I feel like Apple is willing to spend the money and time and effort to launch something, but then they’re not really willing to do anything other than walk away.

And I think that’s irresponsible. If you can’t stand by that feature, you shouldn’t launch it.

I think this is spot on, and said really well. Are you honest with yourself about resourcing and focus for right after the launch and then later on? Have you really thought about worst case and best case scenarios vis-à-vis bug reports, latency, user feedback, and craft/​quality however you define it? Have you actually started to make room for those outcomes ahead of time?

For me, an ongoing tension with Apple is Finder, so central to my (and I imagine many people’s?) use of a Mac, but rewritten at some point eons ago in a new framework that caused all sorts of problems, and then pretty much abandoned like a proverbial American city’s downtown. (I gave up listing stuff on this blog because it didn’t feel like fun, but I also see 100% of what Ilya Birman sees in his “Finder” section, many times every day.)

It’s not a story unique to Apple – I’ve seen many a designer and engineer quitting their jobs when an empty promise of a “fast follow” never materialized – but you’d expect them to do better here.

“It’s like a Freudian slip simulator.”

For a while, the digital artist James Dalzell Hodge kept a video diary of various design decisions while making his next game. This 13-minute video is interesting because it harks back to my mention of diegetic interfaces just a few days ago:

It’s a nice quick dive into the subject – a rare coverage of what “diegetic” means outside of the realm of movies.

I like these videos because Hodge focuses on details and shows working through things, including approaches rejected along the way. Inside, there are even occasional peeks at interfaces from Unreal Engine tools and Blender, not to mention examples from other games.