We’re faced with problems every day in life, and we almost never get clarity. We jump into the middle of a problem, we carry it through to whatever extent we can to find an answer, then we just get on with things and find the next thing. Whereas with a human-made puzzle, you have the satisfaction of being completely in control: you start the challenge from the beginning, and you move all the way to the end. That’s a satisfaction you don’t get much in real life. You feel in control, and that’s a great feeling.
The first part of that statement struck me. There are a lot of jobs where vague, unclear problems are the norm, and problems aren’t so much solved as they are just dealt with. This certainly can describe many problems in the software world.
In theory, the problem we’re faced with has a clean solution. But in practice–without being able to address constraints that are out of our control–there isn’t a clean solution and it’s our job to choose between the “least bad solution,” or, the one that feels “the least dirty” to implement.
Often, hard, unappealing problems are simply not addressed, forever kicked into the bottom of a dusty backlog. Some difficult decisions are punted off, because, without being able to properly revise and address the real root of the problem, all of the possible solutions are too problematic to implement.
- Technical debt accumulates, because there’s a cost associated with changing published interfaces and pushing hardship onto users.
- The costs of dealing with a particular problem aren’t proportional to the number of users who would benefit from the problem being addressed.
- A severe bug or zero-day security exploit crops up, but after a quick fix is implemented, the deeper underlying problems aren’t examined and addressed because there are more exciting things to work on.
- It’s difficult to get non-technical product owners to realize the need to address technical debt, because, hey, what’s there “works.”
That’s why greenfield projects hold so much appeal. In addition to offering the ability to just build new things, they allow us to choose new tools and technologies in order to solve a problem in an appropriate and elegant manner. Abandon the old project full of hacks and workarounds and legacy concerns and, instead, focus on the new. Where the the problems are fresh and the old constraints are no longer omnipresent. It’s much more fun and interesting to build something new than to continue maintaining an existing product. New is what drives the technology world. Rather than grinding through on a problem that, for whatever reason, has become intractable, rephrase the problem, or, better, choose a new problem to address.
Our job involves making these difficult decisions. Choosing a non-ideal solution that’s still better than the other non-ideal solutions. That’s not what we want, but as pragmatic makers of software, it’s what we do. Doing as good a job as what’s possible given the current constraints. That’s why the idea of taking a problem and working through to its single perfect solution is so appealing. We’re ever in pursuit of a single elegant solution that solves all of the edge cases–the puzzle with a single “aha” solution.
Unfortunately, Time doesn’t make its magazine content available to non-subscribers.↩