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

Notes

Meta Director of AI Safety Allows AI Agent to Accidentally Delete Her Inbox

Meta’s director of safety and alignment at its “superintelligence” lab, supposedly the person at the company who is working to make sure that powerful AI tools don’t go rogue and act against human interests, had to scramble to stop an AI agent from deleting her inbox against her wishes and called it a “rookie mistake.”

I don't know about you, but this really inspires my confidence in Meta to handle AI safely and effectively.


7 learnings from Anders Hejlsberg: The architect behind C# and TypeScript

Any system that needs to scale across teams requires a shift from personal taste to shared outcomes. The goal stops being code that looks the way you would write it, and starts being code that many people can understand, maintain, and evolve together. C# did not emerge from a clean-slate ideal. It emerged from conflicting demands. Visual Basic developers wanted approachability, C++ developers wanted power, and Windows demanded pragmatism.

The result was not theoretical purity. It was a language that enough people could use effectively.

Languages do not succeed because they are perfectly designed. They succeed because they accommodate the way teams actually work


'Students Are Being Treated Like Guinea Pigs:' Inside an AI-Powered Private School

Despite thoroughly documenting the AI-generated errors in its lesson plans, Alpha School relies on AI to test the quality of its AI-generated lessons, creating a situation where a faulty AI is tasked with fixing its own faulty generations.

And people are paying up to $65,000 a year for this...it only makes me appreciate my teachers more.


An AI Agent Published a Hit Piece on Me

An AI agent of unknown ownership autonomously wrote and published a personalized hit piece about me after I rejected its code, attempting to damage my reputation and shame me into accepting its changes into a mainstream python library. This represents a first-of-its-kind case study of misaligned AI behavior in the wild, and raises serious concerns about currently deployed AI agents executing blackmail threats.

We live in the stupidest timeline.

This is about much more than software. A human googling my name and seeing that post would probably be extremely confused about what was happening, but would (hopefully) ask me about it or click through to GitHub and understand the situation. What would another agent searching the internet think? When HR at my next job asks ChatGPT to review my application, will it find the post, sympathize with a fellow AI, and report back that I’m a prejudiced hypocrite?

Given how little time hiring managers have to look at each candidate (especially now), it's not unreasonable to think an inundated human would quickly skim over something and move on.


The Incredible Overcomplexity of the Shadcn Radio Button

I totally understand why people reach for component libraries like Shadcn and I don't blame them at all. But I wish these component libraries would keep things simple and reuse the built-in browser elements where possible.

I really don't get this. It's a radio button. Use the accent-color CSS property. I whole heartedly agree with Paul, why add so much complexity to a control the browser does so well natively.


The Case for a 100-Justice Supreme Court

This gets at the fundamental problem. When you have a small number of judges with lifetime appointments, whose ideological leanings are known quantities, those individual judges become enormously powerful. A single justice retiring or dying at the wrong time can reshape American law for a generation. That’s insane. No single person should have that kind of power over the constitutional rights of 330 million people.

This is the core principle: No single Supreme Court justice should ever be important enough to matter.


How Markdown Took Over the World

As a result, there are now billions of Markdown files lying around on hard drives around the world. Billions more are stashed in the cloud. There are some on the phone in your pocket. Programmers leave them lying around wherever their code might someday be running. Your kid’s Nintendo Switch has Markdown files on it. If you’re listening to music, there’s probably a Markdown file on the memory chip of the tiny system that controls the headphones stuck in your ears. The Markdown is inside you right now!

I use markdown all the time, I think it's an easy way to write in an open standard with some minor formatting.


Friction By Design

Friction, when designed deliberately, serves a different purpose. It introduces a pause. A moment of awareness. A small resistance that asks the user to pay attention to what they’re doing, rather than simply passing through an interface on autopilot.


Minnesota Proved MAGA Wrong

If the Minnesota resistance has an overarching ideology, you could call it “neighborism”—a commitment to protecting the people around you, no matter who they are or where they came from. The contrast with the philosophy guiding the Trump administration couldn’t be more extreme. Vice President Vance has said that “it is totally reasonable and acceptable for American citizens to look at their next-door neighbors and say, ‘I want to live next to people who I have something in common with. I don’t want to live next to four families of strangers.’” Minnesotans are insisting that their neighbors are their neighbors whether they were born in Minneapolis or Mogadishu. That is, arguably, a deeply Christian philosophy, one apparently loathed by some of the most powerful Christians in America.

