A picture of me with my dog Tess next to me looking at me

Notes

Sit On Your Ass Web Development

In short: spend less time glueing together tools and frameworks on top of the browser, and more time bridging tools and APIs inside of the browser. Then get out of your own way and go sit on your ass. You might find yourself more productive than ever!


This Website is for Humans

Well, I want you to visit my website. I want you to read an article from a search result, and then discover the other things I’ve written, the other people I link to, and explore the weird themes I’ve got. I want some of you to read my article then ask me to speak at your conferences. Many folks rely on ad impressions to support the high-quality content they’re putting out for free.

I write the content on this website for people, not robots. I’m sharing my opinions and experiences so that you might identify with them and learn from them. I’m writing about things I care about because I like sharing and I like teaching. I spend hours writing these posts and AI spends seconds summarising them.


Why Semantic HTML Still Matters

HTML isn’t just how we place elements on a page. It’s a language – with a vocabulary that expresses meaning

Tags like <article>, <nav> and <section> aren't decorative. They express intent. They signal hierarchy. They tell machines what your content is, and how it relates to everything else.

I know I could be better about this, and I try to use the right tags to help with accessibility.

If everything is a <div> or a <span>, then nothing is meaningful.

This is why I'm not always a fan of frameworks.


Didn’t Take Long To Reveal The UK’s Online Safety Act Is Exactly The Privacy-Crushing Failure Everyone Warned About

Let’s start with the most obvious sign that this law is working exactly as poorly as critics warned: VPN usage in the UK has absolutely exploded. Proton VPN reported an 1,800% spike in UK sign-ups. Five of the top ten free apps on Apple’s App Store in the UK are VPNs. When your “child safety” law’s primary achievement is teaching kids how to use VPNs to circumvent it, maybe you’ve missed the mark just a tad.

Politicians missing the mark when it comes to the internet and technology? You don't say.

A law supposedly designed to protect children now requires victims of sexual assault to submit government IDs to access support communities. People struggling with addiction must undergo facial recognition scans to find help quitting drinking or smoking. The UK government has somehow concluded that access to basic health information and peer support networks poses such a grave threat to minors that it justifies creating a comprehensive surveillance infrastructure around it.

Again, these lawmakers ignore the pretty obvious negative side effects laws like this cause.

The age verification process itself is a privacy nightmare wrapped in security theater. Users are being asked to upload selfies that get run through facial recognition algorithms, or hand over copies of their government-issued IDs to third-party companies. The facial recognition systems are so poorly implemented that people are easily fooling them with screenshots from video games—literally using images from the video game Death Stranding. This isn’t just embarrassing, it reveals the fundamental security flaw at the heart of the entire system. If these verification methods can’t distinguish between a real person and a video game character, what confidence should we have in their ability to protect the sensitive biometric data they’re collecting?

Remember how bad the Equifax breach was?

Let’s be crystal clear about what this law actually accomplishes: It makes it harder for adults to access perfectly legal (and often helpful) information and services. It forces people to create detailed trails of their online activity linked to their real identities. It drives users toward less secure platforms and services. It destroys small online communities that can’t afford compliance costs. And it teaches an entire generation that bypassing government surveillance is a basic life skill.


Automated application systems add insult to injury in a tough job market

Narayanan suggested if the systems are no better than random number generators, perhaps we should explicitly use random number generators: choose candidates by lottery after they fulfill some minimum requirements.

I almost wonder if this would produce better results sometimes.


The Nuclear Club Might Soon Double

We have some muscle memory for how to manage nuclear rivalries among a few great powers, Sullivan told me. But a strategic landscape of 15 or 20 nuclear powers could be risky in ways that we cannot anticipate. The odds of a nuclear exchange occurring would rise. The most potent current warheads are more than 80 times as destructive as the bomb that leveled Hiroshima’s urban core, and they now fly on missiles that can reach their targets in mere minutes. It would take only one of them to all but erase Tokyo, Seoul, Beijing, or New York City. The total damage that even a limited exchange of these more powerful weapons would cause is mercifully unknown to us, but it may be vain to hope for a limited exchange. The most elaborate and significant war game in the literature suggests that the cycle of nuclear vengeance would continue until the arsenals of all involved parties are spent. If a nuclear conflict does someday break out, death and destruction might very quickly unfold on a planetary scale.

Having read Nuclear War: A Scenario last year, this is chilling and scary.


Fascism For First Time Founders

Real innovation happens when companies have to compete on merit, not on who can kiss the leader’s ass most effectively. In a functioning democracy with actual rule of law, the best products have the opportunity to win. In an authoritarian system, the company that makes the dictator happy wins—and that’s it.

