People over Code
While there is value in the item on the right, I value the item on the left more.
This is in response to a comment by Jdn, I started to comment in reply, and then I reconsidered, this is much more important. A bit of background. Karthik has commented that "Unfortunately too often many software managers fall into the trap of thinking that developers are "plug and play" in a project and assume they can be added/removed as needed." and proceeded with some discussion on why this is and how it can be avoided.
I responded to that by saying that I wouldn't really wish to work with or for such a place, to be precise, here is what I said:
I would assert that any place that treats their employee in such a fashion is not a place that I would like to work for or with.
When I was in the army, the _ultimate_ place for plug & play mentality, there was a significant emphasis on making soldiers happy, and a true understanding of what it was to have a good soldier serving with you. Those are rare, and people fight over them.
To suggest that you can replace one person with another, even given they have the same training is ludicrous
From personal experience, when I was the Executive Officer of the prison, the prison Commander has shamelessly stole my best man when I was away at a course, causing quite a problem for me (unfortunately not something that you can just plug & play). That hurt, and it took about six months to get someone to do the job right, and even then, the guy wasn't on the same level. (And yes, this had nothing to do with computers, programming, or the like.)
Now, to Jdn's comment:
In a perverse way, I can see, from the perspective of a business, why having good/great developers, who bring in advanced programming techniques, can be a business risk.
[...snip...] you have to view all employees as being replaceable, because the good/great ones will always have better opportunities (even if they are not actively looking), and turnover for whatever reason is the norm not the exception.
Suppose you are a business with an established software 'inventory', and suppose it isn't the greatest in the world. But it gets the job done, more or less. Suppose an Ayende-level developer comes in and wants to change things. We already know he is a risk because he says things like:
"not a place that I would like to work for or with."
If you view me as replaceable, I will certainly have an incentive to moving to somewhere where I wouldn't be just another code monkey. Bad code bothers me, I try to fix that, but that is rarely a reason to change a workplace. I like challenges. And there are few things more interesting than a colleague's face after a masterfully done shift+delete combination.
What I meant with that is that I wouldn't want to work for a place that thought of me and my co-workers as cogs in a machine, to be purchased by the dozen and treated as expendable.
You know what the most effective way to get good people? Treating them well, appreciating their work and making them happy. If a person like what they are doing, and they like where they are doing it, there would need to be a serious incentive to moving away. A good manager will ensure that they are getting good people, and they will ensure that they will keep them. That is their job.
Mediocre code that can be maintained by a wider pool of developers is in a certain respect more valuable to a business than having great code that can only be maintained by a significantly smaller subset of developers.
At a greater cost over the life time of the project. If you want to speak in numbers the MBAs will understand, you are going to have far higher TCO because you refuse to make the initial investment.
To quote Mark Miller, you can get more done, faster, if you have good initial architecture and overall better approach to software.
Jdn's concludes with a good approach:
I'm offering services for clients. I can't disrupt their business because I don't think their code is pretty enough.
What I can do better, going forward, is learn to make the incremental changes that gets them on their way to prettier code. My attitude is *not* "well, I can't do anything so I won't even try."
But at the end of the day, I have to do what is best for the *client*. If that means typed datasets (picking on them, but include anything you personally cringe over), then I can partial class and override to make them better, but typed datasets it will be.
I would probably be more radical about the way that I would go about it, but the general approach is very similar, especially when you have an existing code base or architecture in place.
Comments
@Ayende
I think you are starting to get my point.
I'm not saying it is the right thing, or the best thing.
But, when you engage a client, you have to do the best you can to leave them better than where they were.
From my perspective, you have to do everthing to make their business processes better than what they were.
In a perfect environmnet, you can make them change a lot. Good businesses allow for this.
But even a good business can only allow for incremental change. That could be all they are able to do at one moment in time.
I can't see why working with them to accomplish this is a bad thing.
My team have recently been discussing a similar topic (see url). We are a team of around 7 all of whom are working on the same solutions in an agile project. What we have found is that some of us have gradually been implementing some of these new tools/methods/practices in the new areas of functionality, leaving existing areas of the same solution using 'the old method' this has lead to a level of inconsistency in the solutions and 'code that will cost more to support'.
So we've been discussing how we can improve our shared code. Can/Should we adopt better practice? should we upgrade all existing code at the same time (within a solution)?
One interesting result of the discussion was that in the past we have decided to adopt a technique that a developer used successfully. So we created a backlog work item to upgrade the rest of the solution. However this work item was never given enough priority compared to 'new functionality'. So during the discussion we acknowledged that a real emphasis needs to be made on prioritising work items that involve improving the best practice in our code and improving consistency.
"At a greater cost over the life time of the project. If you want to speak in numbers the MBAs will understand, you are going to have far higher TCO because you refuse to make the initial investment. "
Read John Matthews' comment to Haacked at Malik's post here:
http://blogs.msdn.com/nickmalik/archive/2007/06/15/tools-for-mort.aspx#3350008
Since he said it better and before I did, all I'll add is that I think he's right.
"You know what the most effective way to get good people? Treating them well, appreciating their work and making them happy. If a person like what they are doing, and they like where they are doing it, there would need to be a serious incentive to moving away. A good manager will ensure that they are getting good people, and they will ensure that they will keep them. That is their job. "
I don't think I've said anything to suggest I disagree with this. I write off the top of my head a lot in blog posts, but I certainly didn't intend to.
Having said all that, you will still leave. Well, maybe not you specifically, but employees leave all the time, even from jobs they are happy with.
Maybe you decide to pursue a career in horticulture.
Maybe you meet someone and decide to marry them, but they need to move to a different city, and you decide they are more important to you than your job.
Maybe you win the lottery.
And so on and so on.
A good manager always does what they can to make you want to stay, but also always plans on what to do when you break their heart by announcing your departure (often times 6 weeks before the big deployment).
I don't see this as really very controversial.
jdn,
I just experienced a guy leave because the environment provided was not the best that I could have provided. It's way more real than the chance that they'd have left because they won the lottery. I left another company for that reason too. It's much more real than you paint it.
Adam
@Adam
Not sure you got my point. Of course people leave because their work environments are bad. All the time.
My point, though, is that even if the work environment is as good as it could possibly be, people will still leave for all sorts of reasons and good managers have to plan for that.
@ jdn
I think you're down playing it too much by lumping it in with what is considered natural turnover in the industry. I'm talking above and beyond that. There is definitely a whole new level of turn over with skilled workers that care a lot more about their careers than the average.
Adam
Comment preview