MoreRSS

site iconJim NielsenModify

Designer. Engineer. Writer.20+ years at the intersection of design & code on the web.
Please copy the RSS to your reader, or quickly subscribe to:

Inoreader Feedly Follow Feedbin Local Reader

Rss preview of Blog of Jim Nielsen

“Getting off the Modernization Treadmill”

2026-10-09 03:00:00

My notes from this talk by Alexander Petros at Big Sky DevCon 2026.

Alex starts by noting how “modernize” used to mean something along the lines of “update this thing that was made before I was born”. But now “modernize” means something more like “update this thing from 5-10 years ago” (hence the framing of the talk, the “modernization treadmill”).

Using a real-world example of an incredibly slow website that was required to access state-sponsored programs for welfare, Alex points out the disparity in conditions between those of us who make software and those who have to use them:

The people who develop these websites are usually doing so on high-powered internet connections and high-powered devices, but they're not using them in the conditions that the people who most need those benefits are going to be.

Then he shows a Reddit thread where somebody essentially posted, “I’m having problems with this website. I’ve been waiting for months for my application to go through. Any suggestions?” And one Reddit user responded, “The best thing you can do is go into the physical office, get a case worker, and your problems will be solved within the hour.”

The irony.

I guess we've come full circle now. It used to be:

“Don’t talk to anybody. It’s faster and more convenient to use the website!”

But now it’s:

“Don’t use the website. It’s faster and more convenient to talk to somebody!”

Have we failed at making websites?

And is our failure, at least in part, rooted in the fact that we don’t leverage the basic tools for making websites: HTML, CSS, and (in a distant third) JavaScript?

Alex goes on to argue that the technologies of the web have an ideological bent and, if used as designed, can solve so many of the performance, accessibility, and usability issues that plague so many websites.

The grain of the web’s technologies are rooted in these values:

  • User-friendly
  • Backwards- and forwards-compatibility
  • Long-term viability
  • Universal accessibility

Which means if you use them as intended, they are optimized to deliver outcomes rooted in those same values.

So if you like those values and you want those outcomes, use the platform.

Take HTML, for example. Here’s Alex:

HTML does [performance improvements] for you for free. If you've coded your website in a proper, semantical, structure HTML style, it will just get better over time at zero cost to the people who built that website

HTML is your friend. HTML won’t give you up or let you down. HTML will make it difficult for you to make a bad website.

Write it in to the requirements of the project you’re doing that it work without JavaScript. Not necessarily that it doesn’t have any JavaScript, but just that the core functionality of the website can happen without JavaScript. If you do this […] you will find that it’s very hard to deliver a bad web page because the structure that HTML requires is one that fundamentally is good for the user, performant, and cost effective.

Technologies are imbued with culture, which influences what you do and how you do it. If you can align your ideological beliefs with your technological choices, you might end up with an outcome that aligns with your values — who would’ve thought, eh?

A lot of modern software developers come from websites like Facebook, they come from big tech companies [who] fundamentally have a different set of priorities. Their job is to keep you on the website as long as possible so that you consume more ads. But that’s the opposite set of requirements and priorities that the government needs to be doing, which is to build something that is clean, quick, efficient, and gets you in and out as fast as possible. So [I tell people] that the technology they use comes from [an] ideological place. But there are different ideological places that produce different technological results and if we start from those through lines then we can produce services that help people who need them.

The ideological principles of the web are well established: users over everything else.

If you use HTML as much as possible, you’ll make something that’s as user-friendly as possible on the web.


Reply via: Email · Mastodon · Bluesky

Apple’s App Icon HOA

2026-10-07 03:00:00

Louie Mantia has a great post about how app icons are converging towards the squircle on iOS and macOS.

His post reads like a history. If you’re wondering, “How did we get to a place where all app icons are becoming squircles?” Mantia’s post answers that question by starting at the beginning.

Eight app icons in two rows: a pink monitor with a tool, a teal clock with a reverse arrow, a yellow diamond, and a blue magnifying glass with a pencil, each shown as a circle and a rounded square.

It’s hard to walk away from Mantia’s article without a sense of empathy for Apple’s position, like “Oh ok, I get why they’re doing what they’re doing. It makes sense.”

Apple’s direction is kind of a tacit acknowledgement to how most people are shipping app icons. Apple is “paving the cowpaths” as it were, because most app icons are just brand logos.

Nowadays, it’s these bland, big-business logo icons that make up a good chunk of iOS Home Screens and macOS Docks, instead of the beautiful, illustrative app icons that used to dominate our devices.

So many app icons are just logos in a squircle, so Apple made tools like the Icon Composer and glass effects to help make that approach look good by default.

