Another oldie but goodie from the startup days, in the same vein as the rant on process, this time lamenting the lack of teamwork and leadership that was the other side of the coin:
I think one of the most annoying things I’ve dealt with so far are people that are very good at programming but very very bad at anything related to teamwork. Its mildly annoying when its a peer, it is devastating when it is someone in a position of power over you. The kind of people that are supposed to provide leadership and direction, but would rather sit in the corner and program. I don’t know if its a sense of superiority, a lack of trust, or just an introverted personality type, but someone like that really has no business leading a team.
Which would you prefer to be your team leader/development manager/boss – someone who lets their superior dictate everything to be done, doesn’t take any interest in what the team is doing, and works on their own without really communicating with everyone else? Or someone who is engaging and responsive to the team, tries to keep abreast of what’s going on with their work, and does what they can to coordinate development activities?
In my mind, the things that make a good developer are much more than being a good programmer. All you need to be a good programmer is to know enough about programming to not make too many mistakes, follow some best practices, and do your work. Yeah. That’s it. So learn Java, C++,.NET, whatever. Read some books like Code Complete, the Gang of Four, Pragmatic Programmer, Joel on Software, and synthesize your own set of beliefs about software development. Then take the next step – don’t be a programmer, be a development team member. Don’t just focus on your bugs, your requirements, your work. Focus on the team, on the product. Work with your fellow developers. Listen to their ideas, share your ideas, collaborate. If your work is similar to another team members’, take the time to talk to him or her to figure out if you can pool your work. Don’t live in the corner.
One of the things that I like so much about Scrum is the idea of the Scrum Master role. They serve as the overseer of the development process, but are there to deal with the problems that the development team come across rather than micromanage the developers. In my mind, that is one of the most important things a good leader does – coordinates their people, finds out what is hindering the team, and working to remove those hindrances. Rather than getting annoyed with their team members for coming with questions or problems, and snapping at them to use google to find the answer, a good leader should never hesitate to take the time to sit down with someone and make sure they gain an understanding of how to best solve their problem.
Of course, when you sit in your corner and don’t interact with the rest of the developers, you don’t have to take responsibility for any problems.