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?
What skills should I cultivate to become a development/technical lead?
skills;experience;team leader
To become a technical lead the following are essentialThe 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 yearsA good knowledge of your development domain. This includes: languages, frameworks, utilities, development environmentsA solid understanding of issue management systems, project management skills and version controlBe the go-to bug killerKnow 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 madeKeep 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 tooKnowledge of what design patterns are and when to use themKnowledge of what code smells are and how to mitigate themContinuous integrationThe ability to plan projects and releasesDepending 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 partsA thorough understanding of security, including the correct way of handling passwords, separating systems, securing data, etcEnterprise concepts such as service buses, message queues, BizTalkEnterprise design patternsService architectures / RPC such as SOAP and RESTORM frameworks such as Hibernate, Entity Framework, DoctrineContinual deploymentThe cloudThe 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 accommodatedIf you are going to be a development manager then you will also need:Interviewing skills and how to find the right staffHow to deal with people problems with your team membersManaging business directives/goals and converting relevant ones to information for your developersThe ability to estimate the time for programmers of varying skillsThe ability to allocate tasks to the correct developers based on their skills and abilitiesAnd finally, some other recommended points:Learn outside of your development domainLearn 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.