How to Destroy the Myth of the Proper Solution
hackernoon.com
hackernoon.com
I'd take "proper solutions" to mean "nothing improper" which, to my understanding, is an extremely practical and feasible design goal for quality control purposes. Proper solutions definitely exist in this context. Encryption, handling user input, speed optimizations are good examples.
I'd go further and say, if a solution is proper (not wrong), and progressive (makes something better), it's good enough. Maximizing the better part might be subjective yada yada, but better is measurable, and there is no need to introduce the "proper" problem when dealing with the "better" problem. Whatever "better" that needs to get done should get done "properly". Isn't that what we're all already doing?
And of course, nothing is ever perfect. But it's a good moving target.
From the article.
> There's no such thing as the "Perfect Solution", there's only the best solution we are able to come up given the current knowledge and circumstances
Technical depth and breath + domain expertise = the best solution
The above + policital acumen = a good solution
The above + stategy = the right solution
The above + leadership = a successful solution
Anybody can obtain technical depth and breadth. Bit of training, bit of time... Technology is easy. People are hard. So these days I aim to be successful, and try daily to improve the soft skills listed above to make sure I can do that.
I think that is the definition of a "Proper Solution".
Another way to define a "Proper Solution" is: the fastest solution that still manages to be maintainable while meeting all of the requirements for the project which is not "over-engineered".
I think that's the broad-spectrum "proper solution". I don't think there is any application that wouldn't want to meet these requirements.
1. Over-engineering. This often comes in the form of trying to perfect something before releasing it, and/or long projects with fluid, changing requirements.
2. Criticizing old code/systems and their developer without any understanding of the context and trade-offs made at the time.
In my experience the first is common and the second is even more common. The worst is when #1 and #2 combine into someone trying to replace a functional system with an improved "v2" that is more complicated and no better.
I'm also amazed at what some people consider a "functional system". Frequent downtime and developer/support intervention is not what I'd consider functional, but for many business it is.
Either way, what you end up with is technical debt.
He's not the one that maintains the code. He's not the one that knows the product, or business case in detail.
If I disagree with him he will throw some random fact out which may not have much weight. If I say, well your solution will take three additions weeks to implement and does not buy us more and is less performant. He would say the equivalent of...the sky is blue.
Does anyone else have this issue, and know how to counter back?
In terms of arguing, if you guys are going around in circles one good way is to write down the key points of the argument or merits on a whiteboard/paper. Like solution one offers 1) speed 2)cheap versus solution two offers 1) stability or something. I've always found that people good with talking, but have a vacuous argument tend to break apart when it is laid out in writing.
Real life example from last week. We needed quick turnaround for a JMS cluster to fix a P1 incident that has been haunting the business for a few weeks. Our other applications use file based persistence store on its own NAS.
I proposed we used JDBC backed persistence store - use our existing DB and just add the scheme. I work in a huge company, so new infrastructure for the NAS takes a while to get.
He was against it, said JDBC store is not performant. He wanted a new NAS, and the JMS cluster had to have its own dedicated resource, and not use the existing one (which my teammate proposed and was shot down by him)
That application would have a max of 10 messages on that queue per day to trigger a process...no performance needed really.
Forward to the next day, when he proposed his solution to operations. He got chewed up by another architect and the operations guy for a solution that requires a whole new NAS. They settled on using an existing NAS.
Quite a bit of details, hope my coworkers don't browse HN.
If you consistently can't ship proper solutions then either your design process is broken or the problem is between the chair and the keyboard. There is no myth here.
As engineers we value efficiency for its own sake as we see the beauty in it and so serve the same goals as our corporate bosses. We were directed to pre-package these optimal end-products. Of course, it failed. But have found greater success in standardizing not the solution, but the process we do to find the best solutions.