Most of What We Call Progress

Most of what we call progress in software is just motion. New tools, new frameworks, same problems. Maybe fancier logos. Our industry always has this collective thrill that a new fancy method, framework, process will make things infinitely better. Perhaps, perhaps, perhaps. I’ve watched that excitement enough times to recognize its cycles. Years ago, a colleague was setting up Apache […]

Stop Wasting Brainpower

How many times have you found yourself saying: “I worked all day, but I didn’t get anything done.” I know, we have all been there. We feel bad about it, too.  On the surface, it looks busy. Your calendar is full, Slack is notifying you, and your todo list is endless. There’s no shortage of movement, and yet, strangely, very […]

Why Over-Engineering Happens

If you’ve worked in software long enough, you’ve probably seen it: a CRUD app serving a handful of users, deployed on a Kubernetes cluster with half the CNCF landscape stitched together for good measure. On paper it looks impressive. In reality, it’s a Rube Goldberg machine solving problems the team doesn’t actually have. Contrast that with Levels.fyi. The site now […]

Why Legacy Systems Are Worth Your Time

I know. When you hear legacy, you think untested code, brittle systems, weird edge cases, and “what the hell just broke now.” Every moment feels frustrating. You don’t know what the next change will trigger. I hear you. Been there, done that. A lot of cursing happens. But here’s the thing: if you’ve ended up with legacy software, it means […]

On Writing Wrapper Libraries

A wrapper library is a thin layer of abstraction around an existing library, dependency, or functionality. A wrapper library offers a better and cleaner interface or rather hides the dependency or library. Writing a wrapper library can be a hard decision since it requires more work and expands the project scope. On the other hand, it has long-term benefits like […]