Ah, one of the most scary parts of the internship but also probably the most important!
Ask lots of questions! Ask questions! Did I mention yet that you should ask people questions?
Especially at first, since you probably don't know how most things work yet.
Who do you ask?
Often you'd ask your supervisor, but it's also common for people to ask questions to the #engineering slack channel (or wherever the online-chat place is with people who'd know the answer). If you have 1:1s with your supervisor you can also ask questions then. If you don't, I'd suggest to try to set them up. I also like to ask every week if I'm asking too many questions or not enough, and if they're good questions and get advice on that.
What to ask?
Anything! There's no such thing as a stupid question. There's tons of things worth learning about at any company: the business, the team dynamics, the history, the tech stack, etc.
Most companies will have internal documents. These may be guides, how-tos, design documents, reports, etc. They might be stored in a wiki, some shared document repository like Google Docs, Dropbox Paper, Quip, etc. It's worth combing through them to learn as much as you can while you're there, and as a way to find interesting things to ask. Don't rely solely on those documents to learn though, ask questions to other employees even if you've probably seen the answer in the docs. Oftentimes, written docs might be out of date, lack some essential context, hide the fact that people disagreed on the issue, etc.
How many questions is too much?
This is a trick question. I don't think there's such thing as too many questions. It's more about:
- Are you asking questions too often? Some people are happy being asked things all the time, others would rather you acquire a short list and then ask them all at once and only a few times a day (that way they can focus on their own work as well as helping you out)
- Are you re-asking questions? If you asked something before and didn't take note of the answer and are asking again, that's annoying for the people you're asking. Try to keep track of what people are teaching you (write stuff down!) Of course sometimes things will slip your mind, but if you find yourself re-asking a question make sure to write down the answer that time at least
- Could you have just Googled it? Classic problem. Remember, when you ask people questions you're using their time. And they're usually happy to help you if you need the help. But if you could have found the answer easily by Google searching the error message or term you're trying to define or whatever, then you really shouldn't ask. Always look around a bit first. Some questions you can't find answers to on Google but you can find by searching company forums or documentation, so try that too if you know where those are (and if you don't... ask!)
- Could you have used standard debugging/code searching tricks to figure it out? If you don't know these yet, then ask someone to help you. But notice what stategies they use to figure it out. Next time you have a problem, those same strategies might help.
- How long will it take for them to answer your question? This is often unknown. But try to think of how much questions will bother other ppl vs benefit you. Some quick questions are a small amount of time on their part and a huge benefit to your comfort and ability.
When to ask?
Sometimes, engineers need concentration and are in the middle of working. Wearing headphones can be a signal of that, but lots of people just like to listen to music and are fine being tapped on the shoulder, it varies by individual. Generally, technical questions that are essential for you to do your job are appropriate to ask at any time unless the engineer is really busy. Sending an email or instant message is often the way to go since it allows people to finish what they're in the middle of before answering your question.
Rudi: Lunch time tends to be a great time to ask more general questions, since people aren't focused on their work. It's a great way to get to know people, to hear their personal stories, to learn tidbits about the company, etc. There's a networking benefit to it, and a personal growth benefit to it from getting to know your coworkers better. Not every single lunch will yield something interesting, and you might not always feel like mingling - sometimes I don't feel like chatting. However, consider giving it a try, especially at the beginning of the internship. During my first internship, it didn't occur to me to make an effort, and I definitely missed out on a lot.
At what point of trying to find the answer should you ask?
- I remember an intern telling me once that he'd been stuck on something for a week now and barely made progress, but he didn't want to ask for help. That's ridiculous to me.
- If you have no idea how to find the answer (and you've tried to figure it out for a little bit) you should ask. At some point, you're just sitting around and not doing anything at all and that doesn't help anyone
- If the problem is stopping you from moving forward and you have no idea what to do next (this is a terrifying thing for me still) - ASK SOMEONE
- You should come up with a standard with your supervisor/mentor - often I've been told that if I've been stuck and making no progress for 20-30 minutes, then I should ask for help
- One helpful tip I've been given is to write down all the things I tried in those 20-30 minutes, so that when I ask someone for help they both (1) know what I've tried and learned about the problem, so they don't retry those things or refigure out anything (2) know that I've actually given the problem a solid attempt
- Remember, the faster you learn what's up and how to do stuff, the more good work you'll do
How to learn from the questions you ask
If you ask good questions and learn from them, you can eventually ask less (or at least, more experienced) questions.
When you don't know how to figure something out and have to ask someone, also ask how they would have found the answer if they were you - maybe you'll learn about some good company resource for answering questions, or learn how to Google something more effectively.
Good things to ask questions about
You're trying to learn two main things (and they overlap):
how the code works and all the software
- what tools/technologies are used?
- what are the style guidelines? are there standards for how to write pretty code?
- how much testing should you add and how is that done?
- how fast should you be finishing things? how much of a perfectionist (at the cost of time) should you be?
- how does code get from being written to being live in the product?
- how are bugs reported?
how people work
- what things do they talk about? what are their social norms?
- do they talk in person? or over slack?
- do they like it quiet? do they like to be undisturbed and only talk at lunch?
Note that interns often get a lot of love for how they question things and bring in new energy, so don't be afraid to be you and be something different from what everyone else does. ...but there's some balance in that you want people to like you and enjoy working with you. So you want to fit into their social norms but also challenge them shrug :p