Apple is helping most people most of the time make app icons that don’t suck.

[Apple is making] it easier for all apps to fit in on the platform, especially apps built by designers and developers who aren’t familiar with how to make an icon that looks great next to first-party icons.

The net effect is:

some of the platform’s best icons look worse, while some of the platform’s worst icons look better.

In other words, this new approach raises the floor but it also lowers the ceiling.

The thought that came to mind as I read Mantia’s post was, “This reminds me of HOAs.”

I grew up in a neighborhood where anyone could do anything with their homes and yards, so you had this eclectic mix throughout the neighborhood — everything from “Wow, that house is so unique!” to “That thing is a dump.”

Somewhere along the way HOAs became more prevalent (in my neck of the woods), where all the houses in a neighborhood have to meet a certain standard — and so they all start to look the same.

It keeps the dumpy things out, yet nobody stands out.

That’s kinda what macOS feels like right now with regard to app icons.

Four app icons floating over a suburban neighborhood.

For better or worse, squircle app icons are Apple’s HOA and we’re all just living in it.


Reply via: Email · Mastodon · Bluesky

“I’m Embarrassed on Behalf of the Tech Industry”

2026-10-05 03:00:00

That’s something Ben Thompson said a recent episode of Dithering. He was referring to how he felt while trying to help his mom get control of her digital life. Everything was just too hard and convoluted and he felt embarrassed as someone who works in tech.

That very same evening, I randomly got this text from a family member.

Text message reading: “Dude. I hate the modern web. I hate. Website. S. Using websites. Trying to do things quickly and efficiently. What a buggy mess.”

I hear this a lot from family and friends who sit outside tech.

“Nothing works.”

“Everything is hard to use.”

“I can’t make sense of this.”

And to them I am a representative, a connection, to this pain in their lives.

And I, too, am embarrassed on behalf of the tech industry — by our collective failure.


Reply via: Email · Mastodon · Bluesky

Related posts linking here: (2026) “Getting off the Modernization Treadmill”

Dear Software Makers

2026-10-01 03:00:00

Marques Brownlee just released a video essay titled “Dear YouTube”.

I loved it.

He talks about how YouTube is going to start shipping this new feature where makers can essentially publish different “variants” of their videos and see which performs best (an A/B test).

Which immediately begs a lot of questions. Brownlee voices his:

  • If I’m watching a video, do I know if it’s part of one of these A/B tests?
  • If I’m reading the comments of a video, how do I know I saw the same thing as another commenter?
  • How do linked timestamps work?

It’s pretty wild when you think about it. I mean, imagine sending someone a link, “Check out this cool video!” And at that point you’re basically crossing your fingers, “I hope they see the same thing I did…”

Marques says he spoke to some YouTube engineers about these questions and they didn’t really have answers. They were kind of just like, “We don’t know — yolo! This’ll ship soon.”

So his video is a kind of plea to YouTube creators everywhere: Don’t use this feature!

There’s this sort of unspoken rule of community on YouTube, that like we’re all having this same experience together — we’re all watching the same video. That is what makes it a cultural phenomenon is that we all saw the same thing […] so letting people put up two or three different videos of the same thing at the same time kind of fundamentally breaks that, which doesn't feel right.

I agree, 100%.

Brownlee goes on to make a lot of great points in the video that, I think, can be applicable to making software as well. A few that stood out:

  • The skill of being a “creator” is not about maximizing views, retention, etc. It’s about finding creative ways to share stories, teach concepts, explore ideas, etc. Views, retention, etc. are all downstream of that.
  • Making (and finishing) something over and over and over is a better use of your time than making one thing and then trying all kinds of variants and obsessing over their varied performance.
  • When you focus on optimizing, you end up trimming out all the creative (and fun) stuff because those things won’t, by definition, ladder up to metrics of efficiency. (Moby Dick was not the most efficient way to tell that story.)
  • Stand by your creative choices. Learn from your wins and failures, then make the next thing. Have some conviction.

I find it interesting how Brownlee shares his opinion that YouTube spends way too much time chasing their competitors and not enough time being YouTube.

Which, when you think about it, is exactly the kind of place a feature like this would stem from: an insecurity in your own creative choices. How YouTube approaches its own insecurities is now trickling down as a feature to its users.

“Let’s let people make lots of variations on things, try all of them, and see what performs best” is exactly the kind of thinking you get in a platform that doesn’t know what it wants to be. So it’s left spending its time 1) doing what others are doing, and 2) following the fickle whims of whatever it can measure.

