I like helping people (including myself!) get unstuck at work. Today I think I did a pretty good job at this for several different people (including myself!) in quite different but still work-like contexts, so here’s some tools and questions I use, in no particular order.
- Ask more questions.
- Break it into problems of different categories.
- Can you separate the problem of desired behavior (I want it to do this thing, but it’s doing that thing) from the problem of how the implementation is now (it does not have the information it needs to do this thing) from the problem of how you think it should be implemented (I cannot give it the information at this time the flow because reasons)?
- Because sometimes thinking about all three of those things as the same thing is what got you stuck.
- Do the different categories perhaps require different solutions?
- Conversely, are you stuck because they might all want the same solution but you can’t quite see it?
- If yes, talk it through
as a crewwith someone, ideally someone who has relevant expertise.
- If yes, talk it through
- Can you separate the problem of desired behavior (I want it to do this thing, but it’s doing that thing) from the problem of how the implementation is now (it does not have the information it needs to do this thing) from the problem of how you think it should be implemented (I cannot give it the information at this time the flow because reasons)?
- Combine it with other problems into :one bigger thing.
- Avoidance of obviously important work in otherwise concientious and capable people often comes from having gone one or two steps down a path that won’t work and/or not knowing how to solve one of the tasks remaining ahead.
- The solution to avoidance is often a conversation.
- Did you try going for a walk about it? See also: hydration, food, sleep, :enrichment.
- Consider what it would look like if the problem were solved.
- If your answer would fit in a grumpy one-liner 2000s internet forum response, see previous recommendation.
- Is there a different problem behind (around, above, in front of) this problem?
- Map it out on a piece of paper, ideally a big one. Lists are good; so are charts, diagrams, pictures, maps.
- Slow down. Take a deep breath or three. Be a little gentler with yourself, it’s alright. Now: where do you feel the stuck?
- Consider how (insert someone you imagine would totally not be stuck with this) might handle it.
- Bonus: if you know them, you could ask how they would handle it.
- Bonus bonus: ask if they have ever gotten stuck on something like this.
- That one isn’t necessarily to unstick you, just to make you feel better. Which might also unstick you. Because hey: either they have gotten stuck on something like this, which should encourage you for obvious reasons, or they haven’t, which confirms your beliefs about the world and also hopefully they told you what they would do which might unstick you.
- Bonus: if you know them, you could ask how they would handle it.
- If you were reporting your status on this at the end of the day, what would be the most concrete evidence of progress?
- Pick a small experiment to do that could tell you whether one potential direction has promise.
- Why are you trying to do this particular thing? Perhaps this thing is not the best way to achieve that broader goal.
- My favorite way of solving a programming problem is to realize I don’t need to write the code after all.
- Can you convert a complex task into a few simpler ones?
- This is my favorite trick for machine learning tasks. I stole it from my boss. Everything can be a ranking problem if you try hard enough.
- Get to a shitty end-to-end version first, then make it good after you have initial results.
- Every time you hit a snag along the way, pick the simpler, more direct solution.
- What would you need to understand or know to be able to pick a step forward? Figure out how to get that.
- Tell someone sympathetic that you are stuck, and then ask for help.
- Tell someone who’s contractually obligated to aim for roughly the same outcomes that you admire their expertise, and then ask for help.
- What could go wrong? How much does that matter?
- Write down all your options. Find ways to eliminate options so you can stop thinking about them.
- If you can only think of one option, let your brain get wiggly and see if you can come up with at least 10 more terrible ideas.
- Pare down to a simplified, toy version of the task and see if you can solve that first. You can make it more complicated after that.
- How have you solved similar problems in the past? Has someone else done a similar project recently?
- Dance break!
These are, as you may have guessed, often useful beyond just solving product and programming problems.
(Though for the record I did not deploy all of these today.)
:x One bigger thing
I got myself unstuck recently by deciding that yes, small atomic easily-reviewable PRs are great and all, but this was a big cross-cutting feature and shipping small slices of it made the user’s experience suck. So I backed out of my step-by-step plan and dove into a big, gnarly, long-lived (it ended up only being 10 days) feature branch that shipped not just two circles but the entire rest of the fucking owl.
It was great! I was immediately unstuck, I could get high-quality feedback on the experience, and I’m really proud of the feature.
…but do not tell your engineering manager I told you to make bigger less reviewable PRs.