As an aspiring tech lead I've been trying to get a better understanding of what it means to take the next step in my career and become a tech lead. After researching the role and gaining different perspectives I thought I'd share my definition of what it means to be a tech lead.
The book that helped me the most with understanding what a tech lead is and the responsibilities of one is called The Manager's Path. The chapter on the tech lead role is insightful and the book goes much further down the technical management path to help you understand what comes after.
With that being said, lets dive into what a tech lead is, what roles and responsibilities you will have during a project and how to become a great tech lead.
What is a tech lead?
As the next step for a senior developer, the first thing to realize is that it's no longer purely technical, you'll be responsible for your team's effectiveness. This sounds obvious, but it's quite a mind shift being a senior developer and only focusing on your own productivity to a tech lead where you're trying to boost each team members productivity.
The tech lead role, is for someone who already has experience being a senior developer but since it's not purely technical anymore, the tech lead doesn't have to be the most experienced engineer or the one writing the most complex features.
The role is quite dynamic and is best described as a set of responsibilities any engineer can take on when they reach senior level. While there are commonalities, the description of what a tech lead is and does, will depend on the organization. In some organizations, especially smaller ones, the tech lead might take on people management responsibilities, blurring the lines between a tech lead and a team lead.
In general the tech lead will be responsible for:
- Leading technical discussions to determine the most effective architectures and patterns.
- Coordinating with non-engineering partners that the team might have.
- Ensuring that the team understands the project and what's expected of them so that they can focus and remain productive.
- Ensuring that the project is broken down sufficiently so that work can be properly planned, delivered and managed.
Even though you'd have these additional responsibilities, your manager will probably still expect the same level of technical output as before, and so balancing these aspects with your work output will be critical.
What is the role of a tech lead in a project?
As a tech lead you will wear multiple hats at various points of a project's lifetime, these roles can include System's Architect, Business Analyst, Project Planner, Software developer and team leader.
System's architect and business analyst
In this role you'll need to have a deep understanding of the overall architecture and the critical systems that relate to your project.
If the systems already exist, then you'll need to determine what changes need to be made or what features need to be added. If these systems are used throughout your organization then you will also need to understand the effect these changes will have on other projects. If the systems do not yet exist then you'll need to design them. Understanding the required system features will help you structure estimates and prioritize work.
Business requirements are rarely technical and so it will be your job to distill the business requirements of the project to technical requirements so that you can understand what you and your team will have to build.
In this role you will focus on breaking down the project into rough deliverables. This will allow your team better understand the work and deliver quicker.
The key here will be to isolate dependencies and get as much productive work done in parallel as possible. One way to achieve parallel work output is to use abstractions where possible. For example, if you're building an end-to-end feature then your team can agree on a API schema which will allow the front-end and back-end teams to work in parallel.
Additionally, breaking things down will help you figure out which pieces are critical, which are optional and how you can get the critical pieces done as soon as possible.
Software developer and team leader
This role should feel more familiar, as a tech lead you'll still be writing code and developing new features.
Since you're responsible for the team, when the project is not going as planned, you might be tempted to work excessive overtime to keep things on track. But this a mistake, you should instead focus on communications. Communicate issues and potential challenges as early as possible. There's nothing wrong with raising issues early.
You might find that instead of overworking yourself and the team, the product manager is willing to compromise on a feature in order to meet the delivery dates. It's normal for large projects to compromise on certain functionality which don't represent the core value for users as the project nears its delivery date.
As the tech lead you'll need to learn when to do something single-handedly and when to delegate work to others. If you're always tackling the complex features your team will be stunted and they won't know how to fix issues surrounding those pieces of development when they occur. You're still a developer, so you should definitely do some of the complex features, its just about finding that balance.
How should a tech lead manage a project?
As the tech lead you'll have to manage aspects of the project and will, together with a project manager, be responsible for developing a detailed project plan.
You'll need to estimate project lengths for your management team and give supporting evidence of why you think it will take that long. It can be frustrating giving estimates on a project that is still very much an unknown, and so considering as many aspects of the project as possible will help identify what your timelines will look like. These aspects can include:
- The dependencies of your project on other projects in your organization if you need features to be developed outside your team
- The dependencies between your tasks, as this will affect how much work you can get done in parallel
- The required testing process, eg. will a UAT be required and how many users will be involved in this process.
- The deployment and rollout process for the system
You plan will not be perfect, that isn't the goal of the plan. The goal of creating the project plan is to deeply assess the project and take as much into consideration as possible instead of diving in and seeing what happens.
There are some guidelines which might help to create a more thoughtful project plan, these include:
- Breaking down the work as much as possible. Start with the biggest pieces and then break them down into smaller pieces, and then break those down further, keep breaking them down until they are ticket-sized pieces of work. This will help you to order, prioritize and parallelize the work as much as possible.
- Work through the unknowns, demystifying anything that is unclear. If needed get help from other people in your organization who might better understand the system or concepts. Keeping trying to clarify things until there is no more value in the exercise and the only thing left is to just get stuck in.
Once you have you've developed your project plan, run the project and adjust the plan as you go. The value in a good planning process is that helps you know how far you've come and how far you still have to go.
What are the qualities of a great tech lead?
Being a great tech lead is definitely possible, and these are 4 characteristics of a great tech lead.
Understanding the architecture
You won't be able to lead the project or have confidence in your changes if you don't understand the system's architecture and its interactions with other systems within your organization.
Its crucial that you have a deep understanding of the system's architecture. The components of the system, their purpose and functionality, where data is stored, how it flows, how the system ultimately generates value for your end-users. A powerful to visualizing your system architecture is to use a technique like the C4 model which allows you to represent your architecture at various levels of abstraction which will help you understand the big picture as well as the minute details of the system.
Being a team player
You're the leader of the team but also a member of the team. You will need to strike a balance between hogging all the interesting work as your team will feel under-stimulated and doing all the mundane work which will leave you feeling dissatisfied.
Doing the mundane can be rewarding as it will give you insights into where your processes are broken and what can be improved. For example, is a particular area or type of work being avoided by team members because it lacks clarity and there are always the same problems cropping up? Maybe that's something you can look into fixing.
Leading technical decisions
You will need to lead technical discussions with your team or with other stakeholders. It will be important for you to ensure your team understands the technical issues being discussed.
You'll need to be careful of making all the technical decisions on your own, as this can rob your team of their sense of ownership and improvement, but at the same you will need to know when to make decisions to avoid the decision being dragged out.
You'll need to figure out which decisions you should make alone, which should be made by other's with more expertise than you, and which should be made by the whole team.
Communication is a key trait of any leader, and being a tech lead is no different. You will need to work on how well you communicate in both writing and speaking. Great tech leads are able to communicate the requirements of business to their team through planned work as well as the needs of the team to business to increase morale and productivity.
You will represent the team and be their voice when communicating with stakeholders. This communication overhead will come at cost of your own productivity but your ultimately the productivity of the whole team is more important.
The tech lead role is an important one that carries with it a lot of responsibility and accountability. If you've been entrusted this role or are aspiring to be one, hopefully this article has helped you get a better understanding of what it means to be a tech lead.
These were my insights on what it means to be a tech lead, but the role will vary between organizations. You might want to perform some of the responsibilities or completely different ones, but as long as you're fulfilling the core aspect of leading your team, you'll be a great tech lead.
What are your thoughts on being a tech lead? Comment below or tweet me @javaad_patel . I'd like to hear your thoughts on the role.
** Credit to @danielkcheung for the photographs used in this post.