Mark Zuckerberg as an Inspiration: Making the Leap From Software Engineer to Tech Lead

Mark Zuckerberg as an Inspiration: Making the Leap From Software Engineer to Tech Lead

Personal Development, 12 Dec 2016

Photo: Mark Zuckerberg f8 Keynote, (CC) Brian Solis, and

For five years I was a leading software engineer. I wanted to get ahead and become a tech lead and I figured that as long as I will improve my technical skills and become a better engineer the more chances I have to be a tech lead.

And so, I really did improve my technical skills: I got familiar with every detail of the company’s products, I designed new products, I tested the code thoroughly, improved the efficiency of the software with new tools and yet - nothing happened. I mean, something did happen - I became a better software engineer, but not a tech lead.

One of the most successful people in the world who started as a software engineer and later became a tech lead and an entrepreneur is Facebook’s CEO, Mark Zuckerberg. Zuckerberg started programming in middle school. He created tools and games and by his sophomore year at Harvard he had developed a reputation as the go-to software developer on campus. Mark is an example of a person who understood quickly that establishing yourself as a tech lead is just as important as developing your technical skills.

Mark Zuckerberg as a software engineer Photo: Mark Zuckerberg as a software engineer, (CC) NYTimes

Back to my personal story, not managing to get ahead made me realize I I can’t improve one skill by improving another skill. The skills required from a tech lead are different from the skills required from a software engineer. By continuing to work on the technical skills alone, I may become a better software engineer, but not a tech lead.

A few days after returning to work from maternity leave, I got a new project which was considered a “second class project”: The company needed to upgrade its servers from one type to another - there was no technical challenge, the only challenge was organizational - there were many systems and I needed to plan the move along with other teams in a way which least damaged the system's functionality.

I set up weekly meetings with the teams and together we planned the required actions for the upgrade. Today, I realize what I didn’t realize back then - this “second class project” allowed me to demonstrate my organizational skills, and also allowed other colleagues to be exposed to my work - what I didn’t appreciate at the time since I thought good technical skills were sufficient. Even before the end of the project I got an offer to manage one of the teams I worked with and then additional offers followed.

In this article I will try to explain who is the tech lead and how can one develop the tech leadership skills out of my personal experience.

Who is the Technical Leader?

According to wikipedia, a technical leader is a software engineer in charge of one or more software projects. He or she is responsible for the underlying architecture for the software program, as well as for overseeing the work being done by any other software engineers working on the project. A technical leader's exact responsibilities vary from company to company.

What Skills are Required From a Technical Leader?

In order to be a tech lead, a good technical skill is not enough. According to the book "Becoming a Technical Leader: an Organic Problem-Solving Approach" a tech lead is required to have three main characteristics in order to solve problems professionally:

  • (1) Innovation or Ideas: the vision, the image of what the solution should be of which people can follow.
  • (2) Motivation: the power which drives people to move and act.
  • (3) Organization: the organizational structure which allows ideas to be moved into practice.
  • The job of the tech lead is to take a project and move it into practice while maintaining quality: Allow the project to be existent from the technical side - meaning, understand the problem and find a good and efficient solution, and also from the organizational side - meaning, set up an environment in which ideas can move into practice, what many times is as difficult as the technical challenge. The tech lead should create a positive influence on the problem solving environment that will make the team more efficient.

    Every person is unique and there are many leadership styles. Therefore, not all leaders are necessarily very assertive, have an outstanding technical skill or marketing geniuses. A person who wants to become a tech lead should work hard to find his way to innovate, organize and motivate other - find which skills are the weakest and face them one by one.

    Mark Zuckerberg as an Inspiration: Making the Leap From Software Engineer to Tech LeadClick To Tweet

    How Can One Develop the Tech leadership Skills?

    “Knowledge Means Power”: Improve Software Architecture Design

    As a potential tech lead, put your focus on general topics which have an architectonic perspective. For example: lean software development, architectural styles and patterns, and software design patterns.

    In order to gain knowledge and have an added value bring out the big guns and start reading books, watch lectures online, read blogs, go to live lectures and events, take courses at the university, participate in forums, etc.

    I recommend allocating at least two hours a week under the title “personal development” and treat it as work time for all intents and purposes. I think that ideally a worker gets 80% of his knowledge from his workplace and 20% from external source. This creates a mutual productive influence between the worker, who is constantly developing, and the workplace, which gains from the knowledge that the worker gains.

    While gaining knowledge, be careful and pick the information sources wisely without falling into the trap of learning a new programming language (unless it’s a new programming paradigm) what will simply improve you as a programmer but not as a tech lead.

    “Transform from a learner to an educator”: Educate Others With Technical Knowledge

    Tech leads allow to execute not only their ideas but also ideas of others, and they must educate others with their technical knowledge. One simple and so called trivial way to educate others is to have technical discussions with colleagues. The purpose of these discussion is to bring an added value and transform from a learner to an educator. Therefore you should come prepared with relevant information.

    The ability to run technical discussions well is a muscle you need to train. You can start training during coffee breaks with people you don’t have employer-employee relationship with. From there, you can start throwing out comments in more formal meetings. Here’s an example of how to start such a discussion: “Yesterday I read a very interesting book about non-relational databases. We keep our data in a relational database using SQL but since our data structure keeps changing, if we kept the data in a non-relational database the software would be more flexible and the maintenance would be low. What do you think?”.

    Video: Mark Zuckerberg is expanding his influence cycle by lecturing Harvard students about Facebook's performance improvements using database sharding, cache and client-side storage.

    “Don’t Just be Great, let Others Know You’re Great”: Expand Your Influence Cycle

    Another thing in the way towards becoming a tech lead is expanding your influence cycle. As a software architect it’s okay if only your boss and your team know what a quality software you write, but as a tech lead it’s not okay anymore. You don't only need to be great you need others to know you’re great. If you have an opportunity to work with other teams - use it to demonstrate your knowledge and leadership skills. If you don’t have too much of these opportunities don’t just wait for it to happen, create the opportunity for yourself for example by giving a technical lecture on the knowledge you’ve gained in the first section.

    In summary, in order to make the leap from a software engineer to a tech lead: improve your software architecture design, expand your influence cycle and educate others with your technical knowledge.