In this article, I try to understand why coding agents can be infuriating to use. I think the problem is their conversational UX: they behave enough like helpful colleagues to trigger our social instincts, but they don't learn, adapt, or take responsibility the way people do, which makes their repeated mistakes feel much more frustrating than they should.
In this article, I share what I learned about darts after recently discovering the game: surprisingly, the bullseye isn't the highest-scoring target on the board, and pros usually aim for another target instead (the triple 20). Through a couple of interactive simulations, I show that this strategy, however, only pays off at high accuracy: the triple 20 is surrounded by low-scoring segments, so,…
In this article, I propose a definition of software slop based on human attention (slop = code that hasn't been reviewed or verified) and sketch out a way to estimate how "sloppy" a piece of software is. I put it to the test with Slop-O-Meter, an experimental tool that analyzes public GitHub repos and assigns them a sloppiness score. I then discuss the results of the tool, which are not very…
In this article, I explore what happens if you: Let users extend your app with code snippets. Give them access to an LLM that writes those snippets for them. This approach allows you to solve problems whose complete scope you don't know beforehand and that would otherwise be very difficult, if not impossible. Through three examples, I show how I employ this approach in my app. I then discuss the…
In this article, I show how mainstream AI assistants connected to your apps stumble when asked simple questions about the data in them. This is because they only see fragments of your data, leading to slow, error-prone answers and even outright hallucinations. I compare this to Superego, the open-source personal database I develop, which takes a different path by syncing the full dataset locally…
In this article, I talk about an inherent trade-off in TypeScript's type system: stricter types are safer, but often more complex. I describe a phenomenon I call "hyper-typing", where libraries - in pursuit of perfect type safety - end up with overly complex types that are hard-to-understand, produce cryptic errors, and paradoxically even lead to unsafe workarounds. I argue that simpler types, or…
In this article, I talk about "local-first", a paradigm for building software that runs on your device, stores data locally, and syncs across devices without depending on cloud servers. I contrast it with the "cloud-first" approach we're all accustomed to, highlighting the benefits of local-first for the user. I then share my vision for Superego, a product I'm developing that combines a personal,…
In this post, I explain what is a mock server and why is it a helpful tool for developing frontend applications, explaining some of its main benefits. I conclude giving a couple of tips to help you choose a mock server for your apps.