The Perks of being a Junior Engineer at Slack

I joined Slack in late October 2015 as an Associate Application Engineer on the Enterprise team, which set out to build the recently released Enterprise Grid product. Full Disclosure — this was my first engineering job.

When I arrived at my desk on my first day, I tried to play down how star struck I was feeling. To my 1:00 sat Stewart Butterfield, right amongst the engineers. Behind me was Myles Grant, one of the most senior engineers in the company who, along with founders Cal Henderson, Serguei Mourachov, and Eric Costello wrote the majority of Slack in a legendary four-month sprint after the infamous pivot from Glitch. It was quickly apparent that I was being paid to work with and learn from a group of engineers who in addition to Slack collectively helped build Facebook, Twitter, Google, Yahoo, Flickr and more — products that have transformed the world.

I had just hopped on Slack’s rocket ship as the company was taking off on an exponential growth explosion. My emotions oscillated between awe and terror. At that point, it was anyone’s guess if I would be able to handle the job. Impostor Syndrome was breathing down my back. However, I was able to put together a plan to take advantage of the abundant resources Slack had to offer new employees. As a result, I’ve grown as an engineer at a similar pace.

A year later, I am now a technical feature lead for Slack’s Enterprise Billing products. In the last six months I’ve had the opportunity to design, build, and ship Slack’s Sales Tax and Dunning Systems, in addition to helping optimize Multi-Team Search for Enterprise Grid.

In sharing my reflections on why I accepted my offer to work at Slack, the steps I’ve taken to optimize direct and indirect mentorship, abundant opportunities for impact and growth, and a culture of learning that Slack has kept remarkably intact at scale, I hope you will take away some useful insights for you and your team.

Assessing a company’s commitment to mentorship

Hiring junior engineers is an investment for any business. I was applying to entry-level positions a little over a year ago. Every engineering organization I interviewed with promised mentorship. Makes sense — in an ideal world, all companies would invest in the opportunity to shape a fresh developer into their perfect employee. New talent makes up for inexperience with being green — free of bad habits, an eagerness to impress, a lack of opinion on spaces vs. tabs.

However, in reality, not every tech company has the bandwidth or desire to follow through on this undertaking. Mentorship is critical to every new engineer and has a significant impact on the careers of women and minorities. As I transitioned into the tech industry, I knew that a company’s approach to mentorship would affect my ability to thrive and grow as an engineer. And that’s what I was looking for when I accepted my offer at Slack.

Interviewing at Slack

The week Slack invited me to an onsite in October 2015, I had an expiring offer in hand and a few pending final round interviews at other companies. After weeks of tirelessly studying for technical interviews and mentally preparing for life in a notoriously cutthroat industry, Slack’s more human approach to the interview process came as a welcome relief and surprise.

In my final round interview in with Slack’s CTO, Cal Henderson immediately asked me a question I dreaded answering. He wanted to talk about my previous career in theater. Whenever someone asked me this, I knew the interviewer was trying to assess my potential liability. Hiring a former actress who taught herself how to code is undoubtedly on the extreme end of the risk spectrum. Offering me a job was a gamble for any company, let alone the recently crowned fastest growing SaaS startup in tech history. The outcome of this conversation was usually a pretty good gauge of a company’s commitment to mentorship and improving diversity in their engineering organization.

Thankfully, my answer went over smoothly. Cal and I talked at length about craftsmanship. He listened to me pitch my thesis that my years of studying ballet at a professional level would, in fact, make me a good engineer. I highlighted the little-known parallels between start-up life and the long hours and love of craft that drives professional actors in the face of endless rejections. I tried to make it clear that my presence in this interview was a culmination of two years of teaching myself to code after work while saving money so I could attend two different 12-week coding intensives. As crazy as it sounded, I had fallen in love with computers and was eager to learn, improve, and build software that had a real impact on the lives of others.

At one point, I could tell that he was entertaining the possibility.

“We’ll grow you as an engineer,” I remember him saying, as though the light bulb emoji had just appeared above his head.

At this point, I knew if I got an offer, Slack was a special place I’d be crazy to turn down.

A Culture of Learning

There is a big difference between a culture of academia and a culture of learning. What do I mean by this? Let’s be real; the tech industry is a workforce highly saturated by graduates with elite degrees. I’d like to limit the scope of what “academia” refers to in this post. Academia is prestigious because of its association with the noble cause of intellectual rigor and reason. However, too often individuals privileged with an excellent education confuse intelligence with aggressive arrogance. In an ideal world, the best ideas win, and everyone is happy. But when a workplace environment becomes a battle of the brightest mind, team and individual morale are too often undermined by people overcompensating for weaknesses with a series of tactics that directly or indirectly aim to make their coworkers feel stupid.

Anyone thinking of joining tech is reading these stories on the internet and preparing their mental health armor. I know I was.

