I have been learning, developing, and living software for the last 15 years. Everyday I'm learning something new and pushing the boundaries of my knowledge and understanding. It's been fun and frustrating all at the same time. Most of my time lately has been spent just truly understanding better what I thought I already knew. Any time you feel you have "arrived" then take a step back and have a discussion with someone really knowledgeable in an area, I think you be surprised how little you do know. We'll never know everything and the sooner we admit and accept it the better we all will be.
Earlier this year I had an opportunity to become a "technical lead". At first I was very hesitant. I'm one of those developers that wants and has to be in the trenches. I love being on the front line getting the job done. Sometimes I actually spend my weekends just writing unit tests, checking out a new technology, or exploring a performance problem... for fun. This means I write a LOT of code and I've gotten pretty good at producing a high volume code. Sometimes I'll spend a weekend writing a prototype just so I can communicate a design or change. This prototype is basically a way to test my ideas and get feedback from others.
One of my concerns about leading a team was that I may not code as much as I was.
Here we are months later and yep I'm not coding as much as I was... directly. Something else happened though. I have spent the other part of my time XPing with other developers. Still writing code but just not via my keyboard. I have learned that I really enjoy teaching others. Helping other become better developers is very satisfying to me. What I found is helping others has actually helped me become a better developer. Yeah, many people had already told me this is how it works but I had not directly experienced it before.
I've always been one of those guys that just have to understand concepts and ideas deeply before I can move forward. This has obviously limited me to how much I can learn but it's made me very good at what I do know. There was a point in my career, somewhere in ~2005, in where I was learning more and more about other languages, operating systems, etc. I found that I knew a little about a lot but could not perform well at any of them. I decided that year to focus on going deeper into my understanding of a specific set of technologies. So here it is years later and I think the pendulum has hit the other side. I think I'm going to start branching out into other technologies and concept to challenge my ideas. Back to the tech lead role. I have been able to share the deep understanding with others. I've also been able to share my workflow of getting thing done and it's help many developers to become more productive and produce much higher quality code.
Now I'm not saying this is all my doing at all. There are people I lead who are soaring high and doing excellent but as always there are other that are making small incremental steps forward. However in the end all of us are hopefully learning and moving forward at the pace in which we want and desire.
So what is a technical lead?
It's a developer who is interested in leading others to become better developers. Sure they're more things like code reviews, branch merging, building, blah blah task that you have to do. However your one real job is to help developers become better developers than even you are. My wish for anyone I lead is for them to pass me and lead me!
Just the other day an intern, Austin, was working on Entity Framework task that I had given him. He asked me, The Mighty Technical Lead, how to do something. My answer... "I have no idea? But...". I then pointed him to a few resources and said tell me what you learn and we'll go from there. That day both Austin and I learned something new about Entity Framework. This, I feel, is a perfect example of how team leads and member can both learn and move forward together.
As I continue to lead and grow, I hope that people I lead learn and grow as I do.