No More Ninjas
Let's take a brief look at the characteristics of the ninja:
- Ninjas have great skill
- Ninjas work alone
- Ninjas are stealthy
- Ninjas use unorthodox tactics
- Ninjas are specialists in espionage, sabotage and assassination
Great Skill - That sounds like what I want in members of my team, provided of course that it doesn't come with Great Arrogance.
Working Alone - Uh oh. No thanks. I want people who collaborate and act as a team. Paired programming for a large portion of the day is a must.
Stealthy - I really don't want anyone sneaking around in my code. I want clear names and explicit abstractions. Make your movements obvious. Create work that you are proud to sign (and then sign it on check in, not in comments.)
Unorthodox Tactics - I liken this to creating your own ORM or web framework. Sure, there may be advantages sometimes, but these are most often outweighed by the constant maintenance work required on the framework, not to mention the requirement that you train new developers not just in the domain, but also your nonstandard tools.
Espionage, Sabotage and Assassination - When I get into a code base that has been written by ninjas, I often feel like they must have been spies from a competitor come to sabotage the code. The code written by these ninjas is full of traps and tricks and kills productivity.
What I want on my team are Samurai. A Samurai follow a code of conduct that emphasizes the following:
- Martial Arts Mastery
Martial Arts Mastery - Skill mastery is definitely something desirable for team members. Like the Ninja, the Samurai focuses on constantly improving his already formidable skills.
Loyalty - Who doesn't want loyal team members? These are the guys who treat each other with respect and who will work together to complete the tasks at hand.
Frugality - With regard to code, I like to think of frugality in the terms of good architecture. This means minimizing the number of classes, methods and abstractions while still expressing all of the necessary concepts of the domain.
Honor - This means always doing your best. Do what is right for your team and your code even when it is hard. Write your tests first even when you're under a deadline. Remove duplication even when it's hard. Complete the highest priority tasks first, even if others seem more fun.
Anyway, please try to be less of a ninja and more of a samurai.
As for Rock Stars, if the perks of your job don't include an unlimited supply of illicit drugs and slutty groupies, you are not a rock star! KTHXBAI!