I regularly see programming teams that are terrible. The customers are unhappy. The manager is unhappy. The programmers are unhappy. The code is unhappy. Their system is broken, or maybe they’ve got no system at all. If this sounds like your team, I think I hear a better way calling your name.
In my experience, the fate of the team hinges on being able to find a rockstar developer to lead the charge. While this is the most important position to fill, it’s also the hardest to fill. My recommendation is to do whatever it takes to get an experienced programmer who knows how to lead. Up your budget. Expand your search parameters. Invest in training a programmer on your team who has leadership but lacks platform knowledge. If you’re a project manager, you may have to fill in as technical lead for a while.
Your lead developer needs to be addicted to learning about better programming and leadership. He has to quickly learn your environment from a technical perspective inside and out. Communication is important, and so is a strong desire to teach other programmers. This is the one who will define coding process, release process, and coding standards. He needs to know what good code looks like as well as bad code, and the same goes for good and bad processes. I know it’s a long list. You probably won’t find a perfect fit, but your success depends on getting a near match.
Once the technical lead is in place, the next step is to find programmers who will implement the plan laid out by the lead. I’ve had good success with having coders at various stages of their careers. Regardless of what stage they’re at, every programmer on the team should be interested in progressing their career and should be willing to put in some extra time to get there. Determination to become a great programmer will breed more of that same attitude if it’s something that you deliberately cultivate. So take the extra time to encourage your team members and provide a clear picture of how the future could look.
Because you may have had to go a little over budget on your lead, you might have to play some money ball here with the other developers. Again, you’re looking for a teachable attitude and a desire to become a better programmer. Maybe this means hiring someone who’s been out of the programming game for a couple years or who’s strength was programming in another language. Don’t be dangerous, but there will be some risk involved.
I’m also known for hiring non-programmers for my programmer on deck spots. These are typically software tester roles where down-time in testing is spent doing simple coding tasks. This helps out getting some of the low-level programming tasks done and gives the tester a chance to “try on” programming.
I’m constantly looking for people interested in starting to program. Even if I don’t have an open testing spot, there will probably be a spot opening up in the future. From my perspective, everyone should be a programmer. Is there a better occupation out there? I think not.
Making The Cut
In order for your team to be great, you’ll likely need to let some programmers go. If the quality of work is low, have a 1 on 1 conversation with the programmer. Do whatever you can to change the behavior. If the results don’t improve or there is no effort being put toward correcting the issue, it’s time to think about doing both the programmer and the team a favor. Great teams can’t have members who don’t want to be team contributors.
Employ A System
If you’re seeing a problem, there’s likely a procedure that you can put in place to fix the problem. Once a procedure has been put in place, the hardest part is sticking with it. Don’t implement more rules than you can keep track of or than can be enforced. If you do, you’ve become part of the problem.
Move Towards Success
Building a great programming team takes time and effort. If you have a clear picture of where you’re headed, you can start making incremental changes to start transforming your team. It’s important to remember that part of making a great team is being a great leader yourself. Time to get started.