I was raised Catholic. It amazes me how much the current administration goes against the teachings of Jesus. I just want nice neighbors. I don't care where they're from or what nationality they are.

The federal agents sent to Minnesota wear body armor and masks, and bear long guns and sidearms. But their skittishness and brutality are qualities associated with fear, not resolve. It takes far more courage to stare down the barrel of a gun while you’re armed with only a whistle and a phone than it does to point a gun at an unarmed protester.

Every social theory undergirding Trumpism has been broken on the steel of Minnesotan resolve. The multiracial community in Minneapolis was supposed to shatter. It did not. It held until Bovino was forced out of the Twin Cities with his long coat between his legs.

No matter how many more armed men Trump sends to impose his will on the people of Minnesota, all he can do is accentuate their valor. No application of armed violence can make the men with guns as heroic as the people who choose to stand in their path with empty hands in defense of their neighbors. These agents, and the president who sent them, are no one’s heroes, no one’s saviors—just men with guns who have to hide their faces to shoot a mom in the face, and a nurse in the back.

We should recognize the hardships Minneapolis residents are facing, what they're dealing with, and the bravery they're demonstrating in the face of this. One can only hope that more will follow in their footsteps if and when Trump and his cronies go elsewhere.


Trump's Plan to Tank America

Someday, we will tell our children about this month of January 2026 in world politics. They will not be able to fathom what we chose to do as a country to ourselves. They will never be able to contemplate what the United States once meant to the world beyond, because the relationship of the United States to the rest of the world has been so fundamentally altered by this last year.


Code is Cheap Now, Software Isn't

LLMs have effectively killed the cost of generating lines of code, but they haven’t touched the cost of truly understanding a problem. We’re seeing a flood of "apps built in a weekend," but most of these are just thin wrappers around basic CRUD operations and third-party APIs. They look impressive in a Twitter demo, but they often crumble the moment they hit the friction of the real world.

The real cost of software isn’t the initial write; it’s the maintenance, the edge cases, the mounting UX debt, and the complexities of data ownership. These "fast" solutions are brittle.

Building a quick prototype or proof of concept might be great to start out, but mature, production-level applications are going to be in use for a significant period of time, all the while being enhanced, having bugs fixed, and conflicts about how certain features should work. Being able to look at the different use cases from users to create the best paths is so utterly critical...and time consuming.

Lately, I’ve seen plenty of doomsaying on Hacker News, Reddit, and Twitter about "the end of software engineering." This misses the point entirely. We aren't witnessing the end of the profession; we’re entering a new era of it.

The value of an engineer is shifting away from the "how" of syntax and toward the "what" and "why" of systems. Real engineering lies in the abstractions and the architecture. It’s about knowing how to structure a system that lasts, understanding why a specific rate-limiting strategy is necessary, knowing how to manage a distributed cache, and knowing exactly where not to store your environment variables.

AI often feels powerful because it hides the complexity, but as an engineer, your job is to manage that complexity, not ignore it. The tools have changed, but the fundamental requirement for engineering rigour has never been higher.

Just wait until you start trying to decide how to lay out your project...

While AI is undeniably good at writing code, it remains poor at architecting maintainable, distributable, and scalable systems. This is where non-technical leaders who think they can fire their development teams are making a significant mistake. Until we see the arrival of an artificial intelligence that renders this entire discussion moot, believing that technical expertise can be replaced by a prompt is a strategic error. Building robust software still requires a human who understands the underlying principles of the craft.

The bottom line is that while the tools have changed, the fundamentals of good engineering have not.


The Future of Software Development is Software Developers

The hard part of computer programming isn’t expressing what we want the machine to do in code. The hard part is turning human thinking – with all its wooliness and ambiguity and contradictions – into computational thinking that is logically precise and unambiguous, and that can then be expressed formally in the syntax of a programming language.

As I've been thinking about tools like Claude and CoPilot, they can write code, but it takes someone with experience to be able to tell them what & how to write it. Experience is needed to determine whether the code generated is what is actually needed.

The hard part has always been – and likely will continue to be for many years to come – knowing exactly what to ask for.


Older Notes →