March 28, 2023

You grinded LeetCode, nailed the interview course of, and obtained an internship at an incredible firm. Congrats! However now it’s week three of your internship, you don’t have any concept how something works, and also you’ve written one line of code previously two days.

How do you ask for assist? Whom do you ask for assist? Must you even ask for assist?

Working at Slack, I discovered that realizing tips on how to navigate these conditions and unblock your self is important to having a profitable internship. Studying tips on how to study usually felt extra vital than studying the technical materials itself.

Background

  1. I’m going into my final 12 months on the College of Virginia, majoring in Laptop Science
  2. Earlier than Slack, my solely work expertise was at a small startup the place there was just one different iOS engineer; this summer time was a totally new expertise for me.

 

My venture

  • I interned on the iOS Software Infrastructure staff. My venture centered across the Mentions tab (also called the Actions tab)
  • I used to be tasked with altering the info supplier for the Actions tab
    • Earlier than: information refreshed from an API name triggered by guide pull down, or 60 second timer
    • After: use incoming WebSocket occasions with message information to replace the display, as an alternative of ready for the subsequent API name

The primary a part of my venture centered round including listening for updates to message fashions related to current actions. The technical a part of this venture was not that tough by itself. It nonetheless took me round half of my internship, although, as a result of I used to be familiarizing myself with the codebase and — extra importantly — studying tips on how to study.

The second a part of my venture concerned including a brand new information supplier that streamed all actions from WebSocket occasions, after which mixed it with the prevailing information stream. This was a a lot tougher activity than the primary half, however as a result of I had discovered tips on how to unblock myself, the whole lot went rather a lot quicker; I used to be by no means caught for that lengthy.

Hopefully, a few of the issues I discovered this summer time may help future interns get to that time earlier of their internship!

When to ask for assist

Step one to realizing when to ask for assistance is studying that the trade is a totally totally different world than college . There isn’t any dishonest, there aren’t any particular person grades, there aren’t any checks. Every part, particularly at Slack, is collaborative. If it’s going to take you two days to repair a bug, however one other engineer can let you know what’s fallacious in two minutes, you ask for assist.

An important query to ask your self when deciding whether or not to ask for assistance is:

Will I study something from spending extra time on this?

Your job as an intern is to study as a lot as you possibly can. Typically, you’ll study rather a lot from taking the time to step by means of an issue. Different instances, you would possibly waste a complete day within the debugger on a easy drawback that may be solved with a one-sentence clarification out of your mentor.

Varieties of issues you shouldn’t spend vital time tackling by yourself:

  • Formatting
  • Syntax
  • Which perform to name to get a sure sort of knowledge

Varieties of issues you would possibly need to spend a while tackling by yourself:

  • How a perform you’re calling truly will get the info you want
  • How modifications within the state of part of the app get mirrored within the UI

The important thing distinction between these two forms of issues is the distinction between data and understanding. It is best to solely spend the time to step by means of an issue by yourself if doing so will depart you with a greater comprehension of how issues work.

Even when approaching issues by your self may help you study, typically you continue to would possibly need assistance from another person to maneuver ahead. That is completely superb! Apps like Slack are extremely sophisticated, and interns will not be anticipated to have the ability to perceive the whole lot by themselves. So long as you ask for assist in the best approach, there’s nothing fallacious with it.

Learn how to ask for assist

Ask questions which can be easy to reply.

If you happen to’re asking a knowledge-based query, that is fairly straightforward as a result of there’s usually one easy reply. For instance, it is a query I requested at first of my internship:

When you find yourself blocked on a extra sophisticated drawback, asking the best query turns into rather a lot tougher. I positively had bother making an attempt to seize the complexity of issues whereas nonetheless offering a simple approach for another person to reply.

Step one that helped me was merely spending time making an attempt to know the issue. If you happen to perceive 95% of the change you’re making an attempt to make, clarifying that final 5% is rather a lot simpler for another person to do than stepping by means of the complete course of. In my expertise, individuals are very keen that can assist you if it’s clear that you just’ve frolicked gaining understanding of the methods you’re working with earlier than asking them for assist. Typically, you’ll even reply your individual query within the technique of making an attempt to know the issue!

If you happen to nonetheless need assistance after making an attempt to achieve an understanding of the issue you’re engaged on, the subsequent step is to supply as a lot context as you possibly can when asking your query.

This will contain describing:

  • What you perceive about the issue
  • What you don’t perceive about the issue
  • What you’ve modified
  • The anticipated conduct vs. the precise output

As a substitute of claiming one thing like, “I’m having bother implementing <function>, are you able to assist?” say one thing like, “I attempted utilizing <perform> to implement <function>, however as an alternative of <anticipated conduct>, <precise conduct> is going on. Do you’ve any concept tips on how to method this?”

One other technique for unblocking your self is pair programming or calling with somebody in your staff. I’d positively advocate doing this as a lot as doable, particularly to your tougher issues.

Whom to ask for assist

