Depending on the size and maturity of a company, the name of what I do can vary quite a bit:
- Technical Lead
- Principal Engineer
- Software Architect
- Development Manager
- Director of Development
All of these have slightly different emphasis, but the title that I most connect with is Technical Lead. This is for two reasons:
- Technical – This means I still have all of my technical skills. Most managers lose their technical skills once they stop producing work, and start managing other people producing work.
- Lead – I actually lead my team. I don’t sit passively by and hope someone tells us what to do. I make decisions, take accountability for delivery, and am generally a hard-ass focused on the project success.
In terms of what the job responsibilities of a Technical Lead are, Wikipedia actually does a great job explaining it. If I were to offer my own description, I would break it down into three categories:
- Communication – I could easily argue that communication is the most important aspect of my role. In short, I have to be able to communicate effectively with anyone, at anytime, on any topic. This is everything from explaining a technology choice to a non-technical executive, to coaching a developer 1-on-1 after they have a made a major mistake. I have invested heavily in improving my ability to communicate with others, as the skill is the deciding factor of if I am successful in my role or not.
- Leadership – It may seem odd that I place leadership after communication, but if you cannot communicate effectively, how can anyone ever follow your lead? My leadership skills started in high school with sports and Boy Scouts, and started to bear fruit in college. Since then, I have added a lot of tools to my leadership tool-belt, and plan to write a book on the topic.
- Technology – I have to be the best technologist on the project. If their is a better technologist on the project, I should step down and he or she should replace me. I’ve tried to be a not-the-best-on-the-team technical lead before, and it just doesn’t work. Technologists tend to only take direction from people who they think are more senior than they are.
I have been using the broad terms “Technology” and “Technologist”, where most people might expect me to say “Programmer” or “Coder”. This is because the job I do generally deals with technology, and only part of my job is related specifically to writing software. To get a viable product to market: hardware; cloud services; network infrastructure; security; performance; open source software; commercial software; and many other aspects of technology have to be taken into consideration along with the coding of the product itself.
In terms of what type of technologist I am, I can be thought of as a Full SDLC, Full Stack, Polyglot:
- Full SDLC (Software Development Life Cycle) – I can manage all aspects of the project, from the first conversation about the idea, to the final DNS configuration to make the product live.
- Full Stack – I can do front-end, back-end, data stores, and integrate with any other services that might be necessary to get the product to market.
- Polyglot – I use many different languages, and have no real preferences. I pick whatever language that is best for the problem at hand.
At first, many people don’t believe that I can be proficient at all of these, until I remind them that this is what I did for 5 years while I ran my own company. While I did not make much money, I did get to build about a dozen different applications across a wide range of industries. When your choice is to deliver a product, or pay the rent, you learn a lot, and quickly.