It’s like this adolescent attitude of, “I don’t know what I want to be, so I’m gonna imitate my peers and let others tell me what they think I should be.”

Anyway, that’s a long way of saying I liked the video. You might too. Hopefully you see the same thing I did, lol.


Reply via: Email · Mastodon · Bluesky

VLM Enhanced Metadata For My Icon Galleries

2026-09-30 03:00:00

Confession: I got nerd-sniped by Sam Henri Gold’s request for my icon galleries:

I'd like to humbly request artwork-level searching in macosicongallery.com

What follows is a train-of-thought blog post as I play with what an implementation might look like.


I’ve actually long-wanted something like this, e.g. let me search for “coffee” and show me all icons that have some depiction of coffee in them.

Similarly, I’ve wanted some kind of “related” representation for icons. I have this today via existing metadata, e.g. “Show me other icons in the category ‘Productivity’” or “Show me other icons tagged as ‘orange’”. But I’ve wanted a more robust representation of this, so if you were looking at an icon that had a microphone in it, the site would say “Here are other icons that also have microphones in them.” And the relationship would be rich/smart enough to know that “microphone” was meant broadly, i.e. dynamic mics, condenser mics, ribbon mics, etc.

So how would you do this? I could go through every icon one-by-one and classify/tag any attribute of its design that comes to mind, but that would take ages! Seems like a good use case for a vision model.

Trying CLIP

First, I’ll look at Sam’s suggestion: run every image through CLIP.

I’m not familiar with CLIP so I start with a little research: What is it? How would I use it? And most importantly: is it free/open (because I ain’t spending a ton of money to send my thousands of icon PNGs to an AI provider via their API)?

Ok, so CLIP will take an image and spit back an embedding (basically a bunch of numbers representing features of the image). When you do it with multiple images, you can then compare those embeddings to see what the model considers similar (and, if you like, set a threshold for what constitutes a “match”).

After getting a sense of the task in front of me, I work with the LLM to come up with a proof of concept. I don’t need to fit this into my existing site. I just want to make one-off HTML pages where I can feel out, “Can this process create anything useful? What’s the amount of work required?”

  • Write a script that runs a sampling of icons through CLIP’s image encoder
    • Read the file locally, e.g. ./ios/256/${icon.id}.png
    • 256x256 pixel icons seem to be enough, as the CLIP model I’m using preprocesses them to ~224px anyway.
  • Create a dataset representing the “embeddings” (an array of numbers) for each icon that I get from CLIP, e.g. Array<{ id: String, embedding: Array<number> }>
  • Create a dataset representing the top matches between different embeddings, e.g. { [id: String]: [id, id, …] }
  • Create a clip.html file has both datasets (plus supplementary icon metadata I already have), render all the sampled icons, and support an onclick for each icon that shows the related[id] icons.

This is enough to create a single HTML file where I can click on an icon and see other icons that look like it.

However, I realize quickly that I’ll need to process my entire icon library to really get a good sense for how well these are matching. So I do that.

[Computer goes brrrr…]

Ok, now when I click on an icon that looks like a camera, I see other icons that look like cameras.

Linx Camera Effects app icon with a grid of visually similar camera app icons and their similarity scores

Or if I click on an icon that has a checkmark in it, I see other icons with checkmarks in them — sort-of.

Things app icon with a grid of visually similar checkmark and task app icons and their similarity scores

But the results aren’t that great unless an icon is visually distinctive. I share some thoughts with Sam. He has a few other suggestions I follow.

DINOv2, SigLIP2, and More

Sam mentions SigLIP2 so I start with that as a keyword. The LLM recommends DINOv2 so I say, “Let’s try it”.

I give that a try, creating a separate dataset and prototype (e.g. embeddings-dinov2.json and embeddings-dinov2.html) so I can continue to view these different prototypes and compare their outputs.

It’s fine. Different from CLIP. Honestly not much better.

So I figure let’s try another one. I go with SigLIP2. I ask the LLM to create a page where I can compare the results.

Animated comparison of visually similar app icon results using CLIP and SigLIP 2

Seems like six of one, half dozen of another. One does better on some kinds of icons, worse on others. The LLM recommends that, at this point, I be done shopping models. They’re roughly the same class of tool with different tradeoffs. None are breakthroughs.

So now what?

Try Tagging Icons With Keywords

Sam recommends another approach:

You could also try handing all icons over to a VLM, having it write up a description, and embedding THAT text against what people might search for.

A thoroughly detailed person might’ve done this from the start, e.g. for an icon that’s a checkmark, add the keyword “checkmark” to its metadata.

That would take me forever to go back through all my icons and do — a perfect task for a computer that never tires.

