Fire your best people…reward the lazy ones
Fire your “best” people…reward the “lazy” ones
In my experience, what most people consider to be their “best” people are often the root of most problems. It’s the difference between troubleshooters and troublepreventers.
Let me explain…

Bill is a troubleshooter (only). Many consider Bill to be the best employee in the company because he solves almost any problem that comes into the door. However, unbeknownst to many (especially management), Bill is the one causing most of the problems. Bill knows the purpose of every hard-coded lookup value and is the fastest to manually deploy the application to WebLogic using its web console. For instance, he knows that “14″ means a “transaction that is waiting for approval by second-line management”. However, instead of creating a human-readable constant, Bill hard codes the number “14″ in the source code. Therefore, Bill is the only one that can easily maintain these methods. In my personal experience, someone like Bill doesn’t do this for nefarious reasons, he’s just not thinking about how the next developer may need to maintain it. For every time a method is written, it’s read (and maintained) ten times (10:1). Therefore, people like Bill need to be writing source code for other humans, not the computer.
Let’s have a look at Peter…

Peter is a “lazy” developer (a troublepreventer). Because Peter is “lazy”, he hates doing the same thing twice, so he generalizes common functionality into a delegating class, creates interfaces for implementing classes to adhere to, or he writes build scripts that compile, integrate the database, runs tests and inspections, and deploys the software the same way every time. Peter finds it mind-numbing to repeat himself. Again, Peter is lazy so he doesn’t mind spending two hours automating something that normally takes 10 minutes to run manually. Why? Because, he very quickly reaps the benefits of this extra effort since every time the process is run he gets those 10 minutes back and even more importantly, he eliminates the possibility of human error (which, again, saves time and money).
The (”lazy”) troublepreventer thinks ahead. He extracts variable information into common properties files, seeks to reduce complex code, and automates repetitive, error-prone activities such as the build and deployment processes. He also ensures that others can very easily repeat what he has done. Anyone that has worked with me for even a day knows that I often sound like a broken record when I say “Is it in Subversion?” or “Have you updated the Wiki?” To me, if the knowledge is locked in your head, you are a less valuable, not more valuable, resource. Troublepreventers put their knowledge in the system, not just their heads, so that it runs the same way every time.
People like troubleshooters because they can solve a problem when a project is under pressure such as getting that emergency fix out the door immediately. Without question, you need troubleshooters on your project. However, many times the (exclusive) troubleshooters are the ones that cause the problem in the first place, be it a hard-coded value, duplication of code or a large complex method only they can understand.
Before you start thinking that I’m trying to gather together a group of slackers, I’m suggesting the complete opposite of this. I just want people to think about the total time involved, not just fixing the symptom. There are people that are both troublepreventers and troubleshooters. These are the people you want to keep and reward. However, on a given team, I’d opt for more troublepreventers than troubleshooters as they save everyone time, money and headaches.

