Article summary
Developing custom software is tough. There are numerous unknowns and tradeoffs at every stage of a project—each with unique short-, medium-, and long-term consequences in several dimensions. As a consultant, my job is to help people navigate those complex tradeoffs, and to build an app that will help my clients do what they do better, faster, and cheaper.
As a developer, my job is to implement those tradeoffs with code that remains flexible and easy to change. I need to focus on the kind of flexibility that my client is likely to need—without spending time and budget building in the kind of flexibility that they’ll never use. If my software is a jacket, the trick is sewing in just the right amount of pockets, and not one more.
The constant tension of the competing tradeoffs in a software project can lead to some nasty bouts of internal conflict and indecision. If I’m not careful, that indecision can lead to wasted time and effort that don’t provide value. Here are a couple of ways that I break through to find a solution when I’m not sure what to do next.
Ask for Help
Asking another person for help is almost always the quickest way to get unstuck. Doing so forces me to think through my problem from another person’s perspective so that I can effectively communicate it. Half the time, just making myself put the problem into words is enough to make the solution obvious. It’s almost comical how often I find myself thanking a friend for standing there and saying nothing because I figured out the solution while I was asking them for help.
Pair programming is a great way to optimize a software company for this problem solving technique. Sitting by and working with a pair provides numerous opportunities for both of us to ask questions and reach out for help. By frequently alternating roles, we build trust around the idea that asking for help and talking through problems is a psychologically safe thing to do.
That sense of safety is incredibly important because asking for help often feels like making yourself vulnerable. Especially when I was new to my career, asking another human for help seemed like a surefire way to broadcast that I couldn’t solve the problem in front of me. But spending an hour grinding on a problem that could be solved with a three-minute conversation is a crazily inefficient way to spend my life (and my client’s budget). Over time, and with the help of several awesome colleagues, I got better at asking for help sooner rather than later.
Make a Plan
When I can’t ask another person for help, I can always hack the language circuits in my brain into behaving a bit like another person. How? By making a plan. Something about the process of formulating thoughts and writing them down helps me see problems from a different perspective.
For me, this means cracking open a new map in my favorite mindmapping app or opening a new document in my favorite digital notetaking app. Whatever tool you use, I suggest that you get really, really comfortable with it.
Brains have a nasty habit of reaching for something easy when faced with a hard problem. For some people, this means opening a social app for a quick dopamine hit. For others, it means running the same manual test over and over again. Everyone has something that their brain likes to do when it can’t quite figure what to do next. By getting comfortable using a thinking tool like MindNode or Notability, I trick my brain into seeing it as the easy thing to do when faced with a hard problem.
It took a while for this habit to stick. But now that it’s established, what used to be a liability has become an asset. Now, whenever my brain gets stuck and reaches out for something easy, it finds a thinking tool that helps me understand and solve the problem in front me. Instead of spending brain cycles doing ineffective work, I spend them mapping out the problem domain and looking for a solution.
What are your favorite methods for getting unstuck? Share your tips in the comments.