One thing I have noticed in large organizations is how easy it is to confuse motion with progress. When a team is behind, something important breaks, a launch is at risk, or a customer issue escalates, the organization often knows exactly how to respond: meetings appear, leaders get involved, people work late, and decisions that normally take weeks suddenly happen in hours. From the outside, that can look like the organization operating at its best, but I think it is usually a sign that the syst...

  • Toby YACA (Yet Another Chat App)

    Most AI assistants feel impressive right up until you try to use them as part of your real daily workflow. They can summarize documents, answer questions, write code, and occasionally surprise you with something genuinely insightful. But after a while you start noticing the same patterns over and over again. They lose track of what you’re actually trying to accomplish. They pull in too much irrelevant context. They overuse tools. They forget preferences that mattered two messages ago. Sometimes ...

  • Overusing AI

    With the cost pressure of AI becoming a bigger news topic, it feels like a good time to talk about its overuse. Not because AI lacks value, but because many of the conversations around it quietly blur the line between assistance and autonomy. At its core, modern AI is non-deterministic. Traditional software systems operate procedurally. They accept a discrete set of inputs, execute a known sequence of operations, and produce outputs that are predictable and repeatable. Large language models work...

  • AI on Rails

    I’ve started to become pretty skeptical of heavily scripted approaches to AI-assisted software development. The more I work with modern models, the less convinced I am that the future is a giant chain of tightly controlled agents passing work between each other like some kind of assembly line. Right now, I’m betting more on skills and on the model’s ability to recognize when those skills should be applied. By “skills,” I mean reusable bits of organizational knowledge. Things like how we modify U...

  • NextJS and Caching

    The new cache model in Next.js is much more explicit than the older ISR/fetch-cache world. The important mental model is that The cache key is effectively composed from a few inputs: build ID, function/component identity, serialized arguments, closed-over serializable values, and sometimes dev/HMR state. So this: But if you have a One of the more subtle aspects of For example: And you use it like this: So even though Conceptually the cache key becomes something like: vs: That may seem obvio...

© Karim Shehadeh
  • X
  • BlueSky
  • RSS
  • LinkedIn
  • StackOverflow
  • Github