About ninjas and submarines
When you work in the software industry, you are either a team player or you roll on your own, there is nothing in between — and both modes are fine.
Over the years I did both, I hacked projects on my own and I was part of a software team. Each mode has its pros and cons, but what really grinds my gears is, when you are supposed to do a software project as a team, but not all members of the team like to play the game like that.
And this is where the ninja disappears, literally. What do I mean by ninja? Let’s have a look at the wikipedia article.

The functions of the ninja included espionage, sabotage, infiltration, assassination and guerrilla warfare.
… and this is how a ninja acts.
Hiding in the shadow of a tree, he avoided being seen under the moonlight…
Okay, so basically a ninja harms somebody without being spotted, in terms of software development we could put it this way.
The software ninja infiltrates the codebase with some ninja code, which he is silently working on without interacting with the team at all, and thus harms the project.
But why does the ninja code harm the project? Not because it may ignores coding guidelines, nor because it may not stick to design decisions of the team or because it maybe lacks of a code review from a team member. None of all these reasons that usually classify code as poor code.
It is because the ninja code is not a part of the software, in fact, it is apart.
Having a code ninja in your project has both technical, economical and social consequences.
I already mentioned some technical issues, like code that does not stick to your guidelines or an overall system design. These issues from a code perspective are quite easy to solve, if you intervene early. You just change or delete the ninja code.
But you as a project need to invest some precious time on that, time that somebody needs to pay for. Usually customers do not care about your software design nor your code quality, so it can be tricky to invoice the removal of ninja code.
Besides the technical and economical consequences there are social conflicts, which in my opinion, is the worst issue, when dealing with a ninja coder. You as a team can only be effective and powerful, if you act as a unit, if you can trust each other and if you enjoy working together. But this can be a challenge, if there is somebody within your team, that constantly ignores things, you as a team agreed on.
How can a team solve this conflict? Well, I guess this is no surprise… talk to each other. I am a big fan of retrospectives, so we used this meeting for improvements within our team. Be grown ups and talk to each other like that.
We call ourselves developers or engineers, our job is very technical. We get paid for being very good with this technical things, but in the end we are humans that need to come along with each other in real life, not just in our codebase.
