Avoiding Mistakes Can Be a Huge Mistake
theodp writes "No doubt many will nod knowingly as they read Paul Graham's The Other Half of 'Artists Ship', which delves into the downside of procedures developed by Big Companies to protect themselves against mistakes. Because every check you put on your programmers has a cost, Graham warns: 'And just as the greatest danger of being hard to sell to is not that you overpay but that the best suppliers won't even sell to you, the greatest danger of applying too many checks to your programmers is not that you'll make them unproductive, but that good programmers won't even want to work for you.' Sound familiar, anyone?"
Perhaps programmers that have consistently good code should have some value placed on them. We'll call it "Karma". Programmers with good Karma get audited less often than others. If they fail an audit, they loose some "Karma" and have to write a bunch of excellent code to get it back.
One of our competitors trademarked the term "hypothesis". From now on, we will call them "boneheaded ideas".
Obviously you can't go too much in the other direction either. The checks are there for people who write code seen on http://www.thedailywtf.com/ who actually click the flashing banner that says they've just won lots, and for those who open up the .exe they found in the email that contains 'instructions on how to get a bigger pen15 2day'.
It's like anything else in life. The sins of one hurt everyone.
There will always be people who get shampoo in their eyes, and because of that these checks will always exist.
If your company writes great software, I want to work for you. I don't care how you do it. I want to write great software and if you have found the way, teach me.
From TFA: "Programmers are unlike many types of workers in that the best ones actually prefer to work hard."
Thanks for telling me I suck, Paul. Now excuse me while I loaf.
From the article:
So bureaucracy has a cost in that it places lots of checks on things, and the solution to that is adding more checks?
Sounds like solid bureaucracy to me!
Overclockers
At big companies, software has to go through various approvals before it can be launched. And the cost of doing this can be enormousâ"in fact, discontinuous. I was talking recently to a group of three programmers whose startup had been acquired a few years before by a big company. When they'd been independent, they could release changes instantly. Now, they said, the absolute fastest they could get code released on the production servers was two weeks.
At the big company I worked at, someone added some features to code that I wrote. It broke my code. I wanted to go in and fix it. Why not? I knew how it worked. I couldn't without a defect written by a tester.
On the other hand, if it was reviewed, the feature wouldn't have gone in; at least not without my input - I would hope.
I find the premise of the essay wrong. Go read "Death March" by Ed Yourdon (http://www.yourdonreport.com/). Most of the time problems aren't processes - they're people.
"Programmers, though, like it better when they write more code. Or more precisely, when they release more code. Programmers like to make a difference. Good ones, anyway."
This is a red flag. Coders that just code are part of the problem of a death March. Who has worked with wunderkind that churns out 16 hours of useless bug ridden code? That refuses to write unit tests because they slow him down? And at the end of the project look back, the MetricsReloaded tells you "Yes, that developer wrote the most code, but it is also the most defective and has the least coverage?"
Good processes are adaptive. Good people are agile. You can't build skyscrapers on spec. I am so annoyed by people that push a methodology or ideology that cannot also cite the specific historical evolution of software processes.
/\/\icro/\/\uncher
of this suggests that there are good programmers out there...
Please don't hit me, signed sysadmin ;)
Anyone else pick up on this -
Programmers are unlike many types of workers in that the best ones actually prefer to work hard. This doesn't seem to be the case in most types of work. When I worked in fast food, we didn't prefer the busy times. And when I used to mow lawns, I definitely didn't prefer it when the grass was long after a week of rain.
Just because YOU didn't like being busy at your other jobs doesn't mean everyone else in the world feels the same way. I worked in fast food and when I did, I liked it a lot better when it was busy. A 10 hour shift flies by when you're making orders non-stop, but once closing time came and it was time to clean up time seemed to stand still. I was still working but the work I was doing was so mundane and slow paced (mopping floors or washing the nights dishes) that it seemed to take forever.
There's also the possibility that you're a hobby programmer and not a career programmer. You might like programming outside of work, but there are people that wrote code just because it'll pay the bills. Those people generally like writing code as much as you liked mowing long grass.
Yeah, I'm pretty sure the best programmers are those geniuses who make lots of mistakes and then throw hissy fits when management creates procedures to find and fix those mistakes. Now that I've I know, I'm going to dismantle all my QA procedures and hire the sloppiest programmers I can find!
So, do you write perfect code, which takes too long and is too expensive? Or do you write quick and dirty code, and let it blow up in somebody else's face a few years down the road? Or do you write it just right? Working in a highly regulated complex industry, the rare blow up is very very bad. We work hard to avoid them. On the other hand, there are a few quick and dirty things that I write because I know that I will be able to toss them soon. I think the question that you need to ask the end user first - what do you need. Having read the author for quite some time, I expect he would disagree. I think he would go quick and dirty. But then again, he thinks like a start up. They are smaller. And when things blow up it is less important, affecting only a few people and a few bucks.
Where I work, the Network Nazis have made our computing environment so secure from cyber-threats that we might as well just unplug our CAT-5 cables altogether.
My group is a prime example. We all worked for a startup that generally released a new version of our application about 3 times per year. Over a few years we had developed a nice lean development process that involved documenting our design, but only in enough detail to be able to fairly accurately estimate the development effort (in X days, X weeks, or X months).
Based on the estimates, the biz dev group would then pick and choose features to make up 3 months dev + test time.
This worked great, and we pretty much never had a late shipment and few bugs.
Then we got acquired by a giant 3-letter company with huge amounts of development process and tons and tons of "standards", and immediately were ordered to begin a 16 month release consisting of removing all open source and complying with standards. All their architects routinely veto our decisions and our design documents must be very very detailed and approved via heavyweight process before implementation can begin. 24 months later we're still in development, only recently the last design document was finally approved; at the moment it seems we'll be about 12 months late in total.
Now they're asking us why we have so many tests planned, and making us remove half of them. Supposedly quality is a major priority, but they have no testing group; only people to enforce standards. All tests and test cases are written and implemented by the developers themselves.
Dont even get me started about the outsourcing issues.
What I don't want is:
- To be reprimanded for every little mistake I make, or worse be put in a position where a little mistake on my part can cause a huge, expensive and/or very visible problem
- To be forced to comply with procedures that do not in fact improve quality but do require 90% of my time leaving me with 10% time to program
- To have no creative input into my code.
There are good ways to achieve similar goals without the above antics. Continuous integration comes to mind. Well qualified specialist testers for User Acceptance is good too. Avoiding mistakes in a way that is programmer friendly will actually improve morale and an employer more desirable. The trouble is that too many employers try to equate software manufacture with mass production factory work in every way and treat their programmers accordingly. If you look at the kind of work a programmer enjoys vs the kind a factory worker is expected to do, no wonder they leave or won't join.
These posts express my own personal views, not those of my employer
This keeps coming up in various shapes and forms but the fact of the matter is that brilliant, high producers aggregate in places; and so do idiots.
Tom DeMarco ran a study of this in the 80s wherein teams were asked to solve the same problem. He expected a scatter-plot. It was a 45 degree line between the people who knocked the problem off and those who were clueless.
What didn't matter:
Platform. Language (except assembler, those folks were _lost_.) Operating System.
What did matter:
Team coherence and capability.
Design and planning; raw ability to design and plan as a coherent team. And not just a bunch of losers following a Pythonesque "Book of Common Knowledge."
(I have been to many "Does the witch weigh less than wood" meetings...)
Look at the back cover of Boehm's "Software Engineering Economics." What he _measured_ was that team capability overarchs everything. Period.
I would also ask you to look at the surface exposure of development. Folks who develop on the shoulders of many giants can and should be trying lots of stuff, because that's why platforms are built.
Folks working closer to the core (the OS, drivers, fundamental code) don't change as quickly, nor should they.
I've worked as a hatmaker (sheer, unbridled creativity with fancy ribbons and flowers and such) for high-end ladies and I've sat, confounded by bad documentation for UARTS.
Two different regimes.
You know, I often find that the coolest and most brilliant snippets of code come from momentary flashes of genius (or insanity). Working with more restraints really does squash creativity in the way things are done. Different people have different agendas, and a committee who doesn't see the brilliance in one person's work can throw it out altogether or ruin it completely by trying to do things with it other than were originally intended.
This story hits very close to home for myself -- I've sold two companies to larger companies where they commercialized my software. When you're a scrappy startup, you ship instantly. When you get incorporated into a larger organization, you don't ship instantly, which hurts because your intrinsic motivation (for the A-listers and entrepreneurs anyway) is shipping.
One shocking thing in the article for me is just how much people would give up in order to ship faster -- startups that got acquired would give up some of the acquisition money in order to ship faster in the new company. It's probably a limited sample, but I know I've felt that way. This is a large portion of what I call "suck" -- things that slow down shipping. I'm not anti-QA, but after a particular point all you did was slow down shipping.
One satisfying aspect of the work I did at the last acquiring company is that every time I checked in code, I knew I could with a straight face recommend that we ship it. I mean, it wasn't a full QA pass, but it was code with a supporting set of automated unit tests incorporated into a system designed as an extensible framework. Any negative impact would be isolated to that specific functionality (high cohesion, low coupling). A small group of internal power users and my own server would take the daily builds and give feedback as to how it felt in production and report any major issues.
The message here seems to be "if you can optimize the process in some way, optimize it so you ship faster". And in the meantime, go ahead and pretend like you're shipping every day (a complete, ready-to-go, high quality build). You'll be surprised how much better you feel even with that.
They may not want to work for you, but, in the present climate, that weekly paycheck counts for something.
I've worked for both types of companies and I can say that the more 'checks' to prevent mistakes the more ossified the code becomes. Sometimes big mistakes lead to a breakthrough in understanding the problem. It often seems that slow release-to-server cycles inhibit the ability of programmers to learn from their mistakes.
Today is an ephemeron, doomed to the crypt of yesterday.
This sort of thinking does not justify the new userpage.
Sometimes, life itself is sarcasm...
Team 1 Conceptual development and ideas team
Team 2 Code monkey team (often outsourced)
Team 3 QA team (often outsourced to a different company).
With team 1 reviewing and guiding the work of 2 and 3.
Next question.
Comment removed based on user account deletion
"Many a man meets his destiny on the road to avoid it."
anyone else notice that the basic premise "that to get rid of checks we have more checks about what we make as checks" is an exponential growth of checks and not the limitation of checks in their own right.
Talking about bugs, and software failure.
It is not human error or develope methodology that matter.
It is the model in our society is too simple! Like we teach students to make a upper to treat string, instead of having a more realistic way to handle culture difference.
All other systems have the same problem, we cut cost by having a simple model of the world, which finally fail in some cases.
However, the whole industral do not recognize this, they continue to work this way. This can not be a normal style of the industry. We need to adapt to a more realistic policy.
Yes! Free Karma... right after Willie! I'm starting a grassroots movement to save the Karma from untimely demises.
The time for that was what I missed on my last job. While there was not much oversight of how we actually wrote our code, deadline pressure always created a feeling of "you cannot afford taking that time just NOW".
The ultimate downer was when there was a gap between projects, one release had just been shipped and management hadn't made its mind up about what features to put into the next version. But even then there was no "business justification" for rewriting old crappy code. Instead we ended up writing some middleware for third party closed source software to make management's life easier. IMHO a complete waste of time.
In hindsight, that was a lot more motivation destroying than the development process as such.
C - the footgun of programming languages
Perhaps there is no "real talent" to use. Seriously, just because there are programmers out there who think they are better than most of the others, doesn't make it true.
Of course, if programmers who post on Slashdot were representative, we must all think we are über-programmers.
What is good code or bad code, we need laws that reflect normal consumer warranties and apply then post haste from some date forward for software alleged "products". Once cash changes hands, then "good" code will be subject to much less frequent recalls or cash changing hands back. Lather, rinse repeat until coding is up to the minimum standards of manufactured tangible items today. Nothing is perfect, nor will it ever be, but you can get it to the point you aren't going bankrupt every other week by shipping "bad" code. If it isn't suitable for purpose and free from glaring defects, it is "good". If it isn't, no financial reward, you go broke as a coder or coding concern. Simple fix. Works in every other industry out there. If you claim to be an engineer, claim to be highly educated and skilled technicians and professionals who demand very good salaries, then prove it in the market place under similar legal conditions to other engineers and technicians and professionals. If you are too afraid to offer a barebones minimum warranty, it is bad code, if you can, it is most likely good code, and there is your exact dividing line, nothing arcane about it at all.
It might be *difficult* for you, but nothing really good is *easy* either, and "you" as an industry are claiming the big brains and big expertise, so prove it. We might as a society lose the "ship fast and furiously and who cares, we have the get out of all responsibility EULA protection!" type of software development and releases model that exists today, but the code consuming public would reward you better in the long run if you followed normal product styled warranties and guarantees. And your guild would be better off as well, as the ones who couldn't cut it would be weeded out faster, individuals and corporations. As it is now, it is the last remaining "legal" snakeoil business left. Well, OK, I'll let you skate one notch down the snakeoil scale, investment banking is much much worse, but they aren't incompetent at all, they know exactly what they are doing, because they are just plain vanilla outright thieves.
The truth about software engineering is that nobody has THE solution. There isn't a true 3 step fills all the buckets and "everything will be fine" approach. Every environment and every procedural approach will (and IMHO should) be different.
There can be similarities between systems but you can't apply the doctrine of a compiled desktop development cycle to embedded development for engine management systems. It's appropriate for the developers of engine management systems to be very careful and just as appropriate for developers of utilitarian desktop software to release early, release often.
What Paul touches on in the article is the real issue. It's about motivating people to do what you need them to do. When somebody works with their mind, motivation is critical. You can force a factory worker to produce x widgets in an hour, but you can't force somebody to think effectively.
It's not necessarily about having the best people, it's about getting the best from the people you have. And I've got the feeling Steve Jobs would agree.
Does anyone had worked for big automotive ones? I understand the need to oversee every process of writing software that runs on CARS, but in a web page? I need to fill about 100 pages of documentation for a little web site... I wonder if you have similar experiencies... and not only that: 50% of IT-related workforce is made from scolarship interns (saving cash, I presume), and the bureucracy involved, not to mention complete ignorance of technologies involved, from marketing to even systems people, gave me more than one headache in the process.
Carlos Niebla
A lot of people who are bored stiff with writing documentation are good with white-boards and q&a sessions.
Make a video of the dev explaining the whys and wherefores (stuff that usually gets omitted anyway - youknow - "wtf did they do it like THAT?"), explaining how it's to be used/deployed, and answering questions from the other coders/reviewers/testers.
If avoiding mistakes is a huge mistake, you are not making that mistake because you are making a mistake by avoiding mistakes.
Your evaluation period for Productivity 1.0 has ended. Please purchase more coffee to continue using this product.
I'd be willing to put up with more checks provided that there are checks put on:
Currently, the quote at the bottom of the Slashdot page reads:
Never make any mistaeks. -- Anonymous, in a mail discussion about to a kernel bug report
... but that good programmers won't even want to work for you.
Fine. Then we'll hire twice as many bad programmers and pay them half as much.
Have gnu, will travel.
self-organizing, that is...
http://www.zoion.com/~erlkonig/writings/programmer-beekeeping.html
Cheers!
-Captain Fairly-Obvious.
The appropriate question to ask is would a thorough code review of the Mars Climate Orbiter software have prevented its loss? The problem was one of units (metric vs. English) which means the code on either side of the interface was absolutely correct. Only a live person looking at both pieces of code could realize that one piece of code used metric units while the other used English units.
Likewise, the code on either side of the interface may have been a paragon of software virtue. The "quality" of the code was not the problem that needed to be found. The problem was one of human understanding. Only a human reviewing the code could have seen it.
It's nice that code reviews frequently find trivial bugs that would have later been found during test. There is also a certain amount of weeding out of substandard code (obscurely written, poorly commented, bad design, not compliant with group standards for naming and such). Such code will also be found and excised when it passes from the developer to those who must maintain it. That is, the bulk of the things that most people see as the purpose of code reviews are actually a very superficial and unnecessary result. It's finding the design and requirements bugs like using incorrect units that are really the pay off.
Cheers,
Dave
They that can give up essential liberty to obtain a little temporary safety deserve neither safety nor liberty.
Ben
I respect what you've done. Creating
what became the Yahoo! store in Lisp
was pretty cool. "A Plan For Spam"
was awesome. (Too bad Microsoft
gave spammers infinite resources
with which to create infinite variations
of messages and defeat Bayesian filtering.)
But please... it's almost 2009. I don't care
what you once read about optimal column
width. Why not just let the text be a fraction
of the page's width and let the reader decide
how wide they want it to be? I've got a GUI
and resizable windows and a wide monitor
and everything.
Thanks,
- The Internet
Dear Slashdot: next time you want to mess with the site, add a rich-text editor for comments.
As usual, the answer is more complicated and has to do with the size of your team, the maturity of your product, and the acceptable risk profile of your market.
Most importantly
Erik Sink gave a wonderful talk on the maturity of software. As he put it - shipping too early is one of the worst mistakes you can make to your teenaged software.
Fundementally, Paul Graham is being a troll. Or he needs to get out in the real world a bit more.
-- Butlerian Jihad NOW!
"The Other Half of 'Artists Ship'" presumes that large organizations are motivated by efficiency and effectiveness. This presumption completely misunderstands large organizations. Large organizations come to exist because they have tapped into a large reliable long-term cash stream that can survive their collective incompetence. With their organizational funding assured, all that is left to do is to divy up the organizational spoils amongst the employees, management, and shareholders. And then the key determinant success in such an organization becomes not to be blamed for making a mistake. No employee will get blamed for inadvertently excluding a superior vendor from an acquisition process; most likely no one in his/her organization will even know it happened. They can get blamed for having too lax an acquisition process, however. No employee will be blamed for having too much testing or too much project management or too many software quality checks. They can get blamed for releasing defective software onto a production system without sufficient checks. So the internal goals of the organizational actors are perfectly reflected in the external behavior of the organization. More checks means less blame for mistakes; fewer checks means more blame. With the organizational cash stream assured, less blame means more promotions and greater compensation.
so, what is happening? How about those new covers on the TPS reports? I'll just go ahead, and send you another memo...
You can't handle the truth.
u need checks to verify
juz not too much or in another way
u like checks that prove u r right
but
u dun like checks that prove u r wrong
juz normal human
all guys can be creative....
but not all guys can be correct...
see ur target/purpose of programming
serving ur own satisfaction
or
meeting user requirements....
or in another way
it's noway to meet user requirements anytime anywhere actually
From TFA: "Programmers are unlike many types of workers in that the best ones actually prefer to work hard."
Porn actors prefer to work hard, too.
I fucked up this post!
Are we talking code reviews here, or checks and controls in general? Code reviews can be very helpful, if the objective is solely to educate and learn, rather than finding excuses for why you haven't performed well enough next time you have a salary review. It could be run in confidence by a group that is independent of management, eg. and external company.
It should be obvious that too little or too much in the way of controlling people is bad, and not just in programming. Social security in many countries is like that, especially in Scandinavia; there are so many checks in place to prevent benefits fraud and ensure that society only spends money on people who actually need it, that not only does it cost far more than what is potentially saved, but it also means that helping those that actually need it most takes very long. And to top it off, it doesn't prevent benefits fraud at all.
In my view, it should be simple and to the point - it shouldn't be possible to simply go and claim unemployment benefits if you are well off and have a good job, but it is a lot more efficient to simply trust most people to be honest and then let the police catch the cheats. Same with tax - make it a fixed percentage, with no loopholes for anybody to wriggle out of it.
In development the same principles apply: the basic assumption must be that people are honest and want to get the job done. In some environments it can be useful to have an "Issue Tracking System", so you don't loose track of what you are doing, code reviews can be helpful too; but only if they are used as tools, not weapons.
If sufficient 'quality' checks are added to avoid the costs associated with mistakes, the process is 'factoring in' the cost as a normal operating expense. If the checks, testing, paperwork cost more hours to perform 'correctly' than a bug itself would cause when it occurs, then the cost of bugs is added to every release whether the bugs occur or not.
This is paying for bugs the hard way. This destroys the value produced by the good programmers by adding back the costs their good code saves. It's much easier to reach this threshold than most (non-programmer) managers realize.
The advantage seen by managers is a 'better' management of the process due to predictable schedules. The predictability comes from slack in the schedule created by low-bug software that doesn't cause delays. Illusionary schedule gain is then used up in the next release that has a (statistically insignificant) increase in bugs. Over time, it looks better but costs more.
Pavlov wouldn't be so famous if he'd used a can opener instead of a bell.
He spends several paragraphs talking about hidden costs when it comes to supliers, but then fails to realize that if you don't have a dedicated Q&A testing team that your developpers will be doing that testing work which is exactly one of those hidden costs.
Indeed. Thank you. There's a palpable difference between "what if" and "what if _we_" in the group politique. Once you get to _we_ it gets fun.
This management paranoid fear of mistakes can drive anyone nuts. I used to work for a place where every tiny bit of information created had to be dated and signed, documented, archived and double-verified by both a QC and a QC department. This eventually drove me off the deep end when I was given the lead on a project that was half-assed in its theoretical abstract and previous implementation, ensuring ultimate failure that I was blamed for, no matter how much evidence I brought forward (and got dismissed as "proof of my lack of teamwork")
Dear God!! CODE REVIEWS! Heaven forbid we might be required to *gasp* do our jobs correctly, instead of just whipping-together whatever fancy comes to mind and pushing it out the door!
The developer world has (for the current developer-fad's iteration) been taken over by agilist monkeys who want to rid the developer world of having to produce documentation, having to do QA and rigorous bug-checking and fixing, status meetings, documented and well-reviewed requirements gathering and design -- basically, everything except pure coding.
Everything except, you know, the less-fun work that is necessary to do our jobs properly and to communicate and pass our work on to project non-members...
Is Capitalism Good for the Poor?
What's the Karma hit if I blow up the studios because Mister Riccitiello told me too ?
----- The internet has given everyone the ability to have their voice heard equally as loud.. even if they shouldn't be
Sure, having a strict QC process might make lazy programmers less likely to want to work for your company, but with OS developers learning more and more from their mistakes, and making their products harder and harder to exploit - attacker interest is switching rapidly towards the client applications. Why try to break through the walls, if you can use a window, no pun intended, kindly created by a liberal coder? You have to keep in mind that cost of doing business may be high, but the cost of having a backdoor in your new release can be a lot higher. Because, lets be frank here, how many coders out there think about security at any point before finishing their quota?
Saving money on QC? - Good
Having programmers like you? - Lovely
Having an unsanitized input field in your code cause a leak of hundreds of thousands of PHI/PCI records and put you out of business? - Priceless
Bow before me, for I am root.
In my previous job, I worked for a huge manufacturing company. I developed, maintained and supported an add-on (plug-in, extension, module, whatever) for their 3D CAD/solid modeling application (Pro/Engineer).
When I first hired on, and started working with the application, I learned about the quality process we used: SPQA, or software process quality assurance. This was relatively straightforward, and, in my opinion, didn't add too much overhead. It was basically a checklist of things that a manager went over with the development group. Then we added AQA, application quality assurance. Not only did this add more overhead, but some of the requirements of the two processes conflicted!
The projects my group worked on were fun, cool, and cutting edge, and the majority of the staff was quite engaged in their work. So we worked through all this process nonsense, and basically got used to it. However, lurking in the background all the while was 6 Sigma. The company had adopted this methodology wholesale, and was forcing it to be used in every facet of operation. Now, not only did we have our previous processes, SPQA and AQA, but we had 6 Sigma to contend with.
Looking back, it's sad how much time and effort was wasted just trying to figure out how to integrate all these processes into our development. Literally, the whole section (about 12--15 people) spent many meetings and countless hours coming up with process maps, just to explain how our development would proceed, and comply with AQA, SPQA, 6 Sigma and anything else management felt like we needed to do. I used to eat lunch with the supervisor of another group---he had actually worked in the same group as me, years ago. I'd be moaning about how much of my effort was spent just trying to juggle all these processes, and he'd say, "Back in my day, we just thought up an idea and coded it." I'd talk about the growing queue of bugfixes and enhancements, and how none of them could ever be realized without eliminating all this process nonsense (or doubling the staff and budget) and he'd smile and say, "I remember when so-and-so called me up, asking if I could make the program do such-and-such, and I did it the same afternoon!" Sigh.
Duck-->Quack-->SMACK!
can't say you didn't warn him!
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
... but did you learn to click "Post Anonymously" next time?
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
First you say that if I "implemented some very complex system in less time then a competing group of 10 programmers did" you would "at least consider it possible" for me to create a 10x sort without proof.
Then you say: "That someone can do the same as a larger group and needs less time for it does in no way whatsoever compare to someone developing a 10x faster algorithm."
So if they're not comparable, why are you linking them?
instructions on how to get a bigger pen15 2day
:(
Why are there no penis enlargement 0-days?
I would deny them the joy and experience of looking at good code sometimes, because the tendency to bicycle shed.
Everyone wants to put some input into the project to prove that they are involved, working, and generally providing some value for the money they are paid. In less than perfect code, this often means they come up with lots of issues that need to be fixed because the code is flawed.
With very pristine code, this often means that they come up with lots of issues that shouldn't be fixed because the code isn't flawed. This can be mitigated by having a better review process, but it's hard to overcome human nature.
A real world example not in code comes to mind.
My brother bought a day care centre, and with every change of hands, such businesses must be inspected (a good practice). Problem was that this centre had been in operation for over thirty years, and had recently passed inspection in a prior sale less that two years ago. So the health inspector stated that the hot water in the public facing bathroom (for parents, children, and employees in the waiting area, not the centre itself) wasn't hot enough. Never mind that it was one hundred and five feet from the water heater and would be plenty hot in three or four seconds of running, it had to be hot instantly. So he installed an assist water heater right behind the wall of the sink.
You might think that the health inspector has a valid point, but if he did, then why did the centre manage to operating unsafely for thirty years? More likely than not, he had to find something wrong to prove to his supervisor that he was really working. Day care centres are inspected far too often for any issue to go unnoticed; to have an outstanding issue, you need a negligent inspector.
He sold it a year later, I wonder what new miracle "flaw" was discovered?
Very good practices in code review could lessen the risk of bike shedding, but it would be very hard to eliminate it. For quite a few of us, it's human nature to add in your own two cents; right or wrong.
Hence the reason for this post, oh the irony! :)
I'm surprised that none of the responses that I see so far mention the obvious solution that I do; fire the inept. It doesn't matter what your organization or profession is -- every organization has some rules and guidelines to prevent stupid mistakes from happening.
Sometimes these mistakes are not apparent, and the check/rule is there for a good reason.
However, my experience is that most of these checks/rules get put in place because some stupid fool went and did the kind of thing that a stupid fool would do, and it's an attempt to save the stupid from doing what they would otherwise do naturally; stupid things.
"You can't fix stupid."
If you have inept staff around, they are going to do stupid things and there is nothing you can do to stop them, so stop trying, and fire them.
I greatly wish that a couple of guys that I work with would get fired. I like them personally, but they are fark-ups. They just can't manage to consistently do things right. In some cases, they consistently screw things up.
So, as a personnel manager, please do your job. When people fark up, warn them, then fire them. If you don't the talented people are going to get tired of fixing the work of the inept and quit. You end up with the "Dead Sea" affect, where you're only left with the worthlessly inept and your business sinks.
Don't make a new rule/law/check, just solve the root source of the problem; fire the stupid people!
Arbtrary isn't a synonym of bullshit.
YOU equated developer productivity with execution speed, see the link below by SillyNickName4me (760022).
You're also - as of now - a proven liar.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."