On my current project, I'm playing the role of a Team Lead. It is one of those roles, whose responsibilities many people understand differently and often confused 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 that 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 team activity monitoring, time reporting, and controlling the phases of the project development. And of course, they are some kind of bridge from management(delivery manager, project manager, customer) to the dev team and vice versa.
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 that were made by his team. Besides, developers are herd 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 running 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
- solving 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.