I’ve been through some of the problems that were hard enough for me that I was not even sure if an optimal solution existed.
After having solved those problems, I have seen a pattern that is useful for solving general problem especially when the problem is abstract or you are not sure how to solve it.
I am not an expert I just want to express and share my point of view from my experiences toward technological problems. It might not apply to other fields or even other case scenarios in technological field.
I normally see a problem solving collapses into 3 phases.
Solution discovery phase
From nothing to real examples with real data.
- Try to break down the problem in small building blocks and solve them one by one.
- Try to assume that you have a solution and apply that solution for different examples.
- Discovery patterns from your example to formulate a general solution.
- Alway try to examine with concrete examples with real data.
- Google spreadsheet is a great tool for input/output your data.
Solution implementation phase
After seeing the pattern, Try to formulate a general form to represent your solution that need to be implemented in a technological way. I found memorization technic can play a big role here.
Solution Validation Phase
In this phase, You must be able to document your algorithm by transforming from manually testing with Google spreadsheet to automatic process. Test unit is good to be applied in this case.
Why you need automatic test?
- Speed up your test: You don’t have to manually test it validating from input to output one by one.
- It is a useful documentation: Human language is good at the beginning of discovery. Once you have more knowledge about it, a shorter ,more representative format is better — considering it like a math to solve a normal problem.
- Change resistance: if you have change you can detect failure much faster than manually process.
After having this tool in place, you should consider to generalize the solution to adapt all case scenarios and optimize your solution.