The start of any internship brings a wide range of emotions, from excitement to nervousness. After months of anticipating our first day at Slack, reality sunk in that this summer would be extremely different from any other. Due to the pandemic, our entire experience would be virtual.
As the two interns for the Product Security Foundations (PSF) team at Slack, interning virtually gave us an opportunity to exercise our communication, collaboration, and technical skills. From the first day, the support from everyone at the company was evident; they wanted us to know that we were meant to be at Slack.
🖥 Diving into a distributed company
Normally our internships would have started with us moving to a new city, commuting to a new office, and walking into a new building for what might be the first time. This summer though, all we had to do was sit down in our own houses and click “Join Meeting.” The first week of our internships consisted of the usual — setting up our computers, learning the language we were going to use, learning about our project, and of course, lots of introductions. For us, however, it all happened in an unusual manner — through Slack and Zoom. Using Slack for the onboarding process was unique as it helped us learn new ways of using the platform that we’d be working on (as well as proper Slack etiquette). Despite packed calendars, it was easy enough to hop between meetings as needed without having to worry about how long it would take to get to the next meeting room because all we needed to do was click a different link.
The onboarding sessions fully prepared us to start working at the end of our first week, but the highlight for us was the time to just interact with the other new hires. One would expect it to be hard to meet people for the first time while sitting on a Zoom call, but all the opportunities provided to us — and the times when we scheduled our own intern hangouts — made the whole onboarding process enjoyable. Throughout the first week, much of the uncertainty of what a virtual internship would be like was washed away as we acclimated to the routine of joining meetings and working independently.
- Jake’s Onboarding Tip: Don’t be afraid to hop into, or put together, hangouts with the other new hires.
- Nikita’s Onboarding Tip: Looking at the busy calendar the first week can be a bit overwhelming, but having my calendar linked with Slack for notifications before meetings start has been super helpful.
Meeting the Team
The week before Nikita started, we hopped on a Zoom call with our mentors and Suzanna, the senior manager of the Product Security Foundations (PSF) team. From the get-go, they were super welcoming and excited to teach us about our project. On each of the first days, we had 1-on-1 meetings with Suzanna to go over the onboarding documents that she put together for us. These contained relevant information about Slack, PSF, our roles as interns, what to expect for the summer, and what was expected from us. Having access to this information made getting acquainted with the company and the team easy, and the documents have guided us throughout the summer. She also put together a welcome lunch for us to meet the entire team. After a round of introductions, we already started feeling like part of the team as we learned more about everyone, such as what they’re working on, which flavors of La Croix are superior (the obvious answer being Coconut), and their least favorite t-shirt brand. Even though we haven’t had the opportunity to meet anyone on the team face-to-face, we still developed professional and personal relationships through coffee chats, playing virtual games together, daily stand ups, 1-on-1s, and our not-so-secret Secret Intern Meetings.
- Our Meeting-the-Team Tip: Similar to onboarding, take some time to just get to know the other members of your team in a non-work related way. For example, one of the first things we did when we started working was setting up 1-1s with the rest of our team. Throughout the summer, we also had team social hours over Zoom with various online games.
👊Having a technical impact
As part of the Product Security Foundations team at Slack, we were given the opportunity to dive deep into the technical aspects of security, by developing a new library. Meeting the goals of our team and delivering a solid technical product was crucial in order for us to have an impactful internship.
In our first meeting, Nikita and I were introduced to a problem that security teams aim to prevent: Cross-site scripting (XSS) attacks. These occur when an attacker injects and executes malicious code into our own HTML or CSS code in an attempt to retrieve sensitive information. If an unwitting user sends a link in a Slack message, and if the HTML is not already properly sanitized, an embedded script tag written by the hacker could execute within the channel during the unfurling process, allowing them to run an attacker-controlled script in other users’ browsers. Slack’s Product Security team already had a solution to this — an HTML sanitization service. We were tasked with creating a better solution to this problem, a standalone HTML sanitizer in Hack, that would allow us to remove our dependency on a third party library in favour of a library that would live directly on webapp, our monolith application repo containing both backend and frontend code for Slack.
Thus the beginning of our summer was dedicated to learning how an HTML sanitizer works, while the later part was dedicated to developing one. The start of the investigation process for the project posed a new challenge: In order for us to be successful, Nikita had to first create a roadmap for the project and scope various design choices.
Learning how to ask for help is a key part of any internship experience. Even in a non-virtual setting, figuring out who and when to ask for help can be quite difficult at first. With our team’s guidance, we were quickly able to reach out to specific people for more targeted help. Reading documentation and perusing Github repositories of past projects with similar infrastructure were two helpful approaches. Not only did this give us knowledge about specific technology and tools we might need, but also gave us access to people in the company we can reach out to — all of whom were very willing to help us during the summer!
Communication is an essential part of any software development process, but effective, clear, and concise communication is especially important when it comes to distributed development. When messaging back and forth over Slack, we had to learn how to be direct with what we were saying without skimping out on important details. Some tips for clear and effective communication include removing fluff, using the proper jargon, asking specific questions, and linking important information (such as other Slack posts, repos, or websites).
Each of us being on opposite sides of the country might have hampered our progres. Thankfully — due to effective communication and proper planning — the three-hour time difference between the two of us (Jake is in Upstate New York while Nikita is in the Bay Area) did not impede our project pace. In the five overlapping hours when we were both working, we hopped on Slack channels and Zoom calls to discuss what work we needed to do, how to go about implementing classes or functions, and what was going wrong while debugging. When only one of us was working, we could reach out to each other before or after business hours using Slack.
Overall Technical Impact
Despite being virtual, we were still able to leave an impact on Slack since this project lives in and is used by its codebase. Due to the fact that we no longer need to make extra calls to external libraries, our library is able to handle a larger volume of requests. In fact, implementing it directly in webapp also means that this additional volume gain does not come with the need to scale or manage the sanitizer itself as a service external to the Slack codebase.
Another benefit of our work here is the insight we gained from the library. This gave us more insight into how the library is structured, how it works, and why it works. The knowledge gained and documented is important because it will allow future engineers to understand what needs to be done to support more unfurl types securely.
We didn’t expect to intern as part of a fully distributed team, but we were always amazed at the level of support we received to ensure that we could carry out this project, all while still feeling integrated into the team. Even with having to work across different time zones, this virtual internship went smoothly.
The best part about all the lessons learned from interning virtually is that they are directly transferable to in-person workplace settings as well. Being willing to jump into conversations with other co-workers, whether it be for an in-person coffee break or a video call, can help build lasting relationships. Taking time to figure out the best person to ask questions on certain topics will improve efficiency. Improving the effectiveness of your communication is not only important in a virtual world, but it’s also important in face-to-face communication.
We obviously wish we could have been in the office to meet everyone in person, but in the end we’re just thankful that we were still able to work at Slack. With all that we were able to achieve, learn, and enjoy throughout this summer, this internship is going to be one that we’ll remember forever.
🎉 Special thanks
We wanted to give a special thanks to our manager, Suzanna Khatchatrian, and our mentors Oliver Grubin, Jack Wilson, and Chenkai Gao – as well as everyone else we interacted with – for supporting us during our internship and making summer at Slack great.
👋 We’re hiring!
Ready to help Slack solve tough problems? We’re hiring for summer 2021 internships! Check out the roles and apply today.