I’ve been pondering the fact that when I started out on a career in development, I focussed on the technical side of it almost to the exclusion of all else. This was especially true for me since I was coming from a non CompSci background after spending years sticking electrodes in people’s heads and doing biological research. This made me painfully aware that in an industry like programming, if you don’t know your stuff you are useless to your team and your company. Worse, you run the risk of ending up a Net Negative Producing Programmer and reduce your team’s output to less that it would be if you weren’t there.
After a relatively short time it became obvious that this wasn’t enough. Being technically adept is the foundation of our job but certainly not the totality. Even before you get your first job you realise the importance of communication. Not just in communicating your skills to get that first job but then once you’ve got it, then communicating with the rest of your team including the non technical members. This is especially true in an Agile world where you have to be able to tell others what is going on in a way that they will understand.
Once you have your own work to run, you realise that your time management and project management skills get exercised. You need to be able to plan your work around that of your co-workers and make sure that it gets completed when you say it will. Other people will be directly dependent on your output, and you won’t last long if you don’t follow through when you say you will.
So you get work with someone with a different level of knowledge than you – break out the mentoring and education as you are either going to be teaching someone or just as likely be taught by someone and either way you don’t want to waste a minute. One point to make here is that a common feature of all the best programmers I have ever worked with is that they are always learning. This is just as true for people outside of the technical tier as well. The moment you think that you have something down something else will come up, smack you upside the head and show you how little you knew all along.
At some point you’ll be put in charge of a team, so obviously leadership is important but how to create that balance of dedication, humility, passion, enthusiasm, openness, delegation, honesty, supportiveness and responsibility that a good leader needs? Back up to mentoring and education again. Hopefully you already have someone to look up to, someone to model your behaviour on without losing your own special strengths. There is nothing simple about these so called soft skills and the ability to learn what motivates people is a huge asset.
If you want to enlarge your team then you’d best figure out your recruitment process. This is a key area that people seem to be happy to ignore but the reality is that A players only like playing with other A players and if you introduce a sub-standard player you can upset the entire team. You need to figure out how to get the person you want for your team, how you can attract them, vet them and entice them to join.
You have ideas about how you can improve how you work? The QA process can be improved or maybe the company can really benefit from continuous delivery or there’s a new technology that would seriously improve your productivity? Then dust off your sales skills since persuading people is not just for vendor reps, you need to be able to sell your ideas to both your peers and your higher ups. Diplomacy and persuasion are not dirty words and you need to understand how to use them to get done what needs to be done.
Even when you are an individual contributer (or a “card consuming meat machine” as the Agilists would have it!) every one of these skills is one you will need at some point. Each one of these skills could be the subject of a lifetime’s work and take just as long to master but don’t worry because that’s exactly how long you have!