I am currently a professional programmer. I want to expand my skillset, but I also want to make the career jump to being a dev lead as part of a team. I know there's got to be a lot to learn (and this won't be an instant thing) but I think I'm smart enough to do it and I'm up to the challenge.

I'm sure that many of the members here have probably gone through this themselves, and are now successful dev leads. Unfortunately, even though I know some personal areas I'd like to improve (depth of knowledge, breadth of knowledge, skillsets, etc), I'm not really sure how I would start something like this.

As a programmer now, what steps should I take to get me to this goal? What should I prioritize?

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:


Learn outside of your development domain
Learn to say NO when things aren't possible or are out of scope or conflict with restraints such as budget or time.


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.
