Before I became a software engineer, I thought that the most important part of the job would be coding. I was wrong. The most important (and hardest) part of software engineering is working well with other humans.
“I’ll never become a manager!” I told myself, “That way, I can focus all my attention on computers!” I thought that I could ignore the difficult human parts of my job if I stayed on the technical individual contributor (IC) track for the rest of my career.
“If you want to go fast, go alone. If you want to go far, go together.”
While I was avoiding the human aspect of my job, I’d also wonder, “Why aren’t people listening to my ideas?” This was particularly salient when I first started working on the Platform team at Slack. I wanted to transform the way our APIs used tokens so that they would be more secure, and allow the API development cycle to be more consistent across product development teams. But for months, it was impossible to convince any teammates or product managers that this endeavor was a valuable use of anyone’s time.
After some failed attempts at selling my ideas, and after observing senior engineers on my team get their ideas adopted, I realized the missing ingredient: leadership. I couldn’t keep my nose glued to the keyboard every day. If I wanted to advance, I needed to help other people contribute at the same level as me. I needed to increase my impact through leadership.
This story will explain what I’ve learned about leadership and how to get started on an IC leadership path.
As an engineer at Slack, I came to understand how leadership is different from management.
Managers are responsible for their reports. They focus on team-building through coaching and team structure. They also manage performance in order to support the growth of their team.
Managers are often leaders, but leading is something separate that anyone can do. Leadership is about inspiration. It’s about influencing others without relying on authority. It’s about communicating a vision and empowering others to support that vision.
Before you can lead others, you must be able to lead yourself. Leading Self must happen before Leading Others and Leading Organizations. The concept of Leading Self can be found in leadership literature across a variety of industries and companies.
Leading Self is about personal excellence, because leadership by example is one of the most powerful ways to inspire others. Leading Self means performing at your best and being responsible for the quality of your own work.
The five components that drive successful leadership of the self are: Finding Alignment, Becoming an Expert, Sharing, Executing Consistently, and Communicating Effectively.
In order to be excellent at work, you’ll need to understand your team, and ultimately, your company.
Principles are your company’s norms that guide which actions are desirable or undesirable. Many times these principles are not stated outright, and it’s your responsibility to uncover them. These principles are your compass. They will help you navigate decisions according to the company’s goals and values.
At Slack, for example, we believe in providing an excellent experience for our users. When a customer reports that a core feature is broken, it is important for me to drop what I’m doing, investigate, and fix the issue immediately. At another company, dropping what I’m doing might be the wrong decision entirely.
Most decisions must be weighed on multiple axes. Do you tackle the tech debt today or lay the foundation for tomorrow? Is it better to squash bugs, build tools, or ship features? There is a limited total amount of time and energy you can devote at work. Being able to align your efforts with the company will ensure that your contributions have maximum impact.
Alignment isn’t just about doing what the company asks of you, either. As a leader, you will have plenty of opportunities to identify problems and potential solutions. But in order to convince other people that these problems are worth solving, you’ll need to understand what’s important to the company and be able to communicate that to others.
Become an Expert
Becoming an expert is about honing your skills. Having potential is one thing, but it’s not enough. Leaders must be experts in practice. According to Anders Ericsson, a Professor at the University of Colorado, it takes an average of 10,000 hours of high quality, deliberate practice over an average of ten years to become an expert.
People often ask me whether the fact that I used to sing opera helps me in my software engineering career. Yes! Through music, I developed a growth mindset. When practicing an aria, I’d spend hours of rehearsal going through the weakest parts, working them until they sounded as natural as the strongest parts. Software engineering is the same — we need to spend time developing our weakest areas.
There are no shortcuts to mastery. Instead, it is something that needs to be intentionally developed. Ask yourself (and those around you): What are my biggest areas for growth? What skills do I need to develop in order to become an expert?
While there may be a lot of skills you want to develop, I encourage you to use the following questions to direct your effort: Does the skill align with the company? Does the skill align with my own personal goals?
Don’t focus on the judgment of “not being there yet,” but rather the deliberate process of gaining knowledge and skills day-by-day. Nobody is born an expert.
After Leading Self, you’ll begin to Lead Others and empower the people around you to contribute their best work. To do that, you’ll need to share knowledge.
Sharing knowledge can be unintuitive after you’ve spent so much of your time mastering a skill. It is instinctual to want to “own” a specialty. Expertise can feel magical when effort is invisible, and you might be inclined to hide your magic in a secret box, tuck it away, and pull it out in times of need. Your expertise will stay magical, because other people won’t know how to do it.
But here’s the thing — when you keep knowledge to yourself, you are not helping other people around you grow, because you are making others depend on you. You are not helping yourself grow, because you are not freeing yourself up to learn new things. You are preventing others from contributing, and you are actively hurting the team.
I used to keep information to myself, not because I wanted to hide it, but because I didn’t realize that I had it. For example, my projects consistently navigated the crossroads that stumped many other projects: kickoff, final milestones, and regression-free releases. I wanted my teammates to succeed, so I started paying attention to things that worked well and earmarking those skills to share with others. It didn’t matter if only my projects executed well — that’s a 1x impact that doesn’t scale. What matters is that the whole team is able to execute — that’s a Nx impact.
Instead of hiding your knowledge, share it. Teach other people how to do the things you have learned to do in both 1:1 settings such as mentorship and pair programming, or in 1:N settings such as presentations and documentation. Other people, in turn, will teach the next person. You’ll be free to move on to the next skill that you want to learn. Knowledge is an infinite well — there will always be more.
I remember an early conversation I had with my manager, where I told him that I had done especially well on my most recent project and asked when I could be promoted. His wise response: “You need to demonstrate that you can do this with the same quality — consistently.”
That’s the difference between luck and leadership — consistency.
What matters is not that you can do one thing well, one time. What matters is that you can do it again, and again, and again.
To execute consistently, you’ll need to seek out projects of all sizes and types — small, large, cross-functional, user-facing, and non-user-facing. This will expose you to a variety of challenges and develop your approach to problem-solving. It will show you your weaknesses and sharpen your skills.
Let your manager know which skills you’re looking to build. Keep an eye out for upcoming projects, and proactively let your manager know which ones spark your interest and why. During a project, think about how you can target specific skills to develop while you’re working on it. This will help you maximize your time at work.
Sometimes you will be assigned to a project that you don’t feel passionate about, but which is mission-critical for the team. You’ll need to prove you can do these well, too.
Executing consistently will also develop your personal brand and build trust with your coworkers. This trust takes time and experience to cultivate and develop, and it doesn’t happen overnight. This trust will also stay with you through all of your subsequent endeavors.
Have you ever wondered, “Why don’t people listen to me?”
Many times in the beginning of my career, I asked that same question. Then, one day, when I was ready, my boss gave me a clue: I was being perceived as negative. At first, this feedback hurt my feelings. But it turned out to be transformational in my career. I began working with a voice coach and unlocked the secret to effective communication: listening.
Listening is not just about receiving information. It’s about synthesizing information and its context. It’s about understanding where the other person is coming from and asking clarifying questions to gain an even deeper understanding. Believe it or not, this synthesis is the first step to effective communication, and eventually having your ideas take flight.
3. As levels go up, manager & engineer tracks require identical communication skills. The real superpower on both sides is enabling others.
— Sarah Mei (@sarahmei) May 11, 2017
Another aspect of effective communication is repetition in the appropriate contexts. While I used to wonder why people “wouldn’t listen”, I also used to get annoyed when I had to repeat myself.
It wasn’t until later that I started to observe effective communicators at work. They surface information in a variety of channels. Not only do they communicate important information at the right intervals — they also provide an appropriate amount of detail, depending on the audience.
Learning to listen and synthesize information, plus learning how to share it effectively, is a foundational skill to influencing people without authority. You’ll need this influence to rally people around a collective vision.
When I started my career in software engineering, I questioned why my ideas weren’t being applied more often in my company and across the industry. Then, when I took a moment to look up from my computer and engage the brilliant people around me, I realized that I could have much more impact if I was able to inspire others to strive for the quality that I envisioned.
There is so much to learn when it comes to leadership, and I personally have a lot more to learn as well. If you want to become an IC leader, I encourage you to start by Leading Self. Let me know what you discover!
Want to solve tough problems in a great environment to practice Leading Self? Check out our engineering jobs and apply today.