Software engineers love efficiency. They love elegance. It’s what they’re taught, and it’s what attracts a lot of them to the field. The problem is they overdo it.
These days I’m not up close to the technology. And yet often I’m able to see solutions that the hands-on people don’t. These are often wasteful or ugly solutions, but they have one big advantage: they’re doable, in some cases more so than what they came up with.
The reason I see what they don’t is that software engineers often prize efficiency and elegance so much that they reject any solution that isn’t both. They may not even be able to conceive of them. Unfortunately, in too many situations, what that leaves them with is nothing. That’s because there either isn’t an efficient and elegant solution, or nobody has thought of one.
Efficiency and elegance matter, but they matter second. What comes first is effectiveness. If you only have one candidate solution that is effective, efficiency and elegance are irrelevant. After all, if you reject your only effective solution on those grounds, you have nothing remaining. The same thing can happen if you have multiple effective solutions, none of which is efficient or elegant.
The answer is not to ignore those considerations. The answer is to apply them only if they still leave you something you can use. Use efficiency and elegance to narrow down the candidate solutions, but not if they eliminate every option. After all, solving the problem in a mediocre way is typically better than not solving it all.