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

Notes

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.


A Manufactured Crisis: How A Few Hooligans In LA Became The Pretext For Military Rule

The propagandists understand that dramatic images of real violence are far more effective than fabricated ones. A video of someone hurling concrete at police is genuinely disturbing and naturally generates strong emotional responses. But that same video, stripped of context about scale and containment, repeated endlessly across multiple platforms, creates the impression of systematic breakdown rather than isolated criminal behavior being addressed through normal legal processes.

The crucial element is decontextualization. Videos of specific incidents circulate without time stamps, location markers, or scale indicators. A thirty-second clip of one intersection becomes representative of an entire city. Social media algorithms, designed to maximize engagement, naturally boost content that triggers fear and outrage while burying anything that might provide proportion or context.

Mainstream media, trapped in its own engagement-driven incentives, amplifies rather than clarifies. Headlines speak of “widespread unrest” and “violence erupting across Los Angeles” without mentioning that we’re talking about incidents covering perhaps twenty square blocks in a city spanning over 500 square miles. The scale of the actual disturbances gets lost in the imperative to make everything sound dramatic and urgent.

The result is a population that believes they’re witnessing something far more serious than reality warrants. Americans in other states, consuming this curated content, develop the impression that Los Angeles is in the grip of systematic breakdown requiring extraordinary intervention. The manufactured crisis becomes indistinguishable from a real one in the minds of people who have no baseline for comparison.

Once more, we are being failed by the mainstream media and their inability to actually speak truth to power.

The media’s role in this transformation cannot be understated. By treating manufactured crisis as genuine emergency, by amplifying decontextualized images without providing scale or proportion, by framing military deployment as reasonable response rather than constitutional violation, mainstream outlets become unwitting accomplices in their own irrelevance. When reporters present authoritarian power grabs as ordinary policy disagreements, they help normalize what should be shocking.

This decontextualization leads to people not being able to fully grasp the scale, or lack thereof, allowing for authoritarianism to gain a foothold.

We are witnessing the live construction of an authoritarian consensus through carefully orchestrated deception. A few broken windows and isolated acts of violence in Los Angeles became the justification for crossing a constitutional line that previous generations would have died to defend. And it worked precisely because most Americans have lost the ability to distinguish between genuine emergency and manufactured crisis.


It Matters. I Care.

Let me be clear: It fucking matters. Truth matters. Documentation matters. Fighting corruption matters. That accountability seems out of reach right now doesn’t change that. When we internalize the belief that nothing can change, we stop demanding change. When we accept corruption as normal, we stop fighting it. When we dismiss documentation of wrongdoing as pointless, we give wrongdoers exactly what they want: permission to continue unchecked and with no record of their actions.

I understand the despair in these kinds of responses. We’ve all watched impeachments fail, courts falter, institutions buckle, and politicians repeatedly trade away democracy for their next campaign check. But giving up on the very idea that truth and morality matter is not just cynicism, it’s surrender.

It's too easy to give up in these depressing and scary times. Don't give in.


Trump Threatens to Eviscerate NASA

And in doing so he will hand the future of space exploration over to other countries. As planetary scientist and former NASA Mars science operations team member Tanya Harrison put it, “The fact that the U.S. is turning inward and potentially set to decimate the science from its own space program while China is offering up its recently returned lunar samples for researchers around the world to analyze speaks volumes as to how the tides of science are going to shift.”

Trump is handing over America’s scientific preeminence to other countries, including our enemies.

And it’s all for a lie: this saves money in the sense that starving to death saves on your food bill. Study after study has shown that for every dollar we put into NASA, we get more than a dollar back out, sometimes much more than a dollar.

Yet another disaster from the Trump administration putting us behind the rest of the world


The Promise That Wasn’t Kept

Valuable work and meaning is not derived from what AI makes us (apparently) faster at: generating code. Meaning and value in software development is actually created through the impact of building things that makes human lives better, or easier, or slightly less bad.

What’s becoming clear is that the mass adoption of AI is shifting the focus away from human-centered software solutions that provide meaningful value, and is reducing the entire industry to just the tools at its disposal. Just generate the code, bro. Just ship one more app, bro.

I take pride in my work and try to create the best product for my users. I'd be lying if I said I always succeeded, but I'm always striving to do better. How many of the vibe coded apps will just be cookie cutter bland apps that might do the job, but feel more like some boring utility. Boring can be good, but sometimes some nicer touches can provide real value.

There’s nothing wrong with being inexperienced; we all have to start from somewhere. But we can’t rely on tools as a shortcut to gain valuable experience. Experience takes time to develop, and your tools are only as good as your fundamental knowledge and skills. If you skip the knowledge and skills part, and if you fail to learnabout what you’re doing and the implications of how you’re doing it and the human value you have the potential to deliver, then you have little hope of building human value into your software.

I sometimes wonder what junior developers are going to lose by not starting with the basics and just getting AI to build things. It might be all fine and dandy when the generated code works, but what happens when users inevitably find weird edge cases? Or what if there's a bug? From my own personal experience, I've gained plenty of experience and knowledge from debugging and figuring out where code goes awry. I'm not saying that every developer needs to follow my path or not use any new tooling, but I wonder how much learning is done when you enter some commands into a prompt and code is spit out.


What Would “Good” AI Look Like?

We simply need to start thinking through the implications of a fundamentally better approach to AI, and to understand that all of these things are extremely possible. Consumer-grade AI tools that are actually good do not have to be a hallucination.

This was a good list looking at how we might see better AI.


Programming is a Feeling, and AI is Changing It

Programming is an activity, but it’s also a feeling. For those of us who actually enjoy programming, there is a deep satisfaction that comes from solving problems through well-written code, a kind of ineffable joy found in the elegant expression of a system through our favorite syntax. It is akin to the same satisfaction a craftsperson might find at the end of the day after toiling away on well-made piece of furniture, the culmination of small dopamine hits that come from sweating the details on something and getting them just right. Maybe nobody will notice those details, but it doesn’t matter. We care, we notice, we get joy from the aesthetics of the craft.

There really is something to be said about seeing the output of the code you write. Being able to see your code transform into a website or application is amazing.


← Newer Notes Older Notes →