For me, the biggest signal of a competent engineer is knowing when to ask for help. We've all been in a situation where we pick up a ticket and think we know what to do, only to fall down a rabbit hole. We waste hours or days (or weeks!) trying to figure out how to move forward. It happens, but a strong engineer can identify when they're spinning and need help.
Asking for help is a more efficient use of time than rabbit-holing, don't feel bad about doing it 🤗
Senior engineers often have a lot on their plate. But they should make time to unblock other team members and mentor early career devs on the team. If you ask someone on the team for help, you are not wasting their time.
Asking for help is a skill like anything else. The better you get at how you ask questions, the better your team and senior engineers will be able to support you–and the more quickly you will level up.
1. Check if the person has time to give
A good engineer should always be willing to help their team members. But they may have other priorities and deadlines to manage. Before jumping right into the problem at hand, check if they have time available.
Don't be discouraged if they ask to wait a few hours or to schedule time the following morning when their calendar is free. They want to give you their undivided attention.
2. Provide context and goals
The person you're asking may not have all the information you do. They might be splitting their time between a few teams or projects. They may be juggling people management responsibilities with coding work. Or they may have forgotten what you were assigned at the beginning of the sprint.
Explain to them what you're working on and what your desired result is. Share project management ticket numbers (Jira, Asana, etc), link them to the repo or specific code files you are working in, and show them the UI for the feature you are troubleshooting.
The more context you can provide, the quicker they'll be able to understand what you're working on and help.
3. Share what you've already tried
You've probably spent time debugging and troubleshooting on your own before you realized you needed help. Share what you tried and why it didn't work with the other person. This helps so they don't make the same suggestions. It can also help you rubber duck the problem and might spark an idea of something else to try. You can practice your technical communication skills while testing your understanding of why certain solutions didn't work.
Sharing paths you've already taken can lead to a productive discussion that gets you to a working solution faster.
4. Ask a specific question
After you've provided context for the task at hand and shared what you've tried already, ask a specific question. Sometimes this can be hard if you're really lost. In that case, explain what confuses you. But if you can end with a specific question, you can direct the discussion.
As devs, we sometimes want to fix all the things. But if you've been doing a lot of trial and error, the code might be messy (and that's ok!). A specific question narrows the other person's focus to just what you're trying to solve. This leaves you space to handle the rest on your own if you want. And if you do want help on cleaning up your code, nothing is stopping you from asking more specific questions :)
A specific question might be, "I can see that the parameter to this function is correctly formatted. But then these 3 lines of code do something I don't quite understand. And the variable is misformatted afterward. Can you explain what these 3 lines are doing?"
Or, "I have a database query that is running really slow and causing API timeouts. I've checked that I have a composite index present on the relevant columns so I'm confused. Does column order matter in a composite index?"
Asking questions in this way demonstrates your understanding and improves your communication skills. Even asking questions when you're stuck is an opportunity to level up your software skills!