Unsure Development
"What do we really know, of all there is to know?"
- Mark Abrahams
One of the frequent challenges we face in software development is just how uncertain everything is. From choosing frameworks to designing architectures, making trade-offs to deciding on variable names, there are often no “perfect” answers—only options with pros, cons, and ripple effects you can’t fully predict.
A liberating truism I've found over the years is this: Uncertainty isn’t the enemy of good decision-making. In fact, I've learned to embrace and sometimes even enjoy being uncertain in the face of some fairly substantial decisions. At times it can even be downright exhilarating!
Uncertainty vs. Indecision
It’s easy to fall into the trap of thinking that being uncertain means you shouldn’t act. You need to gather more information, do more research, think harder about the problem. While sometimes these help, there comes a time when the usefulness of gathering more information is eclipsed by the usefulness of committing to a certain course. Sometimes the course is the information gather!
It's important to understand that uncertainty and indecision are not the same thing.
- Uncertainty is a recognition that you don’t have all the information, that the future is inherently unpredictable in at least some facets.
- Indecision is a paralysis that comes from fear, overthinking, or the desire to avoid mistakes.
A developer can be uncertain and still act decisively. They can weigh the pros and cons, make the best choice they can with the information available, and move forward—accepting that the choice may not be perfect, but that deferring a decision at this point won't produce the best progress.
Pros, Cons, and Partial Wins
Software development is full of decisions where there is “no clear winner.” Even when one option is objectively better overall, there may be individual aspects of a less optimal solution that are attractive. Perhaps it’s simpler to implement, easier to test, or more familiar to the team. At times the pros and cons are so evenly split, it can be just one small aspect of one option that pushes you that way by the barest of margins. Sometimes you feel you might as well toss a coin!
Thinking through trade-offs carefully is where uncertainty becomes a strength. By acknowledging that every option has flaws, you give yourself the freedom to:
(a) weigh up the pros and cons with the information you have at hand, and
(b) choose pragmatically rather than idealistically. You make informed decisions without expecting perfection.
Decisiveness Is Its Own Axis
Being decisive doesn’t mean being certain. Decisiveness is about committing to a course of action while understanding its limitations. It’s about saying:
“Given what I know, this seems the best path forward. I’ll commit to it, monitor the results, and adjust if necessary.”
This approach is liberating. It allows you to act quickly, iterate when needed, and maintain momentum even in the face of ambiguity.
The Unsure Developer Mindset
Being “unsure” is not a weakness. It’s a mindset that embraces complexity, recognizes nuance, values reflection, and thrives on critical thinking. The Unsure Developer doesn’t strive for perfect certainty—they strive for informed action.
In practice, this means:
- Listing pros and cons before making a decision.
- Accepting that some choices may turn out to be wrong.
- Prioritizing action over endless deliberation.
- Continuously learning and adjusting based on outcomes.
The next time you feel unsure about a technical choice, remember: uncertainty isn’t a signal to freeze—it’s an invitation to think critically, weigh options, and then act anyway. It’s the engine of thoughtful, adaptive, and ultimately more effective software development.
So here is your invitation to embrace the "I'm not sure", and head with Elsa...
