To become a technical lead the following are essential
The ability to mentor staff members at all level of seniority, from someone who has been out of uni for 3 months to a person who has been programming for 30 years
A good knowledge of your development domain. This includes: languages, frameworks, utilities, development environments
A solid understanding of issue management systems, project management skills and version control
Be the go-to bug killer
Know how to conduct timely code reviews, what to look for and how to minimise the amount of time they take to hold and for the changes to be made
Keep up-to-date with the developments in your development domain. For example, if you didn't learn new frameworks or technologies from .NET 2, you'd be doing things in quite a backwards way today.
How to write unit tests and mocks, and to get your developers to write them too
Knowledge of what design patterns are and when to use them
Knowledge of what code smells are and how to mitigate them
Continuous integration
The ability to plan projects and releases
Depending on your organisation and whether you have architects on staff, you would probably need to know the following:
The ability to componentize your projects and break it into functional parts
A thorough understanding of security, including the correct way of handling passwords, separating systems, securing data, etc
Enterprise concepts such as service buses, message queues, BizTalk
Enterprise design patterns
Service architectures / RPC such as SOAP and REST
ORM frameworks such as Hibernate, Entity Framework, Doctrine
Continual deployment
The cloud
The ability to recommend the correct technologies to use for a project. This might be difficult if your team / shop only does .NET, or PHP, or Java.
Design the application in such a way as future enhancements will be easily accommodated
If you are going to be a development manager then you will also need:
- Interviewing skills and how to find the right staff
- How to deal with people problems with your team members
- Managing business directives/goals and converting relevant ones to information for your developers
- The ability to estimate the time for programmers of varying skills
- The ability to allocate tasks to the correct developers based on their skills and abilities
And finally, some other recommended points:
Managing a team is a challenging role to be in. You need to be the person that can answer any question, you need to know the right technologies to use (unless you have an architect), you have to have people management skills and be approachable by your staff (assuming a management position). In addition to this, you need to have accurate estimating skills to ensure project profitability and you need to be able to get your hands dirty with anyone's code to pinpoint problems and fix them quickly. You need to avoid wanting to do everything yourself and to foster a team environment that is not toxic. You need to continually stay on top of your technology stack and learn the latest developments and techniques, as well as broader industry-wide trends.
You should also really know at least one database platform, and know it well. Know how to do replication, stored procedures, how the query optimiser works, and how to design a schema properly, and what fields to index.
Regardless of the exact position, any senior role requires you to have the ability to communicate effectively. If you're not a confident speaker, look at doing something like Toast Masters (public speaking). Learn how to make and hold eye contact. Be confident. Dress appropriately for the position. Lead by example.