Problem Solving Post-morten
I wrote an internal blog as a sort of autopsy on how I work through a problem starting with no context. This was a question I got in a comment.
How do you feel about all of this?
This post looks like a report about what happened. It would be interesting to read about your thoughts and opinions about this experience.
What would you do differently? How are you going to maintain this moving forward? What do you want to tell your future self? What would you tell junior engineers who are just starting out with this kind of problem solving process?
The joy of blogging is re-reading this in few months and saying to yourself “What was this guy thinking?” or “Whoa, this is still completely true!”
Flow State
I wasn’t actively thinking about my process when I was working through this, and in hindsight, that is a really good sign. I was able to intuitively read through the problem, formulate some ideas and questions, ask those questions, and then I used a template for my response and everything fell into place.
6 months ago, that would not have been the case. I would have read, and re-read the problem, then spent time doing an unorganized investigation. That unorganized investigation would have led me to poorly formed questions, that would have (unsurprisingly) not pointed me toward any useful direction.
The fact that I was able to get into that flow state tells me the professional-development work I have been doing is useful and paying off. That work is like exercise, or flossing your teeth. Any one day in particular doesn’t matter. Consistent effort over periods of months and years makes a big difference though.
For this particular problem, the only thing I might have done different is time-box activities more tightly. I’d pay attention to how long I was investigating before asking a question, and then give a small period of time to create and send the final report. Paying attention to time would probably have cut 10 or 15 minutes off the total time spent.
Going Forward
Accomplishing one thing is great, I want to keep the momentum. My plan is to
- continue honing my problem solving template as necessary
- continue practicing solving problems that are just out of reach fo my current ability by taking P1 issues, daily programming exercises, and pairing with team mates (or anyone really) on hard problems
To other people wanting to improve their problem solving ability and personal velocity I’d suggest
- make a personal template for how you approach problems and lean into it. Use it on every programming problem you approach no matter how small
- my current template is restate the problem, inputs, outputs, brute force solution
- time box your investigations (I use a small digital timer for amazon)
- develop the ability to ask well-formed / precise questions.
I’d also suggest reading chapter 1 of Thinking Like a Programmer.