At my final internship, my supervisor was additionally the one different iOS engineer on the firm. In different phrases, in 99% of conditions the one individual I requested for assist was my supervisor. This summer time, I discovered myself on a staff of 14 individuals, all with data in numerous areas. It was not easy to know whom to ask for assist.

What I discovered:

  1. Don’t be afraid to ask for assist in a channel. If you happen to don’t know who to ask, it’s a lot better to ask in a public channel than to DM half of your staff till somebody may help you.
  2. Don’t be afraid to ask your mentor or supervisor whom they assume it is best to ask.
  3. If somebody helped you with a sure space earlier than, don’t be afraid to ask them for assistance on the identical subject once more.

Evaluating two examples

Let me offer you two examples from this summer time. The primary one is a state of affairs the place I ought to have requested for assist earlier however didn’t. The opposite is one the place I efficiently took time to know the issue earlier than asking for assist.

State of affairs 1

This case is from the very starting of my internship. For context, in Slack’s iOS app there are totally different information fashions for a Message and an Exercise (aka a message that mentions you or a response to your message). For every Exercise, we now have an related id that appears one thing like:

<channelId>_<timestamp>_<sort>

I used to be making an attempt to vary the actions information supplier to pay attention for updates to any messages related to actions. Messages even have a id, so I added a stream of Message fashions with the identical id as the present Exercise fashions. Unexpectedly although, the stream wasn’t returning any Messages. I stepped by means of the debugger for some time and ultimately noticed that in different components of the app that used MessagesDataProvider, Message ids appeared totally different; all of them had no sort and simply appeared like:

<channelId>_<timestamp>

I wasn’t positive if this id discrepancy was from a mistake I had made when making native modifications to Message information, or if it was as a result of ids are totally different in Actions and Messages. At this level, I ought to have merely requested, “Are Exercise and Message ids totally different?” to see tips on how to method this drawback. As a substitute of asking a clarifying query, I jumped straight into discovering an answer. I ended up utilizing one other Exercise subject messageIdentifier because the ID to stream Messages, which appeared to work.

The issue was that as a result of I by no means requested a query, I didn’t actually perceive why the ids had been totally different, though it appeared I had discovered an answer. In a while, I ran right into a bunch of issues as a result of after I began creating Actions from Messages, I copied all of the Message fields, together with id! This brought on issues with duplicate actions, as a result of I used to be writing the identical Exercise with two totally different ids (one with the kind, one with out).

It seems, as you could have guessed, that Exercise and Message ids are simply formatted in a different way and I wanted to transform between the 2. I ultimately clarified this by asking somebody. Nonetheless, I’d have saved myself hours and hours of time if I had merely requested this query as quickly as I noticed the id discrepancy. This was a data-based query and never an understanding-based query, so I ought to have requested as quickly as I wanted clarification. I’m glad this occurred in direction of the start of my internship, as a result of I used to be capable of study from it and be extra keen to ask data based mostly questions sooner or later.

State of affairs 2

This case comes from midway by means of my internship. I had simply completed the primary a part of my venture and was beginning the second half: including the power to stream Actions created from a distinct supply (WebSocket occasions) than we usually do.

Primarily based on a suggestion from my supervisor, I took a complete day simply to put in writing a doc that defined precisely how information flows from the community request that returns actions to the UI within the mentions tab. Doing this gave me an immensely higher understanding earlier than I began the issue. As soon as I did begin, I spent a couple of days implementing a fundamental answer that appeared to work from my checks. It was at this level, after gaining some understanding of what I used to be altering, that I requested for assessment on my modifications.

The PR assessment got here again, and it turned out that I did it utterly fallacious. Nonetheless, as a result of I had a strong understanding of the system, I instantly requested for assist and joined a Huddle with two workers engineers on my staff. We mentioned one of the best ways to method the issue; it turned out that I needed to write a brand new information supplier for the actions tab that mixed a stream of actions from the final API name with a stream of actions filtered on the final timestamp of the opposite stream.

This one Huddle in all probability saved me weeks of time that I’d have spent if I had tried to simply sort out the issue and create an ideal answer by myself. Nonetheless, if I had requested for assist earlier than I understood the issue, I wouldn’t have been capable of achieve a lot from the decision.

The takeaway from this example is that it is best to attempt to discover the candy spot of asking for assist: it is best to perceive sufficient that different individuals can effectively enable you, but in addition ask early sufficient that their assist saves you time.

Massive takeaways

Studying tips on how to work within the trade is as vital, if no more, than studying the technical aspect of software program engineering. I additionally discovered myself rather a lot much less burdened after I turned extra comfy asking for assist. As soon as I turned comfy, I felt like far more of a staff member than a person engineer and had much more enjoyable day-to-day.

My closing recommendation is simply to get pleasure from your time as an intern! Twelve weeks flies by and it truly is such an superior alternative to be an intern at Slack. I’ve had an incredible summer time and I hope any future interns studying this can too!

In case you are eager about engaged on Slack’s cellular apps, try our open roles! Apply now