I spent the past few weeks in the Midwest, in Wisconsin. It’s that wonderful time of year where the world transitions from cold to warm, almost instantly. I watched fiddlehead ferns go from nothing at all to 2” tall in 10 days. Crazy!
It’s also dandelion time. Lush green lawns are filled with gorgeous, cadmium yellow bursts of color. They’re wonderful flowers - the contrast is pretty, they’re very important early food for bees, you can eat most parts of them - I like them a lot.
But some people don’t. Lots of folks are frustrated and try hard to keep them out of their lawns. This is kind of a losing battle, dandelions make a lot of seeds, famously, and they like to fly, so it’s more or less impossible to keep them out.
But this Sisyphean battle to me seems to miss the point. The goal of a lawn (I guess - I don’t much like lawns personally) is to look nice. That’s been defined in a certain direction - uniform green - that dandelions aren’t part of. But that goal is narrowly attached to, and that leads people to fight a losing battle instead of…just enjoying the flowers.
What does this have to do with engineering? Well, I think there’s a similar pattern with code sometimes. We start with a goal but we get into implementation quickly. Sometimes the implementation is a blind alley, but we are so focused on the goal, we keep pounding away at it. Often, there’s an easier solution nearby, or even a rethinking of the problem that makes it simpler to begin with.
It’s easy to develop tunnel vision in engineering. We are trained to focus deeply on the problem at hand. But it’s useful to periodically look up and ask if it’s the right problem to be solving, or if there isn’t a different or better approach.