August 17th, 2007 at 1:55 pm
Paul, you are right on with this post. Not only do people *like* troubleshooters, but people like *to be* troubleshooters. If you’re a troubleshooter, you’re like John Wayne, riding over the hill at the last minute to save the day. (I guess the modern day equivalent of John Wayne would be Jack Bauer.) Either way, it’s *hard* to encourage people to be troublepreventors, but that’s what we need to figure out how to do.
I actually think that people, left to their own devices (and in the absence of time pressure), tend to do the right thing. Perhaps some managers are guilty of encouraging people to be troubleshooters just by piling on too much pressure on timescales?
August 17th, 2007 at 3:57 pm
[…] The “Lazy” Ones Filed under: Software — Lokesh Shah @ 02:55:02 TestEarly.com is talking about why to Fire your best people…reward the lazy ones. […]
August 17th, 2007 at 4:04 pm
Post sympa : Fire your best people…reward the lazy ones…
En voilà un post sympathique , si seulement ce mode de pensée était suffisamment répandu… Je ne parle…
August 22nd, 2007 at 9:25 am
I agree with Nigel that software development has still mainly a “heroes” and “can do” culture where writing complicated algorithms and last night efforts are more considered than… “just thinking”. It is true also that this situation is also influenced by how customers and managers handle projects.
August 24th, 2007 at 4:49 pm
[…] On a somewhat similar note, Paul Duvall discuss why you should fire your best people … reward the lazy ones. Now, the title is of course a bit misleading although there is some truth to it, but the message of the post for me can be boiled down to the following quote from the post: […]
September 14th, 2007 at 10:09 am
Preach on it, brother man!
I see this every day where I work. I’m working on a project to fix some issues with some software that was coded exactly as you say.
I’m essentially rewriting the whole damn thing. I’m sick of it breaking constantly with no way to figure out what went wrong unless I have intimate knowledge of some smelly little bit of code embedded in some object over here on the side that you don’t even know is there.
So frustrating.
September 14th, 2007 at 11:16 am
OMG. This has got to be one of the best and most insightful things that I have read in a very long time. Thank you.
September 14th, 2007 at 11:18 am
Another question to separate the troubleshooters from the troublepreventors is “Is there an automated test to catch it early if it happens again?”
September 14th, 2007 at 11:24 am
My observation is that the ‘troubleshooters’, the ones that have all of the tribal knowledge locked up tight in their heads, often have the political wherewithal to get any ‘trouble preventer’ they don’t like fired.
Oh, I almost forgot. I need that TPS report by close of business today. M’kay. Great.
September 14th, 2007 at 10:12 pm
I don’t really agree. This implies that troubleshooters cause the problems, when in fact this isn’t always the case.
September 15th, 2007 at 8:34 am
Please don’t label the office turtles Lazy and the hare Best. Fastest does not mean Best, nor does Slow mean Lazy. Someone who is careful and takes the time to do things properly and document their work should not be considered lazy just because they aren’t as fast as the office cowboy. Lazy is the person who spends their day killing time and not producing much at all. As Franck said, it’s important that supervisors and managers understand the difference.
September 15th, 2007 at 1:09 pm
OJ - You said, “I don’t really agree. This implies that troubleshooters cause the problems, when in fact this isn’t always the case.” True, everyone creates problems. In my experience, however, the ones that only think of troubleshooting often cause the problems. If most people on a team *only* think of being the hero and not preventing the problem from occurring again, you’ve got a dysfunctional team.
Elmo - “Please don’t label the office turtles Lazy and the hare Best” - Irony. People tend to think it’s “so much extra work” to improve or automate something and they “don’t have the time”, but when I ask myself why *I* spend the extra time in improving something it’s because I don’t like doing the same stupid thing over and over again, so I’m making a play on the word ‘lazy’.
I think you need both troubleshooters and troublepreventers on a team and because you’re a troubleshooter, it doesn’t mean you can’t be a troublepreventer and vice-versa. In my opinion, our industry has too many troubleshooters (without enough trouble prevention) and not enough troublepreventers.
September 17th, 2007 at 2:27 am
an unfortunate reality of the software industry is that people often get assessed based on how quickly (albeit dirtily) they can implement a quantity of functionality now, rather than the quality, which rarely gets reviewed and assessed immediately. Fortunately this catches up with people. Unforuntately it usually only catches up with them after they have left and others have to take over their work. Also unfortunately, it is standard practice of new developers to blame developers whom they are replacing, who aren’t around to defend themselves, so…
The answer is that projects should perform code reviews as part of the project plan, and mentor those developers whose code is not up to scratch.
September 23rd, 2007 at 7:35 pm
Sorry, but that article is absolutely wrong. I am a web developer for a long time and most of the time only managers make troubles. “Hey, I purchased/found free script. It is very simple, but something is not working there. Please, fix it by the evening….”. Or similar situation - “We have fired that new developer, that you told is not good enough… I thought he will help you… I need his project completed by the end of the week…” I think experienced programmers can mention much longer list manager stupidity. So, what are you waiting for from developers???
September 23rd, 2007 at 10:34 pm
My experience has been that people who spend a lot of time to “generalizes common functionality into a delegating class, creates interfaces for implementing classes to adhere to” are not the same programmers that “seeks to reduce complex code.” Unfortunately the programmers that seem to know the most about object orient design, design patterns, and other methodologies are too idealistic and academic to get anything done. If you are building a framework or a library that is one thing, but when I program I am building custom software and web sites. Too often the people I work with want to create gratuitous frameworks, and over generalized libraries that aren’t practical. I’m venting because this type of rhetoric and idealization is the type of stuff that seems to motivate them. If most of the programmers out there had a stake in their projects they would come to realize that the “best” people are the ones that produce results, and are on projects that succeed, not the one who never hard codes a value. the rate of software projects that are failures is astronomical (i think i read 90% once in the economist) and this attitude of putting software “quality” first far beyond budget and time constraints is likely part of the problem. Sounds like someone has sour grapes because someone else is getting the credit they deserve for producing results and being labeled the “best” employee.
being assessed by getting thing accomplished is not “an unfortunate reality”
also people who are maintaining software and “essentially rewriting the whole damn thing”… you just suck at reading other people’s code. you are lazy and egotistical and likely wasting the money of whoever is unfortunate enough to have hired you.
September 25th, 2007 at 7:13 am
second quote should have been “The (”lazy”) troublepreventor thinks ahead. She extracts variable”
>.
September 25th, 2007 at 7:17 am
I know another type of a coder: troublepreventer who creates very nice code but so complex that nobody is able to understand it.
September 25th, 2007 at 7:36 am
In a group I lead I once edged a “heroic” programmer out the door and into another job. Upper managment where scared to death - what would we do without him - he knew all our sysyems so well and could fix anything. Not only could he fix anything he was really responsive, he’d hack live systems without fear (or specs, tests or common sense). No worries … our reported fault rate slid from about twenty five to thirty major incidents a month to one or two in the first three months of his absence.
September 25th, 2007 at 7:52 am
I largely agree, but there is a problem with getting rid of the “troubleshooter”s. Far too often the “trouble preventer”s take too long.
Yes, what they produce is higher quality, yes, what they produce doesn’t need to be rewritten or modified half as much, but also yes, they take the extra time this requires to do this which a business often can’t afford.
The overall time taken may be longer, but when your business needs an immediate answer to a technical issue, even a completely new one with not a single statement of code written, then in order to the business to reach that target (and possibly to stay afloat) then “trouble preventer”s sometimes just aren’t fast enough.
There is a time and a place for prevention, but too many “trouble preventer”s don’t know when it’s not that time, which is why many “troubleshooter”s get into the position of it being “their” system which only they can really maintain - they’re the one’s actually producing the code to meet the company’s needs.
Long term ideals can only be reached if there is a long term.
September 25th, 2007 at 8:27 am
The IT world is full of “Heroes”. It is so frustrating to watch someone get rewarded for fixing a problem THEY created by not testing. If your code ALWAYS works you will probably not get recognized or rewarded.
September 25th, 2007 at 8:34 am
“Before you start thinking that I’m trying to gather together a group of slackers..”
Hi, I’m down with that. Where do we start .. ermm .. never mind.
September 25th, 2007 at 9:20 am
@andrew: re your critism of people who is essentialy “rewriting the whole thing”: I will look forward to see your code on Worse Than Failure site.
And there are too much of quick-n-dirty solutions that give results in the shortterm but fail horribly in the longterm.
And regrettfully there often isnt alloted enough buget and time by the management to do an satisfingly proper job.
September 25th, 2007 at 9:50 am
On the long term, I find people always appreciate my work. They know I’m a trouble preventor. I always feel the pressure in the beginning for being ’slow’ however.
September 25th, 2007 at 10:04 am
Andrew - I disagree, you could account bad sofwtare to a lack of quality in building the software in the first place, both in finding and fixing bugs, that tests cover requirements and that additional features and changes don’t introduce further bugs or because of poor design increase costs by untangling the utter mess in the first place. Making a bad job just to meet a deadline just costs money. If management allow for proper reactive project management such as Scrum and software methologies like TDD or XP then software quality can be obtained AND the project will ship when its supposed to. The fact that the people mentioned exist in our industry is only because management allow them to when really a communicating/reactive team will avoid all these problems and get the job done.
September 25th, 2007 at 10:50 am
“also people who are maintaining software and “essentially rewriting the whole damn thing”… you just suck at reading other people’s code. you are lazy and egotistical and likely wasting the money of whoever is unfortunate enough to have hired you.”
I will second that one. Go Andrew.
September 25th, 2007 at 11:23 am
Just because someone is good at trouble shooting a problem doesn’t mean they can’t plan ahead and prevent problems. I find its the same skill set that allows people to think out of the box and come up with possible problems - are often the same people that can think out of the box to solve a problem.
September 25th, 2007 at 11:37 am
I am definitely the trouble-preventer. I consider it the ultimate goal of software engineers and programmers to code themselves completely out of a job. But when we get close to this goal, such as with IBM’s self-administering OS400, nobody pays attention–because it’s not making trouble. And they force you to implement whatever more often counter-productive ideas that come to mind next.
September 25th, 2007 at 11:47 am
The company I worked at previous to the current had a really smart guy named Dave. He coded an information system that literally drove all of operations. It worked truly flawlessly. But when the founder sold the corporation, the new CIO started saying things like “I want functionality xyz” and even though we tried to say something like “We already have that functionality integrated into the system, here” then he’d say, “I don’t care about that. I know of product xyz that did it well for us back at company abc. Your job is to implement it.”. I left the company one year later, along with my direct supervisor and most of the lead software engineers and programmers. The company’s operations were near collapse and upper management was taking it out on us–literally calling us lazy and not replacing employees who already left. I, like many other programmers, were working from about 7:00am to somewhere between 10:00pm to 2:00am, six or seven days a week–intensively trying to accommodate stupidity and arrogance.
September 25th, 2007 at 12:39 pm
You know, I was trying to get at a similar idea yesterday when I was writing about rewarding successful ’status quo’ strategies instead of creative attempts to do something differently that might fail.
I like your framework for thinking about this.
The comments too are related to the difficulty in assessing quality work. Often that defaults to quantity because quantity is easily measured. Same reason we prefer to quantify things even if the proxy number doesn’t accurately measure what we want.
Management doesn’t want to take the time to really learn how good each employee is, and would rather rely on a proxy such as ‘lines of code written’ or something.
September 25th, 2007 at 12:41 pm
good point.
nice reply andrew.
troubleshooters are not replaceable… or very hard too.
in an agile project structure ‘troublepreventers’ create extreme overhead. although it is great to implement design patterns and strong object oriented sometimes the code is uselessly encapsulated making almost impossible for anyone besides the ‘troublepreventer’ to catch exceptions and bring rapid modifications. so he becomes a ‘troubleshooter’…
all this being said, the software architect has to be in charge of creating a flexible and easy to maintain design.
the example you are giving is correct in a not-so-well managed software company. which i agree is the general case.
fire your troubleshooters and your clients are going to leave you.
hire only ‘troublepreventers’ and the operational expenses are going trough the roof.
a project well designed from the beginning can settle this issue and both types can symbiotically coexist.
your definitions of the two types are quite simplistic too.
great point though!
September 25th, 2007 at 12:41 pm
I can also sound like a broken record about things like SVN about tickets. The following took place recently:
me: Did you create a ticket for X?
coder: No. It was a quick change.
me: Then what did you enter for your billable time?
coder: I forgot to do that.
me: So the client won’t get billed for that work?
coder: Um, no.
me: So we won’t get paid. Go fix that.
My suspicion is many people (not just coders) don’t really think about how they affect the bottom line for the company. I didn’t when I was younger and working part-time retail at a job I completely detested. For me it was show up for a 4 hour shift and get paid $n.
It also seems many people don’t think long-term.
September 25th, 2007 at 12:51 pm
The world is grey, not black and white.
September 25th, 2007 at 1:08 pm
I’m confused. You’re arguing that people who spend extra time up-front doing anything beyond just getting something up and running should be termed “lazy”…?
Seriously, I wonder if the issue here is the same as the issue around response latency? A program that “freezes up” for long periods of time will be judged to be slower than one whose response time for any individual action is less than the perception threshold, even if it has a much higher throughput overall - because latency is a much more noticeable source of delay than cumulative time. It sounds as though the same might be true of developers; the person who just hacks something up as quickly and dirtily as possible may well be regarded as “faster” than the one whose work is always thorough, maintainable, and correct - even where much more time is spent overall on the first guy’s code.
I guess one could see the whole “agile” thing as developers trying to answer the question “how can we have low-latency development and maintainable code at the same time?” - because for all coders hate being presented with unmaintainable code, in the absence of any other constraints the answers preferred by the people paying the bills are the “right” answers - and management, just like computer users, have consistently favoured latency to the exclusion of considering cumulative time.
And you know, perhaps they’re right to do so. No matter how many “trouble preventors” you employ, nobody has perfect foresight; but a troubleshooter can get you out of whatever hole you fell into. By way of analogy, look at garbage collection vs manual memory management, demand paging vs explicit segmentation, or just-in-time compilation vs compile-time optimisation. The pattern is the same - static analysis can produce better optimisations in some cases, but dynamic algorithms produce better average performance across a wider range of workloads, including some on which static analysis fails altogether. And computers don’t make silly mistakes in their static analyses.
September 25th, 2007 at 1:15 pm
@Andrew - There’s a happy medium between churning out lots of nasty code and overengineered solutions. Refactoring is one of the tools we use to get results quickly and keep our design maintainable.
Pretty much every programmer I know can write whatever code it takes to solve a problem. That’s rarely the issue in failed projects. Most projects collapse under their own weight after they become a rat’s nest of code.
In the end you’re going to be screwed if you take too extreme an approach to software. Banging out code has its place during crunch time, but it’s important to be able to massage the design to be more maintainable. Likewise, too much design can result in the project having so much conceptual weight that nobody can understand it.
Producing business value is always the most important thing in my mind. Part of that is understanding that we write and refactor to maintainable code, otherwise the value we add today will disappear in six months. Which is okay if you’re a contractor, but the rest of us have to live with the monsters we create
September 25th, 2007 at 1:44 pm
May I refer you to the story of the lazy man from Robert A. Heinlein’s Time Enough for Love. The man who was too lazy to fail.
September 25th, 2007 at 2:07 pm
[…] Paul Duvall has an interesting post about rewarding your lazy programmers - the ones that write good interfaces, abstractions and easy to support code. They are good programmers because they are so lazy they don't want to have to support the code or help others figure it out so they write their code well the first time. This idea meshes really well with my favorite management rule: give anything really tedious and repetitious (i.e. automate-able) to a good programmer. They will automate it for you just so they can move on to something more interesting. Bookmark:These icons link to social bookmarking sites where readers can share and discover new web pages. […]
September 25th, 2007 at 2:13 pm
I’m going to agree with Andrew on this one. Not that I don’t agree with the article to a certain extent—there are far more troubleshooters out there without a clue as to how to write a decent abstraction—but over-engineering and obsession of software purity are just the opposite end of the bell curve.
You need people who know not only how to write a well-abstracted system, but also _when_ to do it.
September 25th, 2007 at 3:21 pm
Have you tested this with controls? How many times?
September 25th, 2007 at 3:29 pm
Heh, I put down something along the same lines before, I think you’re right.
“Why Good Programmers Are Lazy and Dumb”
http://blogoscoped.com/archive/2005-08-24-n14.html
September 25th, 2007 at 3:55 pm
I’d like to clarify any possible confusion. I agree with the commenter that said something about the world being grey, not black and white. I polarized the ‘troubleshooter’ vs. ‘troubleprentor’ to make a point. Most people are not one or the other exclusively, but tend to lean one way. Based on my experiences on many projects, I do believe we have too many that lean more toward troubleshooting, without considering troubleprevention. Yes, there can be people that will take the troubleprevention perspective to an extreme and possibly get nothing done on a given task. This is where experience and professionalism are key. I will repeat, you need both troubleshooters and troublepreventors on a project. I’d like to see more *experienced* professionals that bring their troubleprevntion skills to the problem. I will also point out, again, that the word ‘lazy’ is used ironically to an extent. A lot of what I’m saying comes down to DRY (Don’t Repeat Yourself) because it’s boring for me to do the same thing over and over again. I guess I’m ‘lazy’ when it comes to that.
September 25th, 2007 at 5:44 pm
Sometimes, you need someone that fits into both categories. There are times when you need the troubleshooter and the troublepreventor.
The catch is, you want the troubleshooter to also work like the troublepreventor. You also have to have management that allows appropriate time for post-mortem to determine what went wrong and to make any long-term fixes (assuming a short-term band-aid was applied to restore operations immediately).
Far too often I have seen firsthand where there is not any or not sufficient time given to post-mortem analysis and response. This is the fault of management. It doesn’t matter if you have the “best” troubleshooter or the “lazy” troublepreventor, if management does not make the time available to fix things right, things will continue to degrade.
I agree completely that the person that hard-codes constants scattered around the code is also a big problem. However, that is behavior that can be modified. However, even if the troubleshooter takes the necessary precautions and makes things easily readable for other programmers to pick up later, in emergency situations solutions are often created with the immediate short-term goal of restoring functionality. In the middle of an outage, if the two choices for a solution are 20 minutes to fix the immediate problem or 3 days to implement a long-term solution, then odds are the right solution is the immediate fix — a band-aid.
However, after the band-aid has been applied, the urgency of the situation is gone, and far too often the 3 days to truly fix the problem is never done or is put at such a low priority that it might as well never be done.
It’s easy to fall into that trap, and it’s very hard to get out of it — especially if management doesn’t truly understand the difference between a band-aid and a solution.
September 25th, 2007 at 7:05 pm
There is a rare breed of programmer who both produces at an exceptionally high level of quality, and does so very quickly. (a combo of the types mentioned above — great hackers/automators + troubleshooters/debuggers)
Numerous studies have shown that 10x speed (and quality) output from these elite devs compared to the average is not all too uncommon.
So 10x the output/spped, and yet they maybe make 10-20% more than everyone else? These people deserve $200-300k a year at least, and would be worth it instead of hiring armies of second-rate devs. That’s why so many hackers eventually go on to start their own company — it’s the only way to extract that latent value in your talent.
September 25th, 2007 at 7:15 pm
[…] Test Early » Fire your best people…reward the lazy ones An awesome post, similar in theme to my “Theory of Management”, but built off of “Office Space”, and therefore 900% better. (tags: business management programming officespace) […]
September 25th, 2007 at 11:08 pm
The trouble with being a “Preventer” is that once you get everything automated and greatly lessen the possibility of human error, you fall victim to the cost-cutting measures of a finance department that has no idea what you do and your job is now being done by someone in another country.
So which would you rather be - the unemployed preventer or the gainfully employed fixer?
Keep in mind that normally the only people who can truly appreciate the value of the “lazy” worker are fellow IT employees - everyone else in the company will actually see you as lazy.
September 25th, 2007 at 11:29 pm
agree with JRP.
we need both troubleshooters and troublepreventers. And this is true in other disciplines as well especially areas like customer support. While you are getting the systems and processes ready to prevent future problems from occuring , you need troubleshooters to fix the problems that are happening NOW.
September 26th, 2007 at 12:29 am
Just a comment about “automating” everything. I am maintaining a huge software, mingled with massive shell scripts to do some tasks. 90% of our troubles come from these shell scripts that don’t run on the customer’s computer, because eg. it has a different version of awk or sed or grep or ps or make. It is impossible to write a shell script so that it will “run everywhere”. So be careful with scripts.
September 26th, 2007 at 2:55 am
Yes I really appreciate your thought and could not agree more with you.
September 26th, 2007 at 3:06 am
Scarily accurate stuff. Great article!
September 26th, 2007 at 4:28 am
@Andrew
‘My experience has been that …… because this type of rhetoric and idealization is the type of stuff that seems to motivate them.’
At this point you had my sympathy - I’ve come to learn that an idealistic approach to code aesthetics often lacks pragmatism, and there is a good compromise to be reached between the hare and the tortoise (as advocated in the original post).
But you raised my suspicions here with this bland platitude with a sting in the tail: ‘the “best” people are the ones that produce results, and are on projects that succeed, not the one who never hard codes a value’
and then lost me completely with this partisan, blinkered red herring:
‘this attitude of putting software “quality” first far beyond budget and time constraints is likely part of the problem.’
The essential problem with this POV is that it is only valid for small, mickey-mouse one-off projects that operate in isolation and will either be jettisoned by the creators, or only ever be maintained by one person.
The normal reason that quality is beyond budget and time constraints is that those constraints were always unrealistic for anything other than a “let’s get it to market first, then worry about our reputation later” approach.
For any large code base operated on by a fluid team of programmers, the long established correct principles of reuse and documentation (practiced by troublepreventers, but never by troubleshooters) are ESSENTIAL to the long term evolution of software.
The self-serving, arrogant cowboy approach you advocate in your last abusive paragraphs creates EXACTLY the sort of problems that cause later releases of software to miss deadlines.
The RECORDED time taken for these cowboy-coded projects (and I fully acknowledge that the coder himself is sometimes only programming that way because of the pressure he is under, not because he neccessarily is incapable of thinking with foresight) NEVER includes the ‘DEFERRED time’ maintaining the uncommented unreadable crap that these people produce in the first place.
This deferred time is of course added on to the record of the unfortunate professional who does the work which should have been done by the (often long gone) cowboy in the first place.
September 26th, 2007 at 4:30 am
I am a manager and a developer. I don’t like the title because any manager who would fire the best people is an idiot. So what does it mean to be the best person? Certainly not laziness. This falls into the developer confusing efficiency with laziness. Some people think they are clever by calling themselves lazy when they really mean efficient. You will never impress anyone in business by calling yourself lazy. Language aside, I understand the point of the article but I do not agree that troublepreventors add the most value to the business. You have to be able to solve as well as prevent. Writing good code means writing efficient code but if you can’t troubleshoot, you are worthless. I have seen developers write good code but can’t fix problems to save their lives. I have also seen developers who can solve problems with the best of them but write horribly inefficient code. Good developers do both. That is what I look for when I hire.
September 26th, 2007 at 7:16 am
[…] I came across this article yesterday and it made a lot of sense to me. The idea behind it is that there are troubleshooters and troublepreventers. The troubleshooters are the ones that can fix almost any problem with incredible speed, however, they do it at the expense of no one else knowing what they did. Troublepreventers, in an effort to not have to fix that problem again (being lazy), fix it in a much better, more effective way. It might take l o n g e r to fix, but in the l o n g run it’s probably a better solution. […]
September 26th, 2007 at 8:10 am
Your example is portrays an ideal environment. Generally speaking, the lazy developer does not write code as described in this article. The trouble shooter is brought in to find these challenges and force the developers to write better code. It is a rare breed of programmer that actually produce well written code.
September 26th, 2007 at 8:31 am
[…] I’m in kind of a conflict. I’m expected to be a troubleshooter at my office but what I wanted to be more is a troublepreventer, the troubleshooter is still required for some stuffs but doing the same stuff over and over again is not something I’m looking forward to. […]
September 26th, 2007 at 9:11 am
DeveloperManager -
Of course, I’m having fun (’clever’, i guess :/) with the language by saying your ‘best’ people and ‘lazy’ developers. I expect that irony is not lost on most readers. I do understand that this has caused some readers to confuse ‘lazy’ with slow, which I did not intend, but I understand how this could be misappropriated.
>>You have to be able to solve as well as prevent.
As I mention in the post ‘Without question, you need troubleshooters on your project…There are people that are both troublepreventors and troubleshooters. These are the people you want to keep and reward.’
September 26th, 2007 at 12:07 pm
[…] Another chapter in my work life is starting, giving me some new direction and new challenges. And I’m lovin’ it. Will I get organized? Will I have check lists and 43 Folders style organizational skills miraculously materialize? Probably not. Will I be a troubleshooter or a troublepreventer? Only time will tell. I do know I’ll need my headphones and I need to update my iPod tonight to include the new Vedder album. […]
September 26th, 2007 at 2:54 pm
Also, I noticed that some of you noticed my error in which I referred to Peter as a “she”. This is because when I first wrote the blog I had a “he” and a “she” and then as I posted it, I changed it to actual names “Bill and Peter” to liven it up and I didn’t go back and change the pronouns. It was a simple mistake on my part.
September 26th, 2007 at 9:49 pm
But has anyone ever had any success with a dual estimate? Something like “10 hours to just get it done, or 60 hours with analysis, design, documentation, testing, and abstraction for possible future reuse.”
Business people (and their customers) seem to not get much value from admiring the OO purity of an abstracted design or detailed technical documentation intended for long-term maintenance of something that is likely to be obsolete by next year anyway.
Sometimes good-enough code is better than perfect code, and selling a 10-hour job is better for everyone than losing a 60-hour job.
September 27th, 2007 at 1:24 am
I got to agree with Shanti when she says there is a rare breed of developer that is 10x more efficient and does produce good quality code.
Also I like this comment:
“Writing good code means writing efficient code but if you can’t troubleshoot, you are worthless.”
I rarely meet someone that is great at troubleshooting, but writes terrible code. But I frequently work with people who can’t troubleshoot and want to rewrite everything and blame others for writing unmaintainable code.
September 27th, 2007 at 5:07 am
I am a nurse that has written a lot of software. My screens don’t look as ‘pretty’ as a professionals would but other nurses like them better. Why? Because they not only are written under the ‘trouble preventer’ philosophy, I know the work flow. I know how nurses think, how much having to type a single extra character or make a single extra mouse movement costs them. If the computer fix takes two days to write, but saves them ALL several seconds dozens of time a day it is worth it. Wish everyone understood that. I put up with a lot of ‘pretty’ junk from other programmers.
September 27th, 2007 at 8:06 am
@Scott
Well, I think 6x is rather extreme for an example. I wouldn’t know a general figure for guidance, but the earlier the troublepreventing effort is put in the less difference it makes to the bare-bones estimate. And of course the amount of troublepreventing effort you put in depends on the scope of the project and the pragmatism of all those involved in it.
btw, it may be the job of salesmen to promise the earth, but I don’t believe we are then honour bound to provide it.
@Shanti and Andrew
I’ve heard of these ultra-productive ‘rockstar programmers’ (a very irritating phrase), but I’ve never met one in real life (though I have encountered significant difference in productivity between individual programmers). Perhaps they exist though, I don’t know.
Andrew,
I would say my observations are the reverse of yours, at least as far as I interpret the use of ‘troubleshooter’ in this article. Good programmers are of course capable of getting a quick fix out the door when needed, but they also recognise they are part of a team. People permanently in ‘troubleshoot’ mode can sometimes cause more trouble than they shoot. And the converse lack of productivity is of course sometimes true for ‘academic’ programmers.
I think the problem comes when people fall entirely on one side of the argument - the best programmers should combine the qualities of both troubleshooter and preventer, and have the ability to understand when each approach is needed.
@Jeff
Your point is the most depressing, and probably the truest - it is not how good you are, it is how good you look…
September 27th, 2007 at 8:28 am
@Dean
The sort of programmers this article is complaining about don’t listen to users, as they are not politically important, and ‘get in the way’.
So by understanding and supplying the user’s needs, not what will earn you surface brownie points with flashy salesmen, you are in fact taking the troublepreventer approach.
September 27th, 2007 at 12:46 pm
This reminds me of my old post
Why are all great developers not the best Architects and vice-versa?
http://vikasnetdev.blogspot.com/2006/10/why-are-all-great-developers-not-best.html
September 27th, 2007 at 12:47 pm
My thoughts are that one has to wear the one or other hat at different stages of development process.
I can be the lazy developer while designing the solution and had to be the fast one while fixing the issues during QA testing.
Lazy ones do get hard time at start of project by Management. But once they are spoted, they are awarded with complex assignments, where as fast ones only get the routines programming assignment. (Some people may not consider complex assignments as awards.
http://vikasnetdev.blogspot.com/2007/09/fire-you-best-people.html
September 28th, 2007 at 3:18 pm
[…] Prevention is better than cure I loved this posting. I think it applies just as much to DBA’s and System Administrators. I have to confess I have had the occasional thrill of playing the hero at the scene of a car crash of a situation. It can feel good. In fact I think you can easily get addicted to being in this type of situation, where you hold the key piece of knowledge to fix a particular problem. I think I have at times been on the edge of the precipice of enjoying it too much and almost hoping for another opportunity to be a troubleshooter. But I see the danger of enjoying being a troubleshooter and I can see the benefit to the organisation of being a “troublepreventer”. […]
September 29th, 2007 at 7:14 pm
[…] [CODE] Fire your best people…reward the lazy ones […]
September 30th, 2007 at 2:42 am
[…] Fire your best people…reward the “lazy” ones - In my experience, what most people consider to be their “best” people are often the root of most problems. It’s the difference between troubleshooters and troublepreventors. […]
October 3rd, 2007 at 1:11 pm
Nicely written stuff. While the pattern is obvious, I think your analysis is too simplistic. I mean, everyone likes processes, but the truth is, that there is a gradient. Some people I’ve worked with will spend 2 days when a deadline is looming to refactor something that could be hacked in 1hr. Real world development is not all design patters and change management [edited], a lot of it is dealing with crazy clients, disorganized managers, over-ambitious sales guys, etc. When push comes to hack, hackers have a place too.
October 4th, 2007 at 9:02 am
My current team “leader” is clearly a troubleshooter and keeps total control over the design of the new system supposed to replace everything he’s built as the sole employee for 3-4 years. As a side note, what he’s built is typically the kind of system that can only be maintained by him. Like most programmers of this kind, his excuse is that it’s a very complex system built organically and he was always rushed. I’m sorry, but this is just lack of time management and bad habits.
You can’t imagine how frustrating it is to be laying bricks for someone who doesn’t know where he’s heading. His only plan for a “fault-free clustered high-availability system” are some coffee table sketches. Oh and I’ve been building it for 6 months feeling like I’m led by a blind man. Not enough time in 6 months to do more planning than rough sketches? Give me a break.
At the start I used to argue about many of his choices that I knew where heading straight into a wall. But as a troubleshooter who has been the sole hero of the company for years, he can be very, very stubborn. I gave up arguing and I’ve been in code-monkey mode for months now. Rebuilding two weeks’ worth of my own work because he wouldn’t plan ahead/believe my warnings has become so common it doesn’t even bother me anymore.
October 10th, 2007 at 4:53 am
[…] http://www.testearly.com/2007/08/17/fire-your-best-peoplereward-the-lazy-ones/ […]
October 19th, 2007 at 3:17 pm
See my comment on your (most excellent) posting above; thank you!
www.trustedadvisor.com/blog
October 21st, 2007 at 8:30 pm
Folks, I know some of you are actually involved in the real business of software. There are actually 2 jobs here. The troubleshooter should only do the diagnosis, the coding up of a permanent fix should be left to the lazy developer. We need both in the real world working side by side, but in a x-dept company when every dept wants to be the hero in a crisis, the troubleshooter should get fired according to this article. Wrong.
Competent developers like abstraction and creation, working in a world that they have full control, and constantly telling management things shouldnt have been like this, or that.
Competent troubleshooter can handle bits and pieces of disjoint evidence, pre or post-mortem (like after a plane crash), and apply his knowledge and imagination to theorize, prove or disprove the cause(s) of the problem, and apply small code change to help narrow things down. Such changes should never be used as permanent fixes. Try using a super java programmer to read and understand core dump of someone elses’ OS/modules, or reading traces of multiple components from network to database and not just only his own program. You will get a very frustrated employee telling you that it is not his job.
What Paul Duval said here appears to me a typical management problem, a misunderstanding of the nature of software development, and a typical so called ‘result oriented’ business observation.
I speak as an ex-CTO and with 27 years of software experience with 14 years in IBM R&D.
October 22nd, 2007 at 12:33 pm
“but in a x-dept company when every dept wants to be the hero in a crisis, the troubleshooter should get fired according to this article”. I can see how the beginning of the posting could make it seem like this is what I believe, but if you go further you’ll see that I say, “Without question, you need troubleshooters on your project…” Again, my point is that there are those that *solely* focus on troubleshooting to the point of ineffectiveness. I suspect we’ve all met these types on real software development projects. I suggest that people that *continue* to fix the problems that they create, and could be prevented, are not the type of people you want on your team. Although, I pit the two against each other (troubleshooter/troublepreventer), usually, people tend to *lean* one way or the other. Like most things, there’s a lot of gray area.
November 26th, 2007 at 10:52 am
[…] I’ve been working through a serious backlog of articles, and while this one’s been on my “to read” list for a while it was particular relevant to my last post. […]
February 15th, 2008 at 8:33 pm
Nice post.
You are very right. Many of them are pretending to be best ones in problem solving and troubleshooting. But as you shown, because they created the problems, only they know how to solve it!And many of them are so lazy that even that they know whats the problem, then also they will not help the person with that bug. How pathetic i mean this is? They shows that they are the masters ans others are dumbs!
Parth.
March 24th, 2008 at 9:22 am
[…] InformIT has published a Q&A with Stelligent’s CTO, Paul Duvall. Paul shares his thoughts on adopting CI, the future of CI, and of course, his thought provoking blog entry. Check it out! […]
April 22nd, 2008 at 2:04 am
You’re topic is very important.
The heading is catchy too.
I just wish our management and our sales department understood this.
July 3rd, 2008 at 8:41 am
Great emphasis, now try and get management to go for that.
I’ve been on many projects, and whenever I act as a ‘troublepreventer’ I’m pointed to the schedule and told to stick to it. The seemingly minor time wasting disasters — such as duct taped one-off small programs that keep running into problems — make that very difficult.
A. “Why aren’t we on schedule?”
B. “The Adjustments database need to be recovered again, and the Inventory app keeps stalling, slowing daily reconciliation.”
A. “Why didn’t you work on the new project?”
B. “You asked me to deal with Adjustments and Inventory.”
A. “OK, but do it faster! Our priority is the new project not completed ones.”
B. [images of coming in on yet another weekend flash through my brain]
Additionally, the pressure is all short term and budget driven. Managers that ’save money’ or ‘make money’ are promoted … while others in the future end up eating the costs and complaining about the mess.
(This is one of the reasons why global warming is probably inevitable and frankly frightening. Yes, I’ve researched it starting from the POV that it was no big deal and that people were paranoid. No no no no…I was so wrong.)