Slack has defied my expectations of what it should be like to work in tech. While I tend to see the good in people, I have yet to come across an engineer who is not incredibly hardworking, talented, humble, kind, and eager to share their knowledge. When I first started working here, it was apparent that the engineers at Slack were not just hired for their talent, but for their demonstrated values of craftsmanship, courtesy, and empathy in their work and interactions with others.

When I’ve made mistakes, not once has anyone gone out of their way to make me feel stupid or incapable — and I think that says a lot in itself. Instead, I’ve been encouraged to develop a growth mindset.

A Holistic Approach to Thriving

In addition to hiring quality people, Slack has created the infrastructure to make sure their employees are thriving by continuously iterating on a holistic approach to employee development. In my first few weeks on the job, I researched what Slack had to offer and worked with my manager, mentor, and peers to assess how best to take advantage of these opportunities. Some examples include:

  • An opt-in professional development fund — you only get what you use to improve yourself, whether it’s taking a part-time class at Stanford or attending a conference.

I was able to use this to continue my education through the year by enrolling in a part-time UNIX/Linux systems course at UC Berkley and subsidizing my existing subscriptions to Code School and Treehouse. I built up a library of technical books on Linux, microprocessors, PHP, design patterns, and security and set up informal workshops with more experienced coworkers and mentors to work through the material.

  • An opt-in personal development fund — Slack will pay for you to take guitar lessons finally, but only if you take them.

Last year I used my funds to take cooking classes at San Francisco Cooking School and a few non-technical books recommended by Slack’s women’s group and the diversity reading club aimed at cultivating empathy among people with different lived experiences.

  • Weekly Brownbag Presentations — each week any individual can volunteer to give a lecture style presentation on a feature they’ve worked on, a new piece of technology, or anything in the spirit of learning and teaching something new.

All the presentations are recorded so even when I feel too busy to leave my desk; I try to make a point to either watch the recording live or revisit past presentations during my free time.

  • Non-technical workshops by individuals making the world a better place — past speakers include CEO of Crisis Text Line, The ACLU, The founders of online publication Mother Jones, former negotiation expert Chris Jones, and a former inmate turned entrepreneur from The Last Mile, to name a few.

By providing resources and opportunities for us to learn and make ourselves better engineers and citizens of the world, Slack has built a positive culture of learning.

Regular Meetings and Measurable Goals

Mentorship is a burden that is shouldered by senior engineers, and the engineering culture will affect the style and quality of the outcome. A successful mentoring relationship requires equal effort from both the senior and junior engineer. Clear communication, well-defined technical requirements, and regular meetings will only happen if both people invest. Luckily for me, it was apparent that Slack had already set expectations for engineering mentors:

  1. Set up a recurring weekly meeting
  2. Assign an explicitly scoped out project
  3. Be a resource for questions and an advocate for best practices related to design, architecture, and data structures
  4. Communicate the expected coding and documentation standards for Slack

Expectations around what it means to be a good mentee are rarely spelled out for junior engineers, but there are a few things I’ve found to be useful in my personal experience.

  1. Think about your strengths and shortcomings and have an idea of where you want to be in a year.
  2. Know your preferred communication style and share it with your manager.
  3. Have empathy for your manager — listen and be considerate of their preferred communication styles.

In the first meeting with my assigned manager, Leah Jones, now Head of Engineering for Enterprise, I tried to be as transparent as possible about my personal communication style, my perceived strengths and weaknesses, and my desire for direct constructive feedback. We worked together to establish an effective plan for supplementing my technical development throughout the year.

Additionally, Eric Vierhaus, a Senior Engineer on the Enterprise team, was assigned as my dedicated mentor. When Eric and I first met, I was very open about what I knew and didn’t know, and solicited his advice in creating an effective plan to expedite my ability to contribute independently. For the first month, Leah and I met twice a week, while Eric and I met once a week. By creating recurring meetings in my first few months, mentorship was not restricted to whenever I had a question. Instead, the meetings took on a more free-form structure that adapted to my weekly progress.

We set concrete goals for the quarter and reviewed how I was doing every few weeks. By setting goals together, I was accountable for my success, while Eric and Leah helped brainstorm tactics for how to address weaknesses. For example, to improve on catching edge cases after the Sales Tax project I led concluded, Eric and I agreed to experiment with using strict Test Driven Development (TDD) style on the next project I led. While most people at Slack don’t adhere to strict TDD, Eric encouraged me to test out my theory that TDD would help me grow.

My next project saw dramatic reductions in bugs and a feature shipped with 100% test coverage. While my reflections on TDD could be a post in itself, weekly meetings and concrete goals enabled my mentor, manager and me to work together to improve my skills and velocity in a positive, constructive, measurable way.

Code Review

To succeed at Slack in your first year as an engineer, it’s important to understand what makes an effective code review. When I asked my manager Leah what I should be trying to master in my first few months, her top priority for me was learning to write a good Pull Request. Slack ingrained empathy in pull requests in me from day one.

Empathy is necessary for both giving and receiving critique. When I receive feedback on my code, I try to keep two things in mind.

  1. Approach all comments with a gratitude mindset
  2. Resist the fear of diving deeper into ‘nit pick’ comments.

