Everyone thinks their own babies are beautiful. Some probably are but there are plenty that really aren’t. In fact I remember one particularly interesting comment -”ugly people produce ugly babies”
This happens in code too.
Collective code ownership has many challenges. Here I focus on the person pitfalls.
Imagine you’ve just spent the last 3, 5, or even 10 years nurturing and grooming an insanely complex (and dare I say “clever”) functional area of a product. This has been your working heart and soul for years - apart from the occasional customer to distract you. It follows your own unique, “perfect” coding style and conventions. You’re so damn good you don’t need unit tests, you instinctively know and understand every intricate tracery and element of logic in there.
Why then if it’s so perfect are you not willing to share?
This is where “Bad Captain” starts to kick in with me…
- Do you believe that every other developer in the building is less capable than you?
(OK, sometimes it might be true but that’s very rare.)
- That’s fine, you can peer review and provide feedback if they don’t meet your standards right? It might be an emotional lurch to start with but seeing someone else succeed and recognize your greatness must surely be rewarding right? I’ll help you if you need.
- It’ll always be quicker if you work on it. It’s just a waste of time and effort to train someone else up.
- Sure. Except if we had 3 or 4 people capable of working on it in parallel we might get everything that’s on the wish list for it done this year and you might be able to do that other interesting stuff that the rest of the team have been playing with. In fact, I’m willing to invest if it’s that important…
Bad Captain starts to twitch…
…and if it’s not, why do I have someone who believes they’re “one of the best” working on it - I want my “best” people on my priority tactical and strategic items.
- You’ve been doing this as your own pet-project on the side and it’s not ready to share.
- If it’s important I want a team on it. I’ll happily lobby for some strategic investment. If it’s not as important as anything else we have committed right now I want you helping the rest of the team out…
- even if you’re good, you’re not “special”, don’t expect to be treated any differently than the rest of the team.
These first reasons are almost valid. But not good enough for me. The more of these I hear the more I start to twitch, the more terse I get and the more I start to frown and tense up.
Suddenly it’s too late! Captain Hyde takes the helm!
Here’s why Captain Hyde thinks you’re not sharing…
- You’re lazy, you’re only any good at this one area and don’t want to have the responsibility of teaching it or learning something new that you’re not so good at. – Time for you to learn a bit about intellectual humility.
- If you relinquish control of this code, you relinquish your seat of power, you’ll make yourself dispensable and that can’t possibly happen, you think you’re far too important for that. - I believe in good people, if you’re one of them I’ll fight to keep you. If there’s a squeeze, even the indispensable will get the push. In fact in my experience, the all-rounders are more likely to find new homes.
- Secretly in your heart you know it’s loaded with technical debt, years of warts strapped onto the sides, a catalogue of compromises and mud that doesn’t mirror the patterns of the outside world in the 21st century. – In fact I could probably find something open source that does the same thing. Quite frankly it’s an ugly baby that should have been put up for adoption or surgery years ago but your professional pride won’t admit it.
Captain Hyde can’t think of any good reason other than personal self-preservation or embarrassment that someone who is a single code owner would be unwilling for other people to work on and learn their code.
Maybe I’ve just been in management too long but I distinctly remember in my early coding years a call with a colleague in San Francisco where he said:
“Damn, you’re the only guy in the world that knows this stuff man”.
- at which point I felt that little clench inside that said. “I need to find and train my replacements up as soon as I can!”
A similar counterpart of mine in the US at the same time got thrown another pile of stock options every time he threatened to leave - that wasn’t my style as a developer and it’s not my style as a manager either.
Now despite all this ranting, there is another very real problem.
Developing collective code ownership from single points of failure on complex products is time-consuming, expensive and probably not what my business stakeholders want my team “wasting” their time on when we already have experts who are “perfectly capable of maintaining this themselves”.
It’s a fair point.
With a team who are willing to share but have no slack, if I want collective code ownership to succeed I’ve got to be able to market it properly.