April 24, 2024

You grinded LeetCode, nailed the interview course of, and acquired 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 up to now 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 the way to navigate these conditions and unblock your self is crucial to having a profitable internship. Studying the way to study usually felt extra vital than studying the technical materials itself.

Background

  1. I’m going into my final yr on the College of Virginia, majoring in Pc 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 season was a very new expertise for me.

 

My undertaking

  • I interned on the iOS Software Infrastructure staff. My undertaking centered across the Mentions tab (often known as 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 undertaking centered round including listening for updates to message fashions related to current actions. The technical a part of this undertaking 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 the way to study.

The second a part of my undertaking concerned including a brand new information supplier that streamed all actions from WebSocket occasions, after which mixed it with the present information stream. This was a a lot more durable activity than the primary half, however as a result of I had realized the way to unblock myself, all the things went lots quicker; I used to be by no means caught for that lengthy.

Hopefully, a few of the issues I realized this summer season might 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 business is a very totally different world than college . There isn’t any dishonest, there aren’t any particular person grades, there aren’t any exams. 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.

A very powerful 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. Generally, you’ll study lots from taking the time to step by means of an issue. Different occasions, you would possibly waste a complete day within the debugger on a easy downside that may be solved with a one-sentence rationalization out of your mentor.

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

  • Formatting
  • Syntax
  • Which operate to name to get a sure kind of knowledge

Sorts of issues you would possibly wish to spend a while tackling by yourself:

  • How a operate you’re calling really 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 sorts of issues is the distinction between information 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 might help you study, generally you continue to would possibly need assistance from another person to maneuver ahead. That is completely superb! Apps like Slack are extremely difficult, and interns are usually not anticipated to have the ability to perceive all the things by themselves. So long as you ask for assist in the proper means, there may be nothing fallacious with it.

The right way to ask for assist

Ask questions which can be simple to reply.

In case you’re asking a knowledge-based query, that is fairly straightforward as a result of there may be usually one simple reply. For instance, it is a query I requested at the start of my internship:

When you’re blocked on a extra difficult downside, asking the proper query turns into lots more durable. I positively had bother attempting to seize the complexity of issues whereas nonetheless offering an easy means for another person to reply.

Step one that helped me was merely spending time attempting to grasp the issue. In case you perceive 95% of the change you’re attempting to make, clarifying that final 5% is lots simpler for another person to do than stepping by means of the whole course of. In my expertise, individuals are very keen that will help you if it’s clear that you just’ve frolicked gaining understanding of the programs you’re working with earlier than asking them for assist. Generally, you’ll even reply your individual query within the technique of attempting to grasp the issue!

In case you nonetheless need assistance after attempting 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 may 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 <operate> to implement <function>, however as an alternative of <anticipated conduct>, <precise conduct> is going on. Do you will have any concept the way to strategy this?”

One other technique for unblocking your self is pair programming or calling with somebody in your staff. I might positively suggest doing this as a lot as attainable, particularly on your more durable 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 particular person I requested for assist was my supervisor. This summer season, I discovered myself on a staff of 14 folks, all with information in numerous areas. It was now not simple to know whom to ask for assist.

What I realized:

  1. Don’t be afraid to ask for assist in a channel. In case you don’t know who to ask, it’s significantly better to ask in a public channel than to DM half of your staff till somebody might help you.
  2. Don’t be afraid to ask your mentor or supervisor whom they suppose it’s 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 season. The primary one is a scenario the place I ought to have requested for assist earlier however didn’t. The opposite is one the place I efficiently took time to grasp the issue earlier than asking for assist.

Scenario 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, now we have an related id that appears one thing like:

<channelId>_<timestamp>_<kind>

I used to be attempting to vary the actions information supplier to hear 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 finally noticed that in different components of the app that used MessagesDataProvider, Message ids appeared totally different; all of them had no kind and simply appeared like:

<channelId>_<timestamp>

I wasn’t certain 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 the way to strategy this downside. As a substitute of asking a clarifying query, I jumped straight into discovering an answer. I ended up utilizing one other Exercise discipline 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. Afterward, I ran right into a bunch of issues as a result of once I began creating Actions from Messages, I copied all of the Message fields, together with id! This prompted 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. Nevertheless, I might 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 information-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 in a position to study from it and be extra keen to ask information based mostly questions sooner or later.

Scenario 2

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

Based mostly on a suggestion from my supervisor, I took a complete day simply to write down 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 just a few days implementing a primary answer that appeared to work from my exams. 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 fully fallacious. Nevertheless, as a result of I had a strong understanding of the system, I instantly requested for assist and joined a Huddle with two employees engineers on my staff. We mentioned one of the simplest ways to strategy 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 most likely saved me weeks of time that I might have spent if I had tried to only deal with the issue and create an ideal answer alone. Nevertheless, if I had requested for assist earlier than I understood the issue, I wouldn’t have been in a position to achieve a lot from the decision.

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

Large takeaways

Studying the way to work within the business is as vital, if no more, than studying the technical aspect of software program engineering. I additionally discovered myself lots much less confused once I grew to become extra comfy asking for assist. As soon as I grew to become comfy, I felt like far more of a staff member than a person engineer and had much more enjoyable day-to-day.

My remaining recommendation is simply to take pleasure in 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 season and I hope any future interns studying this can too!

If you’re excited about engaged on Slack’s cell apps, take a look at our open roles! Apply now