Discussions are a fundamental part of software development, they are a necessary friction to increase scalability. A few patterns can emerge from those discussions that allow us to spot problems early when those problems can have an impact on the quality of the outcome. One of them is the Proper Solution.
The Proper Solution is a common expression in software development. It can come in many forms such as "the best solution", "doing the right way", "making it better" or "improving it". All of them share the same fundamental:
Just because one believes to have the best answer, that doesn't mean that it is the best answer
In most software projects, an intuitive analysis of a problem is necessary because the more acceptable answer lies in achieving the best outcome among many variables (business requirements, human resources, code complexity, technical debt, etc.). The main issue is that "best" or "proper" is hard to measure and depends on each specific case.
Just as legibility, the "proper solution" can be subjective or inaccurate when concluded by a single person because it relies on the current knowledge and state of mind of that person. When working as a team, however, the chances of coming up with subjective and inaccurate answers are lower, although they are still restricted to the level of knowledge of the members of that team. Besides, two individuals of the same team can come up with a solution that looks the same for the core of the current issue but is different for edge cases, for better or worse.
The reason why it's very hard (either as an individual or as a team) to come up with a proper solution for a problem is that the human knowledge in all areas is too vast. Even if we could hold the current knowledge of all mankind in our pockets, there would be still many things to discover. The only way to really come up with a proper solution is to know everything, including what is unknown, and use that as an attempt to craft the best possible and measurable outcome.
The only way to really come up with the proper solution is to know everything, including what is unknown, and use that as an attempt to craft the best possible and measurable outcome
Unfortunately, being able to measure something in this industry is a challenge on its own. Each specific circumstance is dynamic. Variables change often and we can't effectively predict the outcome using efficient models like the scientific method, for example. Knowing everything (including what is unknown) is a Utopia.
It's reasonable to conclude that the Proper Solution is a fallacy. It's impossible to be achieved.
If we're aware that the Proper Solution is impossible to be achieved, we can at least try to get as closer as possible to it given the current knowledge or circumstances of an individual or team. Even if we can't measure a proper solution that will be the same for all situations, we can still experiment something to see if it works in our context. If it works, that doesn't mean it will work for all cases, but at least that means it works for the business requirements, human resources, code complexity or technical debt we have right now.
There's no such thing as the "Proper Solution", there's only the best solution we are able to come up given the current knowledge and circumstances
The code is already legacy at the moment it reaches the master branch, the decision is already made at the moment it goes to production. The only thing we can do is improve our own capabilities to make it better the next time.
Reaching to the Proper Solution is a myth, that doesn't mean we should stop using the term, just that it shouldn't stop us from getting closer and closer to it everyday, in a journey of continuous improvement. If we do like that, we will eventually reach a state where we will find ourselves solving problems faster and better from what we did a long time ago.
However, if we don't feel that we are improving every day, then that means that we are not getting even closer.
And that, my friend, is a much bigger problem.
Create your free account to unlock your custom reading experience.