2026-02-07 03:00:00
Researchers at Anthropic published their findings around how AI assistance impacts the formation of coding skills:
We found that using AI assistance led to a statistically significant decrease in mastery […] Using AI sped up the task slightly, but this didn’t reach the threshold of statistical significance.
Wait, what? Let me read that again:
using AI assistance led to a statistically significant decrease in mastery
Ouch.
Honestly, the entire articles reads like those pieces you find on the internet with titles such as “Study Finds Exercise Is Good for Your Health” or “Being Kind to Others Makes People Happier”.
Here’s another headline for you: Study Finds Doing Hard Things Leads to Mastery.
Cognitive effort—and even getting painfully stuck—is likely important for fostering mastery.
We already know this. Do we really need a study for this?
So what are their recommendations? Here’s one:
Managers should think intentionally about how to deploy AI tools at scale
Lol, yeah that’s gonna happen. You know what’s gonna happen instead? What always happens when organizational pressures and incentives are aligned to deskill workers.
Oh wait, they already came to that conclusion in the article:
Given time constraints and organizational pressures, junior developers or other professionals may rely on AI to complete tasks as fast as possible at the cost of skill development
AI is like a creditor: they give you a bunch of money and don’t talk about the trade-offs, just the fact that you’ll be more “rich” after they get involved.
Or maybe a better analogy is Rumpelstilskin: the promise is gold, but beware the hidden cost might be your first-born child.
2026-02-04 03:00:00
You’ve probably heard this famous quote from Steve Jobs about saying ‘no’:
People think focus means saying yes to the thing you’ve got to focus on. But that’s not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I’m actually as proud of the things we haven’t done as the things I have done. Innovation is saying no to 1,000 things.
But wait, we have AI now. We don’t have to say no to 1,000 things. We can say yes to all the things — generate them all, simultaneously!
Do you really have to “pick carefully” when AI can materialize everything you previously would’ve been too constrained to do?
Generative technology paired with being “data-driven” means it’s easy to build every idea, ship it, measure it, and see what sticks.
Humans, money, time — these all used to be constraints which required budgets, trade-offs, and decision making.
Organizations had an incentive to say “no” when development was constrained — “We can only do so much, so let’s make sure we do the most impactful things.”
But maybe the scarcity of organizational resources was the wrong focus all along?
It’s never been a good idea to ship everything you think of. Every addition accretes complexity and comes with a cognitive cost.
Maybe we need to reframe the concept of scarcity from us, the makers of software, to them, the users of software. Their resources are what matter most:
So maybe the way you argue for saying “no” isn’t because it helps you as a business, but because it helps your customers. It helps them make sense of what you’ve made.
And yet: arguing for customer clarity has always been harder than arguing for internal efficiency or some bottom line.
In an age of abundance, restraint becomes the only scarce thing left, which means saying “no” is more valuable than ever.
I’m as proud of the things I haven’t generated as the things I have.
2026-02-02 03:00:00
So I’m making a thing and I want it to be styled different if the link’s been visited.
Rather than build something myself in JavaScript, I figure I’ll just hook into the browser’s mechanism for tracking if a link’s been visited (a sensible approach, if I do say so myself).
Why write JavaScript when a little CSS will do? So I craft this:
.entry:has(a:visited) {
opacity: .5;
filter: grayscale(1);
}
But it doesn’t work.
:has() is relatively new, and I’ve been known to muff it, so it’s probably just a syntax issue.
I start researching.
Wouldn’t you know it? We can’t have nice things. :visited doesn’t always work like you’d expect because we (not me, mind you) exploited it.
You can style visited links, but there are limits to which styles you can use.
While :has() is not mentioned specifically, other tricks like sibling selectors are:
When using a sibling selector, such as
:visited + span, the adjacent element (spanin this example) is styled as though the link were unvisited.
Why? You guessed it. Security and privacy reasons.
If it were not so, somebody could come along with a little JavaScript and uncover a user’s browsing history (imagine, for example, setting styles for visited and unvisited links, then using window.getComputedStyle and checking style computations).
MDN says browsers tell little white lies:
To preserve users' privacy, browsers lie to web applications under certain circumstances
So, from what I can tell, when I write .entry:has(a:visited) the browser is telling the engine that handles styling that all .entry items have never been :visited (even if they have been).
So where does that leave me?
Now I will abandon CSS and go use JavaScript for something only JavaScript can do.
That’s a good reason for JS.
2026-01-29 03:00:00
Nic Chan comes out as the whistleblower on how many “Contact Us” pages are made (spoiler: they’re designed to keep us from contacting anyone).
A “fuck off contact page” is what a company throws together when they actually don’t want anyone to contact them at all. They […] are trying to reduce the amount of money they spend on support by carefully hiding the real support channels […] If you solve your own problem by reading the knowledge base, then this is a win for the company. They don’t want to hear from you, they want you to fuck off.
It’s true. This is how the proverbial sausage is made. I’ve been there. I’ve seen these decisions handed down. Which means, like Chan, I know how to read between the lines of most “Contact Us” pages on the internet.
I’m not sure about you, but as a user, when I see [these kinds of pages], knowing that whatever my original query was, [I know] I’m going to have to solve it unassisted.
My process follows this arc:
A direct line to a human is the ultimate luxury in today’s world.
The project finished on time, everyone got paid, and the client was happy with the end result, but I still felt very disappointed in the whole thing.
So it goes.
There’s a scene from The Matrix that kept echoing in my head while reading Chan’s post.
There are contact pages, my friends. Endless “Contact Us” pages.
Where human beings no longer exist.
For a long time I probably wouldn’t have believed it, and then I saw the pages made with my own eyes. Watched them remove the ability for human beings to contact one another.
And standing there, facing the pure, automated precision of it all, I came to realize the obviousness of the truth.
What is the “Contact Us” page?
Cost savings.
The “Contact Us” page is a computer-generated dream world, built to keep us from contacting another human in order to save cost and turn a human being into this: a source of revenue.
2026-01-27 03:00:00
“The data doesn’t lie.”
I imagine that’s what the cigarette companies said.
“The data doesn’t lie. People want this stuff. They’re buying it in droves. We’re merely giving them what they want.”
Which sounds more like an attempt at exoneration than a reason to exist.
Demand can be engineered. “We’re giving them what they want” ignores how desire is shaped, even engineered (algorithms, dark patterns, growth hacking, etc.).
Appealing to data as the ultimate authority — especially when fueled by engineered desire — isn’t neutrality, it’s an abdication of responsibility.
Satiating human desire is not the highest aspiration.
We can do so much more than merely supply what the data says is in demand.
Stated as a principle:
Values over data.
Data tells you what people consume, not what you should make. Values, ethics, vision, those can help you with the “should”.
“What is happening?” and “What should happen?” are two completely different questions and should be dealt with as such.
The more powerful our ability to understand demand, the more important our responsibility to decide whether to respond to it. We can choose not to build something, even though the data suggests we should. We can say no to the data.
Data can tell you what people clicked on, even help you predict what people will click on, but you get to decide what you will profit from.
2026-01-23 03:00:00
The other day I was browsing YouTube — as one does — and I clicked a link in the video description to a book.
I was then subjected to a man-in-the-middle attack, where YouTube put themselves in the middle of me and the link I had clicked:

Hyperlinks are subversive. Big Tech must protect themselves and their interests.
But link hijacking isn’t why I’m writing this post.
What struck me was the ordering and visual emphasis of the “call to action” (CTA) buttons. I almost clicked “Back to YouTube”, which was precisely the action I didn’t want.
I paused and laughed to myself.
Look how the design pattern for primary/secondary user interface controls has inverted over time:
It seems like everywhere I go, software is increasingly designed against me.