On my current project, I'm playing a role of a Team Lead. It is one of those roles, whose responsibilities many people understand differently and often confuse with a Senior role. In this post, I want to clarify this question and describe how I see the responsibilities of a Team Lead.
Let's start with the Senior role. Senior role in a team is closer to the technical side of the project - they are some kind of a gurus who deeply understand the project (its development stack, its architecture), they help to solve arising technical issues, teach newcomers, share their experience and build high-level solutions (sometimes they try on the role of a Software Architect).
Team Lead is a role which implies not only a deep understanding of the technical side of the project but also team management. Team Lead solves problems and deals with blockers of team members on a much higher level and contributes to the project growth. They act as a shield - protect their team from managers and customers allowing the team to stay focused and motivated. Also, they are responsible for the team activity monitoring, time reporting, and controlling of the phases of the project development.
The difference between Senior role and a Team Lead is that a Team Lead is a managing role. It implies process control but not the execution process, which is the responsibility of developers. However, it's still a technical role and the real Team Lead should deeply understand technical decisions which were made by his team. Besides, developers are pack animals - they can't be properly managed as long as they do not recognize technical skills in their Team Lead. If they see in their Team Lead only a manager then credibility is quickly runs out, but if they can learn something from their Team Lead, for example, in a used framework, then they accept the leadership of the Team Lead.
Typical Team Lead's working day:
consideration of new tasks and their delegation
- standup with a team
- architecture questions
- code review
Practically, in healthy organizations, in my experience, the Team Lead role was usually taken by developers, who more than others feel responsible for the fate of the product being developed. They often demonstrate hyper-responsibility, which is used by management.