Spend Less Time Being STUCK
Published: 2020-12-21 16:18:21

**Spend less time being STUCK**: We software developers get "stuck" at times.  I personally don't enjoy the experience.  As I reflected on this problem, I realized that there must be strategies I could use that would reduce the amount of time I spend being stuck and thereby increase my productivity.  After doing some research on this topic (links at the bottom of the page), I found the following solutions:
1. Prevent getting stuck in the first place:
  - Analyze requests to break them down into tasks that can be assigned to time boxes.  Time-boxing provides a signal (task takes more time than expected) as to when you are probably stuck.  The sooner you realize you’re stuck, the sooner you can take action to get unstuck.
  - Diagram the problem: Do you understand the logical flow of what you are trying to do?  Can you diagram it out?  
  - Pseudo-code: Did you plan out the algorithm in detail in plain English before diving into the code?  
  - Avoid self-sabotaging habits that increase chances of getting and staying stuck:
      - multi-tasking (lack of focus)
      - randomly choosing work (lack of prioritizing)
      - randomly attacking work (lack of planning hours of the day)
      - pet projects (lack of focusing on customer request)
2.	Recognize that getting stuck is a learning and growth opportunity.  You are about to learn something and be a better developer as a result.
3.	Read the error carefully. Very often the answer is in the error message.  
4.	Check for the obvious errors:
  -  Typos
  -  Wrong types (string instead of “string”)
  -  “=” instead of “==”
  -  Missing brackets
5.	Verbalize the problem: (aka the Rubber Duck method).  Put into words (out loud) in layman’s terms: what am I trying to do?  How am I trying to do it?  What is happening instead?  What evidence do I have that I should expect the intended result?  
6.	Break the problem down: sometimes we get overwhelmed by the many moving pieces.  If we break the problem down into pieces, we can efficiently fix/test/build each part in sequence until we have a solution.  
7.	Knock out the easy parts: If there’s a portion of the problem that you’re good at and know how to do, go get that part done now.  The success can help relieve frustration and clear your mind.  
8.	Refocus on the customer’s original request: Ask myself, 
  -  “Am I down a bunny trail… or focused on the original request?”
  -  "Have I inadvertently added to the scope of the request… or am I focused on the original request?”
  -  "Have I gotten caught up on one particular solution… or am I focused on the intent behind the original request?”
9.	Simplify: Ask myself, 
  -  “Is there a simpler way to accomplish this?”
  -  “Am I trying to boil the ocean?”  (I.e., trying to make the end-all-be-all solution to solve everything instead of focusing on a practical, simple solution)
10.	Name the mystery: Oftentimes when we get stuck it is because we are making use of a tool/technology/language that is new to us.  What “black box of ignorance” might you be running into?  What do you need to research up on in order to fill in the black box with knowledge and understanding?  (E.g., “what is an SSH key anyway?”)  
11.	The usual strategies: (print statements, log reading, googling error messages, Stack overflow posts, asking colleagues, taking a break.)  

And most importantly: **Pray for understanding**: “If any of you lacks wisdom, let him ask God, who gives generously to all without reproach, and it will be given him.” (James 1:5)  Don’t believe me?  Try it.  

Some helpful links I found:
https://www.youtube.com/watch?v=h01U6uDhNk4
https://hackernoon.com/5-steps-in-programming-to-keep-you-from-getting-stuck-g52f233gb
https://codewithoutrules.com/2016/12/08/how-not-to-get-stuck/
https://www.freecodecamp.org/news/how-to-get-unstuck/