Think that sounds far-fetched? Look at how quickly Elon Musk’s companies started getting favorable treatment once he became Trump’s Number One donor. And then look at how quickly Trump turned on Elon and threatened to pull all the subsidies his businesses get from the federal government as punishment over Elon criticizing his budget plan. That’s not competition driving innovation—that’s cronyism driving mediocrity.

This isn’t theoretical. When political favor becomes more important than product quality, innovation dies. The companies that survive aren’t the ones building the best, most innovative products—they’re the ones best at navigating the whims of whoever’s in power.


React Still Feels Insane And No One Is Talking About It

Let's start from the state. If you have a top-down tree of components, it's logical you'd want to pass the state top-down too. But in practice, with components very numerous and small, this is very messy, as you spend a lot of time and code just wiring the various pieces of data to get them where you need them.

This was solved by "sideloading" state into components using React hooks. I haven't heard anyone complain about this, but are you guys serious? You're saying that any component can use any piece of app state? And even worse, any component can emit a state change, that can then update in any other component.

How did this ever pass a code review? You are basically using a global variable, just with more elaborate state mutation rules. They're not even rules, but merely a ceremony, because nothing is really preventing you from mutating state from anywhere. People really think if you give something a smart name like a reducer it suddenly becomes Good Architecture™?


JavaScript Broke the Web (and Called it Progress)

The tragedy is, none of this is necessary. Once upon a time, we had a fast, stable, resilient web. But we replaced it with a JavaScript cargo cult.

Now it takes four engineers, three frameworks, and a CI/CD pipeline just to change a heading. It’s inordinately complex to simply publish a webpage.

This isn’t evolution. It’s self-inflicted complexity. And we’ve normalised it – because somewhere along the way, we started building websites for developers, not for users.

At the same time, JavaScript stopped being just a front-end language. With the rise of Node.js, JS moved server-side, and with it came a wave of app developers entering the web ecosystem. These weren’t web designers or content publishers. They were engineers, trained to build applications, not documents. And they brought with them an architecture-first mindset: patterns, state management, dependency injection, abstracted logic. The result? A slow cultural shift from building pages to engineering systems – even when all the user needed was to load an article.

We’re burning user attention, developer time, and business resources to simulate interactivity that nobody asked for.

JavaScript should be the icing. Not the cake. And certainly not the oven, the recipe, and the kitchen sink.


Writing Code Was Never The Bottleneck

The marginal cost of adding new software is approaching zero, especially with LLMs. But what is the price of understanding, testing, and trusting that code? Higher than ever.

LLMs reduce the time it takes to produce code, but they haven’t changed the amount of effort required to reason about behavior, identify subtle bugs, or ensure long-term maintainability. That work can be even more challenging when reviewers struggle to distinguish between generated and handwritten code or understand why a particular solution was chosen.


The Recurring Cycle of 'Developer Replacement' Hype

What actually happens isn't replacement, it's transformation. Technologies that promised to eliminate the need for technical expertise end up creating entirely new specializations, often at higher salary points than before. The NoCode movement didn't eliminate developers; it created NoCode specialists and backend integrators. The cloud didn't eliminate system administrators; it transformed them into DevOps engineers at double the salary.

It's also worth thinking about the security implications of code generated. It takes a lot to make sure key systems are secure, vulnerabilities fixed, and threat vectors analyzed and defended against. AI can't do that for you.

Here's what the "AI will replace developers" crowd fundamentally misunderstands: code is not an asset—it's a liability. Every line must be maintained, debugged, secured, and eventually replaced. The real asset is the business capability that code enables.

If AI makes writing code faster and cheaper, it's really making it easier to create liability. When you can generate liability at unprecedented speed, the ability to manage and minimize that liability strategically becomes exponentially more valuable.

And now the million dollar quote.

But there's something deeper happening with this particular transformation. Unlike previous technological shifts that primarily changed how we implement solutions, AI-assisted development is highlighting a fundamental truth about software engineering that has always existed but is now impossible to ignore:

The most valuable skill in software isn't writing code, it's architecting systems.

And as we'll see, that's the one skill AI isn't close to replacing.


How The Republican Party Became A Party That Believes The Constitution Only Applies To Its Enemies

If you vote for this party for any reason—if you prioritize any policy preference over the preservation of constitutional democracy—you are complicit in the destruction of the American republic. You are helping to dismantle the system that makes political disagreement possible in the first place.

The constitutional conservatives didn’t abandon the Republican Party. The Republican Party abandoned them. What remains is the advancing edge of American fascism dressed up in constitutional rhetoric.

Two plus two equals four. There are twenty-four hours in a day. And anyone who can’t see that the modern Republican Party represents an existential threat to constitutional democracy is either willfully blind or actively complicit in its destruction.

It’s gotten to the point where I’m done trying to pretend that not all those who vote for the GOP are part of the problem. I look at everyone who supports the current Republican party as the problem.


← Newer Notes Older Notes →