Problem Solving for Feedback and Growth
There's an old saying: Make it work. Make it right. Make it fast. Crazily enough, I only recently heard this for the first time and have failed to evict its constant repetition from my thought-box. It has an elegant rhythm and bluntness through which I have observed my mind applying without bounds.
It represents a high-level approach for problem solving. Always begin with a solution. It doesn't matter how terrible it is, or how incomplete, just have something. Forget the details, the its (im)purity, and all the details yet to be handled. Find the shortest path possible and just make it work.
When arriving at an idea it is too easy to stop and examine it. The thinking process is then a start-and-stop dance of creativity constantly fighting to avoid any analytical behavior. Find an inkling and inkle it to existence. It's a great chance to actually get a feeling for whether the problem that is being solved has any merit to begin with and if the intended solution bears any weight to stand upon. The sooner you have feedback the sooner you can feed back on it and iterate and improve. The longer you go without feedback the more likely you are to derail and lose focus and the less likely you are to reach the essence of the problem, distracted by the need for a solution.
Once you have a garbage solution and have smelled it long enough to do what you want, you can plug your nose and throw it away. The tightness of the feedback allows you to immediately turn around and apply your understanding and rapidly iterate as the list of bad qualities of the solutions dwindles. Make it robust and fix all edge cases. Then you can ensure the solution will firmly withstand the inherent pounding forces of the problem and that you have reached a solution that can appropriately be labeled “correct.” Take you initial bad solution, iterate, and make it right.
With a good solution in hand, polish and adjust it to fit all the constraints. This is the final step to solving problems. This would be in the vain of make it done; however that is not the final bit to the phrase. The origin actual comes from programming. First write a program that works, then make the way that it is written right. Then the programmers would have to make it efficient and fast. Speed was all that mattered in those days; computer were room-sized behemoths that were slow and had few bells and whistles, literally.
A More Modern Approach
In modern day computers and systems there are many more constraints: memory, battery life, design and attention to detail, speed, and much more. We no longer live in the world of make it fast and I find make it work; make it right; make it fast to sound quite antiquated. The saying needs to be updated. It appears that it has been made to work (it made me write this post) and even seem to have been made right (it’s quite fun to say). But the phrase has not been made to be fast; which doesn't particularly make any sense. The phrase itself needs something else and isn’t speed. It needs a zest of speed and power, design, elegance, and fury. It must dominate, command, and conquer. It must scream. It must roar.
Make it work. Make it right. Make it roar.
Problems are Everywhere
New relationships can be rough. Two people find themselves thrust into long and intense spacial and temporal proximity as every vice and bad habit begins to carve holes in the ship, reducing the ability to float. What can be done to improve the relationship at the start? Do whatever it takes to get along and learn to know each other at ever-increasing depths. Let go of all your rules, strongholds, and assertions of fairness and just do whatever it takes to make it work. Then, as your relationship continues the warts will fall off and imperfections will come to be cherished. You will grow and find the room to fix all issues and take the relationship to the next level. You will find the way to make it right. From there you can travel the world, start a company together, put on a play, relax on the couch on a rainy day, or whatever whims carry you onward. Live, laugh, love, and learn. Enjoy the relationship the had been made to roar.
Need to give a presentation? Throw all the information into a bunch of slides, decide what goes where, and then finally polish it off. Finish with a presentation that truly roars. New project at work? Start with something that barely works and end with it roaring. The process applies to a business plan, designing a poster for a movie, choosing the theme of a party, starting a friendship, handling a disagreement with a coworker, solving a financial dilemma, raising a child, writing a story, and more.
It's an inherent pattern that can be used to solve any problem and one that maximizes tight and powerful feedback as quickly as possible. Arrive at at least one functional solution and then solve it better. End with the solution the sparkles from every angle.
The Greatest Fault
I have to ask myself why this suddenly matters so much to me. And this has led me to understand that my general approach to problems was, and still is, generally backward. I approached every problem: Make it roar. Make it right. Make it work.
The first idea in my head would be to draw the perfect solution, one that was clever, simple, ideal, and ideally magical. When beginning a problem, I had to make it roar. I had to see a solution that I knew was great and that I had from a very high-level solved the problem. Then I would ensure that it covered all cases and was thorough enough to span the whole problem space. At that point I was able to stand up and argue confidently that I understood the solution and could make it right. Finally, I would sit down and implement my solution, covering every last detail, and then lean back knowing that I had made it work.
I've managed well to make it this far with this approach and yet never had any notion that my process was so inherently flawed. The purity of the final solution would block all thought processes, half-assed solutions were verboten, and mediocrity was not acceptable. Yet, in retrospect the real mediocrity was the amount of time that it took to reach a working solution in many cases and then the giant death toll of time when the constraints or problem changed.
Don't Be a Magician
Looking back I see that I have taken the magician's approach. When asked "how is X coming along?" I would always answer confidently, "wonderfully! I'll have something to show you soon." And then I would return to my mind-fortress and continue ironing out the details of the master plan I had underway. Until the details were all solved I actually had nothing to show. And then when it all came together I would appear and say "Tada! Here it is." The code would be clean, the overall architect understandable and there would be little time left. I never felt this was an issue. I have met my deadlines and finished my projects. Perhaps those who were depending on me were nervous. Reflecting back I can hear them saying, “Is there something you can show me?”
My need to have something great upfront meant that I stalled until I had it. Solutions would be thrown out from the beginning with the recognition that one detail was out of place. The amount of time it took to get even the smallest bit working, and thus receiving feedback, was just too long. I may have made my deadlines, but I wasn’t growing.
Problems are Made of Problems - Efficiency Compounds
In most literary works there is a main story arc with the exposition and rising action, the climax and falling action, and finally, the resolution. The story begins with problems and issues and the characters fighting against their environment to survive. The bareness of a plot comes into being and the story just barely stands as something coherent. The issues are conveyed, the plot(s) set in motion and the story is made to work. Then after iteration and evolution the story reaches a pinnacle, the pieces begin to fall into place, and all constraints and problems seem to be solved. Everything is made right. Finally with some surprise and cleverness the story closes with the entire work fully presented and gifted. Your mind spins as the pieces replay in your mind and you realize all the wonderful subtleties and foreshadowing littered across the story’s landscape. You feel the immenseness of the story and if it was done just right, you might even feel it roar. Telling a good story is analogous to solving a problem.
In a the story there is typically a hierarchy of individual story arcs that apply to a character, a group of characters, a particular issue, or any other element that managed to erupt from the author's creativity. The end of a few arcs may actually turn out to only be the initialization of a larger one; there might be a cloud of impending problems where even after fully solving a few, you are only barely starting to make it work. In the process of solving a problem, or telling a story, there are smaller problems that themselves have even smaller problems which repeat downward.
If every subproblem starts with planning (instead of doing) there is inherently going to be number of stalls before some momentum is gathered. This was, and still is, my fundamental flaw. I love to plan.
I need the solution before I attempt to apply it. I encounter a problem and stall. Once I have identified the subproblems I choose one and stall. Then once I have it mapped out, I start at its beginning and stall. It takes most of the problem being solved before I even understand the true problem and any misunderstanding comes out as a massive loss of time and a waste of the chance to grow.
For two weeks I have been pair-programming with Kent Beck, something I am enjoying very much and will post more about soon, and I am so thankful for him saying Make it work; make it right; make it fast and then forcing me to execute it (he made me solve a problem is the fastest way possible and then iterate on the solution) and my eyes feel more open ever since.
Now when I am solving a problem and I find myself falling into planning mode I write down my concerns, shrug them off and keep going. I'd rather buy a shitty car and learn to drive it than spend years saving for a Porsche.
A Framework for the Future
In reality no person and no solution can ever truly be be perfect. I am learning to simplify my solutions and lessen their appearance of perfection. I am learning when and how to stop planning and I am learning when to let go.
When it comes to learning I always aim for a breadth-first approach and yet the manner in which I solve problems has been depth-first all along. The way I learn and the way I do have been at odds all along.
And now that I know this is my largest hindrance I have a problem on my hands. Using sticky notes and cheap concentration tricks I will find a better workflow that just works. Then I can iterate on it until I feel that it is right. And finally after lots of feedback from myself and others I hope to one day find that the way I approach problems is something that truly roars.
Make it work. Make it right. Make it roar.