Mistakes are learning opportunities. At times when it might have been easier to give and receive a prescriptive block of code, my mentor Eric and I often took the opportunity to have discussions or short pair programming sessions. Whether the code comment was about a Slack standard, a better design pattern, or a debugging technique, taking the time to transform a question into a learning opportunity helped me become a better problem solver while increasing my capacity for independent contributions.

At the end of the day, a lot of engineering culture plays out in the way expectations around code review are set. Over 94% of junior engineers surveyed at Slack strongly agree with the statement that “I receive respectful, constructive, insightful feedback on Pull Requests that challenge me to improve my problem-solving skills without making me feel stupid.”

By creating and continuously striving for a Code Review culture rooted in respect and empathy, new engineers are empowered to ask questions safely and receive feedback with gratitude. As a result, instead of feeling like an imposter, I come to work each day feeling supported and able to celebrate small wins with a focus on actualizing my potential.

Finding Resources as a Junior Engineer

Slack Search

In a survey I conducted on mentorship at Slack, 95% of engineers identifying as entry-level or junior strongly agreed with the statement that “The engineering environment at Slack is a safe space for me to ask questions and grow as an engineer.” If you factor in that many engineers are introverts, this number is pretty impressive.

Asking questions as a new engineer can be intimidating. Thankfully, Slack as a product mitigates this because most likely someone has already asked and the answer is a search keyword away.

Slack the company has a distinct way of using Slack the product; everyone is encouraged to share technical questions, answers, and discoveries in a public place. The more conversations happen in public channels; the more Slack becomes a single resource for the collective intelligence and decision making processes that accumulate over the history of the company.

Channel names are a labeling mechanism to guide employees to the most appropriate place to find information. Have a question about threads? Probably #devel-threads is a good place to go. Curious about the difference between HHVM and PHP’s Zend Compiler, but are too intimidated by Keith Adams (Slack’s Chief Architect who helped write the HHVM compiler and Hack language at Facebook) to ask him yourself? Search for “hack from:@keith,” and you have access to everything he has ever had to say publicly about it.

Can’t find an answer? Ask in the relevant public channel. Some of my most memorable learning experiences this year occurred when I asked a question in a big channel. I was overwhelmed with thoughtful, thorough responses, supplemental resources, and offers to meet in person to dig deeper into issues from senior engineers. Moreover, those answers continue to benefit anyone who might have the same question. Think of it as a gift you are paying forward to future developers.

Access to Top Engineers with Open Office Hours

Another perk of being a junior engineer at Slack is Office Hours with engineering leaders. Since I started at Slack, access to top engineers has continued to expand with weekly and biweekly office hours. Over the year I’ve tried to take advantage of these opportunities as much as possible. What better way to supplement your computer science education than to go and have your questions answered in person by some of the most experienced engineers in the industry.

Office hours are open ended. Engineers of all levels are encouraged to attend and bring questions. Sometimes, even if I didn’t have anything to ask, I would go and listen to what others had to say.

While you can’t always control whether you get a great manager or mentor, there are a plethora of opportunities to take charge of your improvement.

Diversity

When you are choosing a place to start your career, especially if you identify as a woman or minority, it’s important to have role models and be in an environment where you can be yourself.

I get to work on a billing team that is 100% lady engineers. And not a day goes by that I don’t feel grateful to work at a company where I need more than two hands to count all of the influential, outspoken, intelligent, Senior and Staff level female engineers. I rarely even think about my gender at work, and that is the way it should be.

Opportunities for Growth and Impact

We grow the most when we are pushed outside of our comfort zones. As a new engineer this means working on projects where:

  1. You have more autonomy than you are comfortable with on a project with relatively high visibility.
  2. The technical difficulty level introduces a real potential for failure.

We learn the most when we fail, so the sooner we can take our training wheels off, the better.

As one of the fastest growing start-ups in history, Slack has plenty of opportunities for impact. Additionally, since you will likely be working on features touched by millions of users every day around the world, it’s easy to feel out of your comfort zone.

Conclusion

In a time when I was very vulnerable to potentially career-crippling imposter syndrome, my love for engineering and desire to improve has only grown thanks to the support of my manager, mentor, and teammates.

When I interviewed at Slack in October 2015, I was eager to find a place to develop a sound basis for my engineering craft. As someone who spent most of her life training to be in Broadway musicals, becoming a software engineer may have been the wildest idea I’ve ever had. But life is unpredictable, and sometimes love comes to us in unexpected ways. I’m grateful that Slack decided to believe in me, and that my passion for engineering has a place to thrive and grow. Not to mention, there are a surprising amount of stories similar to mine in our engineering organization.

If you’d like to learn more about my transition into tech, you can follow me on Medium or Twitter (@carlyhasredhair). I’d love to hear from you.

Most importantly, be kind to each other and don’t give up.

P.S. Apply to Slack!