Refactoring Untested Code

Refactoring is in general restructuring the code without changing its behavior. By behavior, I mean what the outside world can observe, inputs and outputs, data persisted, messages sent, and visible side effects. If those remain the same, users and upstream systems will not notice the difference, even if the internals look completely different. The key point here is the behavior […]

Duplicate code isn’t that bad

Duplicate code isn’t something we usually want in our code for various reasons. The most obvious one is maintenance. When you change a piece of logic, you have to find every place where it appears and update them all. A deeper reason lies in the proper use of design principles, such as Don’t Repeat Yourself (DRY). Although it’s hard to […]

How I Work as a Software Engineer

When I started out, I thought productivity meant speed. Ship fast, fix fast, move fast. Working in startups taught me something different. When everything around you changes constantly, the real challenge is not speed but rhythm. You need a way of working that holds steady when things get chaotic. Startups, deadlines, and late-night deployments have a way of teaching that […]

Smaller is Faster

“Smaller is faster” is a well-known hardware design principle, as you might already know it. Generally speaking, smaller pieces of hardware will be faster than larger ones because shorter distances, fewer layers, and simpler coordination usually mean less latency. I have always thought about this principle mainly in terms of computer hardware. Processors, memory, circuits. Just a while ago, however, […]