Getting unstuck: the underrated skill of asking for help
Here’s the most common way people start a question about their Cloud Resume Challenge project: “Is it cheating if I …?” (…use a static site generator, look at someone else’s code repository, work on the challenge with a friend, etc, etc.)
I try to help those people understand that this is the wrong way to frame the question. “Cheating” is a concept from school. We are not in school here.
The goal of the project is to learn, so if your approach to solving the Cloud Resume Challenge is to copy and paste someone else’s project without deeply understanding what you are doing and why, then the only person being cheated is you. You will not have interesting stories to tell in a job interview; worse, you will not find out if cloud building is really something you enjoy.
But assuming you are approaching the challenge in good faith, I would not be too worried about consulting existing resources like blogs, tutorials, and other challengers. In fact, figuring out how to make appropriate use of help is one of the most valuable - and underrated - skills you can hone through this project.
Again, we’re not in school here. In the professional world of IT, there are no bonus points for cloistering away in an ivory tower and figuring out a difficult problem all by yourself. You will likely be working on a team made up of people with different strengths and weaknesses, and your primary goal will be to solve problems quickly and adequately, rather than individually. That means strategically leveraging the help of teammates or internet resources who may know more than you.
But other people’s help is a constrained resource; they don’t have unlimited bandwidth to assist you, and in fact will be significantly MORE likely to lend a hand if you have done some investigating on your own. (We might call this the “God helps those who help themselves” model of debugging.) So knowing when and how to escalate a problem is critical.
Let’s use the Cloud Resume Challenge as an example scenario to walk through how we can practice proper asking-for-help skills. Suppose you’re trying to get the visitor counter working on your resume site, but when you refresh the web page, the counter does not update.
What NOT to do: The Well of Despair
The worst thing you can do in this situation is to just start changing random things in your code, or Googling broad queries like “Javascript fetch statement not working”. The responses to that search are probably not going to yield specific information that’s relevant to your problem. Keep going down this rabbit hole, and you’ll find yourself on the tenth page of search results, reading an unanswered Tom’s Hardware forum post from 2003. This is how you get Stuck with a capital S: at the bottom of a deep well, with no handholds or even a shaft of light to give you hope you might find a way out, as hours turn into days. It’s frustrating and demoralizing, both to you and (if you carry this style of troubleshooting over into a job) to your manager. Believe me, I know; I’ve been down that well myself.
Three steps to get back on track
To get out of the Well of Despair, you need a plan.
Set a time limit to get yourself unstuck
Recognizing when you’re really blocked, and that spending more time beating your head against the problem isn’t going to do any more good, is an important skill that comes with practice. In the meantime, it’s not a bad idea to set a timer: “If I can’t figure out why my visitor counter isn’t updating after 30 minutes, I’m going to ask for help.”
Within that 30 minutes, your goal should be to break down your big problem (my visitor counter isn’t working) into the smallest problem you can (I am getting this weird error message and I don’t understand what it means). Some basic troubleshooting steps to try:
- Get comfortable with the developer tools in your browser. Right-click in Chrome and click “Inspect”, and a whole new window on the world opens up to you. Your Javascript isn’t behaving? Look in the Console tab and see if an error message appears. Your CSS doesn’t seem to be applying to your HTML? Check the “Sources” tab and see if it really got downloaded from your CDN. Your API isn’t returning what you thought? Explore the “Network” tab and see what request you really sent and what response you got.
- Don’t gloss over error messages. I see lots and lots of questions in the Cloud Resume Challenge Discord server that boil down to “I got a stack trace; now what do I do?” Answer: read the stack trace! It looks scary, but most of it is just pointing you to the line of code that broke, and there will usually be an error message at that line explaining what happened. Is it saying something about authentication? Sounds like you have a permissions issue. Is it saying that the hash key you referenced doesn’t exist? Sounds like the object you’re working with doesn’t have the data you expected; you should log that object and find out what’s actually in it. Which leads to:
- Log like a lumberjack. In the world of serverless computing, you can’t SSH into a server; your window into what’s happening is limited to the logging statements you emit from your code. Log the contents of objects and the responses of API calls until you understand the behavior of your code.
- Shorten your feedback loop. If it takes 5 minutes to rebuild and deploy your code to the cloud every time you test a code tweak, you’re going to make slow progress. Look into setting up a local development environment for your code so that you can “fail faster”.
If the timer dings and you still haven’t made much progress on fixing the problem, then it’s time to…
Formulate a specific question
Here’s the wrong way to ask a question: “My visitor counter isn’t updating, can anyone help me?” That question wouldn’t get very good results if you typed it into Google, and it’s not going to inspire many humans to sit down with you and figure it out from scratch either. It’s too general. Instead, try a question like this: “My API returns 0 to the browser when I request the visitor count, but I can see the count updating in the database - here is my function code, can anybody see where the problem might be?”
That question has several good qualities:
- It describes what you would expect to see happening (the browser’s visitor count widget updating) versus what is actually happening (returning 0)
- It includes a couple of things you’ve already tried (checked the API response, checked the database), to help narrow down the source of the issue
- It gives enough context for someone to help (the function code), rather than asking them to guess.
I would suggest typing out your question two or three times before putting it in the CRC Discord server or messaging it to a friend, just to make sure it includes these attributes - and also because it’s hilarious how often just carefully writing out your question forces you to think through it systematically, which leads to you solving your own problem without needing to wait on anyone else.
If you find that you can’t express your question coherently - say, because your question is “how do I write Javascript?” - then it’s time to go back and do a little more learning, maybe run through a video course or a tutorial on the technology in question, before you tackle this problem.
Build relationships
The most reliable way of getting correct advice from strangers on internet forums is usually “being confidently wrong,” but the second-best way requires being a positive contributor to the community. Don’t be the person who always takes but never gives; stick around and answer other people’s questions too. It turns out that researching or troubleshooting someone else’s error is also a great way to learn - and great job practice, too.
Even if you do all these things, you may still occasionally find yourself staring into the Well of Despair. Google’s no help, your troubleshooting skills are maxed out, and nobody’s responding to your question in the Discord server. If that happens, I would suggest getting up from your screen, going outside, and delegating the problem to Tomorrow You. It’s amazing how revelatory a simple walk around the block can be.
Keep reading