So I give this a try. First I need a free/open VLM. After a little research I decide to try Moondream via Ollama.

I have the machine go through each image and caption it, then pull out “tags” from the caption. For the Clear app icon, I get data like this:

{
  "id": "clear-todos-2021-01-10",
  "caption": "The image features a red and orange gradient background, with a white checkmark in the center. The checkmark is slightly tilted to the right, giving it a dynamic appearance. The background transitions from red at the top to orange at the bottom, creating a sense of depth and movement. The checkmark is the main object in the image, occupying most of the space and drawing attention to itself.",
  "tags": [
    "red",
    "orange",
    "gradient",
    "white",
    "checkmark",
    "slightly",
    "tilted",
    "dynamic",
    "appearance",
    "transitions",
    "creating",
    "sense",
    "depth",
    "movement",
    "object",
    "occupying"
  ]
}

Then the LLM creates a single search.html file where I can test icon matches by searching for tag overlaps (or choosing one of the popular ones).

So, for example, on the search page I can click on “checkmark” and see all the icons with a checkmark.

Search results for app icons tagged with “checkmark,” showing a grid of matching icons

Or click on “fox” and see all the icons with a fox.

Search results for app icons tagged with “fox,” showing a grid of matching icons

Matches are pretty spot to be honest.

But that’s a different kind of test than what I was doing with CLIP.

  • CLIP: click on an icon and see other icons like it.
  • Tags: click on a keyword and see other icons with that keyword.

Can I leverage tags for the same kind of “related icons” work that CLIP is doing?

CLIP vs. Tags

I get the LLM to cook up a single-page HTML file where I can compare “click on this icon and find other icons like it” where I’m using embeddings from CLIP vs. matching on keywords.

The results seem to fare much better for CLIP. For example, here I matched on what I think of as a “checkmark icon”.

Comparison of CLIP- and tag-based related app icons for Things 3. CLIP returns visually similar checkmark icons, while tag matching returns a more varied set of icons sharing similar descriptive tags.

You can see the approach that matches on tags didn’t work too great. I believe this is because with my simple tag-overlap approach, a distinctive keyword like “checkmark” gets diluted amongst generic tags like “square”, “blue”, and “simple”.

Whereas with CLIP, if you click on an icon with a checkmark, you get other checkmarks (and not other icons that also have related tags like “square”, “blue” and “simple”).

Which all makes sense. Pushing on the implementation here could help, but that’s separate work to do.

So Now What?

I’m not sure.

While doing all of this was an interesting technical exercise, there are a few important considerations I need to think through before implementing anything, such as:

  • What kind of functionality do I actually want?
    • A “related icons” feature? Does it match on keywords or embeddings?
    • A “search” feature that matches on keywords?
    • Both?
  • How do I build these features into my codebase now, given the thousands of icons that already exist?
  • How do I maintain this feature in the future?
    • e.g. every time I add a new icon to my gallery, is a VLM now a dependency of this project?
  • Given all the above, what’s the time and money cost?

I’m very picky about adding new dependencies to these icon projects. I like to think that’s why I’ve been able to maintain and continue contributing to them after so many years — because I make it easy on myself (good job, Past Jim).

So, for example, if I make a VLM a dependency of this project such that every time I add a new icon I have to run it through to create the embeddings, that’s a big dependency cost IMO. I’m not sure I want to do that.

That said, Apple now ships foundation models in macOS 27 available through the CLI (go ahead, try typing fm in your Terminal if you’re on Golden Gate). So if my Mac continues to be the primary machine where I add/update metadata for my icon projects, using fm would be a really easy/low-cost way to process each new icon to generate a caption and keywords for matching in search.

But again, I don’t know if I want to do that. I wrote this post to try and work through what I want to do, but I am still undecided.

So I guess the only thing for me to do at this point is hit “Publish” on this post and keep simmering on a decision.


Reply via: Email · Mastodon · Bluesky

Humane Interfaces

2026-09-28 03:00:00

So there I am reading Unsung when I come across this quote from Jef Raskin:

An interface is humane if it is responsive to human needs and considerate of human frailties.

This articulation perfectly captures why I recoil at modern “growth tactics” in user interfaces and experiences: they are designed to exploit human frailties, not be considerate of them.

Stated again: a humane interface — or a humane system, even a humane technology — is considerate of human frailties. It acknowledges they exist and works with them, rather than taking advantage of them.

Humane technology does not rely on impulse, addiction, or imposition to survive.

It survives purely on the free choice of its user.

You choose to use it because you have the freedom not to.


Reply via: Email · Mastodon · Bluesky