18 Oct 2014
There are two paths in software development that people usually take:
I have done 1 and half of 2 so far in my career, I have always had a passion for development and see it as a great mixture of engineering and art. I stumbled into management because taking a technical lead progressed into more responsibility at a small business. I held that position for a year before leaving to become a full time software developer again. This is a decision I do not regret.
Now, as a senior developer at a large company, I am technically leading projects again and with much bigger teams. Recently a few projects have been completed that both proved a success and I'd like to reflect on some of the lessons learned which I hope will prove useful to developers looking to progress into technical leading or looking for ways to improve.
This is a difficult part of going from a developer to a lead, you need to let go of tasks and trust the developers to get the work done. If they don't do the job to your standard then help them improve, give them pointers, enforce quality and utilise peer reviews and more senior reviews to ensure the quality. Developers will learn quickly what kind of output will be expected of them.
If a bug emerges, or a task emerges then find a team member and ask them to help and do the task. Developers are typically helpful, and love a challenge so they should be open to this kind of responsibility. Don't try to do everything yourself.
Do any work required to let developers develop. Make sure:
Keep the team involved all the way, don't just assign tasks and keep developers in Silo's. Plan, estimate, design, architect, even decide on meeting times if need be, as a team.
Do daily stand ups, weekly retrospectives and always be approachable. Work with the developers to fix problems and try out ideas they bring up, take anything that requires management involvement to the managers on their behalf and bring to resolution.
The team need to be involved, they need to care. Each developer should be invested in the project and understand it. If they come to you for a decision about an approach, don't dictate, discuss with them so you come up with the idea together. Get more people involved if need be.
Farm out none coding tasks, such as deployment, smoke testing, requirements gathering, etc. to members of the team rather than do it all yourself. Make sure all members know what needs doing, when for, how to do it, etc.
The team should be able to act perfectly well without a leader, it should run as a unit and not as a dictatorship.
Get each team member doing code reviews of other's work. Don't make it so that you need to review alone because you will become a blocker and you want the team invested and more involved with the whole system.
As a leader of the team you need confidence for: