Recently I’ve spent considerable amount of time trying to demystify responsibilities of Tech Leaders. Sadly there is not much out there on this topic. Nevertheless you can see my findings below.
Every tech leader will tell you a bit different story about their role. The common denominator is that usually they had to discover this role by themselves and learn as they went. I gathered some common responsibilities and challenges based on readings, my experience, experience of Tech Leaders I know and also based on observations of other developers. I guess it’s the best overview of the role you can get without actually stepping into the role. Not every tech lead will have all this responsibilities. Depending on a company some of this responsibilities may be pushed to other roles.
The big picture
Most of Tech Leaders say they are responsible for overseeing the big picture and aligning project technical aspects with overall vision. Each project, at best, has three aspects: development, team management and client management. Each group will have different view on the project, different expectations and maybe even different vision. Having said that, we are one team and we have one goal which is make our client successful, while also making our own company successful and profitable. Tech leader should make sure that this goal can be accomplished not only in short term but also in the long term.
It sounds a bit like a role of development manager or delivery manager and it should. The difference is in focus. Technical leader should focus on:
- Technology selection, so that technology helps the team achieve goals and build value, not impair their work. It should fit overall technical vision of the company and client.
Technology selection should also balance development speed, quality and ability to meat non technical requirements and clients goals.
- Quality of the solution, in long term low quality will undermine productivity and efficiency (with time each billed hour will be worth less and less in terms of value added).
- Making sure team shares the vision and business understands technology limitations (important especially if business is influencing technology choice).
- Ensuring solution is fitting whole ecosystem of solutions used by the client (these days most of the projects have numerous integration points).
- Making sure technology selection, process, architecture, process and practices don’t undermine non-functional requirements (like scale, do we have a few users or billions, what level of security we need, do we have to scale, do we have to be hosting flexible or we can assume it will be always hosted on rack space?).
Team leaders should stay in touch with code base.
- Coding, to keep good view on overall picture of the project so you can take part of different discussions and not being lost.
- Pair programming with team members.
- Ramping up new team members.
- Setting up base infrastructure for domain development, UI, tests and common code.
Communication and project management
- Managing sprints, managing stories, measuring velocity etc.
- Communication between the team, management and client or other teams within the organization.
- Managing up-stream, down-stream and partner relationship with other teams.
It’s extremely important to keep teams morale up. Taking care of morale is in scope of leaders responsibility. Demotivated team will work slower and leave more bugs in code base.
- Motivating people, empowering them, growing them.
- Making sure that they are and feel successful (writing code is difficult and it’s easy to burn out).
- Making sure that the team sees the value of their work.
- Protecting team from political and organizational issues within the company but at the same time being transparent by describing what is happening around the team.
- Alleviating pressure in the team (technical disagreement etc.).
Coaching and mentoring
- Unlocking people’s potential / empowering team members. Some developers are software craftsmen but they settled. Sometimes all you need to do is to engage them and they will grow themselves from that point.
- Understanding each person technical aspirations, which change over time. It will allow you to understand collective abilities of the team.
- Building teams dynamic. Someone can crave opportunities but hesitate to take them on.
- Mentoring junior developers, letting them fail from time to time.
- Removing roadblocks and letting them do their job. You are one person, your team is n times more important.
- You’re responsible to make every and each tam member to do their best. You’re not necessarily the best coder in the team and you need their expertise.