Lessons Learned From a Software Development Technical Lead

18 Oct 2014

There are two paths in software development that people usually take:

  1. Work towards a team leader role, progressing into management
  2. Work towards a tech leader role, progressing into architecture

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.

1. Rely On Your Team

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.

2. Be the Enabler

Do any work required to let developers develop. Make sure:

  • They have tasks available to work on.
  • They can interrupt you whenever they need to. It keeps all the developers unblocked at the cost of only your time.
  • Analyse tasks, specs, designs, etc. ahead of time and try to get rid of murky requirements before the developer starts.
  • Don't let them begin a task without knowing really what to do. You can use developers to do this work by giving them specific tasks to investigate, research, do proof of concepts, etc. but these will be clear consise "pre tasks".

3. Make Decisions With The Team

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.

4. Feedback From The Team To Management

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.

5. Mentor The Team To Do Your Job

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.

6. Peer Code Reviews

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.

7. Confidence

As a leader of the team you need confidence for:

  • Making sure the tasks, estimates and quality are all at a good standard.
  • Not being afraid to call out management about unrealistic deadlines, expectations, resource switching your team, etc.
  • Owning up to mistakes made by the team and quickly rectifying them.
Posted by makit
Last revised 18 Oct 2014 09:36 PM

makit / Martyn Kilbryde

Professional software developer, ponderer and eccentric.

flickr

Github

LinkedIn

Stack Overflow

Twitter