Slashdot Mirror


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?"

62 of 268 comments (clear)

  1. Perhaps by Thelasko · · Score: 5, Interesting

    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".
    1. Re:Perhaps by Anonymous Coward · · Score: 5, Insightful

      Code reviews teach the reviewers as much as they check on the author. Why would you deny the lesser programmers the joy and experience of looking at good code?

    2. Re:Perhaps by YourExperiment · · Score: 5, Funny

      Do programmers also loose karma for being fast and lose with their spelling?

    3. Re:Perhaps by Anonymous Coward · · Score: 4, Funny

      Do programmers also loose karma for being fast and lose with their spelling?

      /irony

    4. Re:Perhaps by Pogue+Mahone · · Score: 4, Interesting

      That's exactly the kind of check that is harmful, according to the article. Who determines what is "excellent"? Against what benchmark? Who performs the audits? Who checks that you have spelled "lose" correctly?

      --
      Every bloody emperor has his hand up history's skirt [Peter Hammill/VdGG]
    5. Re:Perhaps by enjo13 · · Score: 5, Interesting

      How do you identify "good code"? That's one of the great problems we have as software developers. Quantifying 'good' code is extraordinarily difficult. Code reviews do an excellent job of identifying clever code, but rarely capture the full utility of what is being written. You may think you know good code when you see it, but over the course of my career I've become convinced that is not true at all.

      Really the problem is that the only way to truly measure code quality is by seeing how it runs in a production environment. Even then I can easily quantify the quality of the teams overall output (does it work? does it work consistently?), but tracing that back to an individual programmer is often nearly impossible. Systems tend to interact with each other, and placing blame is not an exact science. The gulf between 'good' and 'good enough' is not nearly as wide as it seemed when I was a novice programmer.

      Great code almost never breaks. Good code works most of the time. Poor code is another matter.

      Poor code is easy to spot. Poor code never works. It's ugly. It's complex. It's stateful. It's jump off of the screen and practically begs to be put out of its misery.

      That's precisely why companies have processes and checks. They are an attempt to catch marginal code and make it 'good enough'. The problem, as the article points out, is that in the process they often inspire great coders to deliver marginal code themselves.

      The secret is to spot (through some mixture of science and art) great programmers and provide them with the freedom to write great code. If circumstance requires you to hire marginal programmers, then by all means put the process in place to make sure that what they do doesn't detract from the work your best and brightest are doing. Separate them as best you can. Limit how their systems interact.

      But whatever you do... don't limit your best programmers, as they are far more valuable than hundreds of poor ones.

      --
      Turn s60 photos into awesome videos with mScrapbook for all S60 3rd edition phones!
    6. Re:Perhaps by postbigbang · · Score: 3, Insightful

      To wit:

      Excellence can be determined in various ways, often through documentation, the great allergen of programmers. If you can't explain it, it isn't really done.

      The benchmarks can also be defined as well. They need to be met. Make the bars well known, and what must be done to meet them.

      There are great references for auditors, too. Feeling a little pain, are you? Had to throw in the grammar nazi reference?

      --
      ---- Teach Peace. It's Cheaper Than War.
    7. Re:Perhaps by ChromeAeonium · · Score: 5, Funny

      Do programmers also loose karma for being fast and lose with their spelling?

      /irony

      They can be docked karma that way, but when they're not sure about something, they can cover their asses and submit anonymously. That way, if something totally whooshes over their heads, they're in the clear. They can later correct their own dumbass mistakes unanonymously and whore karma instead of losing it. What a perfect system!

    8. Re:Perhaps by syousef · · Score: 4, Insightful

      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.

      That's awful in so many ways.

      For starters look at how poorly Karma works here. It serves to re-enforce awful sheep mentality. Just try putting down Google, Apple or Linux. Or try praising Microsoft.

      Next what you're proposing creates a negative feedback loop. A developer codes well and gets through a few audits. Now they're trusted, they can afford to let things slip for some time before anything is caught. There's less incentive to keep producing good code, and there's more of a chance that an error will slip through. No one is perfect and mistakes will happen. The way to protect against them is to ensure there's some redundancy, and taht is exactly what a code review provides.

      Also consider retention rates and the average time a developer spends at a company. Does an expert or lead programmer start off having every little thing reviewed? Who's qualified to do that? Or are they trusted based on heresay and a resume? If so how long will it take to find a dud programmer?

      Next consider what effect it will have on the morale of a struggling programmer, or one that doesn't cope well with reviews. Especially a junior one whose abilities can be salvaged. A co-operative might work, but constantly giving more and more high pressure code reviews is just about guaranteed to break such an individual.

      Finally, you should realize that such "karma" already exists informally and that making it a more formal process achieves very little. In other words developers very quickly get a feel for what the strengths and weaknesses of another developer are.

      --
      These posts express my own personal views, not those of my employer
    9. Re:Perhaps by mevets · · Score: 3, Funny

      The "robustness" test isn't good enough either. Sometimes poor implementations of good ideas spurn enough innovation and demand that its marginal quality is irrelevant. The early web browsers, email programs, etc.. were likely neither robust or well implemented. On the other hand, some solid, robust good implementations of ideas are so intractable, that at best they merely serve the original purpose, and at worst are like an albatross around the necks of future developers ( usb anybody ?).

      David Parnas proposed that a poor programmer could create demand for dozens of programmers; a unique software situation, as a poor mechanical engineer doesn't scale nearly so well.

    10. Re:Perhaps by sammyF70 · · Score: 5, Funny

      Google is evil incarnated, Apple is style-over-function overpriced junk, and "The Year of The Linux Desktop" ain't coming soon.

      Microsoft, on the other hand, has some really funny employees (and Reversi).

      /em ducks

      --
      "DRM is like the Ford Pinto: it's a smooth ride, right up the point at which it explodes and ruins your day."-C.Doctorow
    11. Re:Perhaps by kybred · · Score: 2, Insightful

      Code reviews teach the reviewers as much as they check on the author. Why would you deny the lesser programmers the joy and experience of looking at good code?

      I completely agree with this. Also, reviewers get to see code they may not be familiar with, and the author gets alternative views on implementation and design.

      As long as everyone remains objective and professional, reviews can be very informative.

    12. Re:Perhaps by pe1rxq · · Score: 3, Insightful

      Benchmarking is exactly were the problem lies....

      Having your code reviewed by a peer who can actually comment on it and understand what you are (or are not) doing is not bad. Either they understand it, or you have to defend your work with actual technical arguments. The end result is that you both have an opportunity to learn.
      Having your code reviewed by a mindless idiot comparing it to the official procedure is bad.... Even worse when the idiot is replaced by a program. Forcing everybody to follow a single holy procedure simply reduces all code to be mediocre.

      --
      Secure messaging: http://quickmsg.vreeken.net/
    13. Re:Perhaps by OFnow · · Score: 2, Insightful

      (mount soapbox) Having every little thing reviewed is a necessity, not a problem. Expert and lead programmers need to set the example by getting reviews. Always. The tiniest change has the potential for causing chaos. Teaching by example is just as important as producing. (dismount soapbox)

    14. Re:Perhaps by ScrewMaster · · Score: 4, Funny

      Do programmers also loose karma for being fast and lose with their spelling?

      /irony

      They can be docked karma that way, but when they're not sure about something, they can cover their asses and submit anonymously. That way, if something totally whooshes over their heads, they're in the clear. They can later correct their own dumbass mistakes unanonymously and whore karma instead of losing it. What a perfect system!

      Huh. Too bad Slashdot doesn't have a system like that.

      --
      The higher the technology, the sharper that two-edged sword.
    15. Re:Perhaps by ifdef · · Score: 4, Interesting

      We have a more informal system where I work. Whenever anybody checks in some code, whoever wants to automatically gets an email to notify them (for example, I am set up to receive notifications for any changes in a few directories where I do most of my work). Anybody who wants to then reviews the change. If there is nothing to comment on, it's completely transparent, and the person who checked in the changes is not even aware that they got reviewed. If there IS something to comment on, most likely someone will talk to the original coder (or send them an email), saying something to the effect of "by the way, did you consider such-and-such?", or maybe even "good idea!"

      The system keeps track of who reviewed what change. As a check on the process, if there is any change that has been in the system for x days but has not been reviewed by at least m developers and n testers, the original coder gets an automatic email saying "please arrange for someone to review your code."

      This is, of course, in addition to the automatic emails that get sent if a change actually BREAKS something. Those get dealt with right away.

      So the review process does no harm to anybody's morale, except in the cases where that person really is producing bad code.

      Strangely enough, it seems to work quite well.

      As for your other point, about "A developer codes well and gets through a few audits. Now they're trusted, they can afford to let things slip for some time before anything is caught. There's less incentive to keep producing good code": I don't want anybody with that attitude in my group, period. I am not in any kind of supervisory position, but if there is someone on the team who only produces good code because of some "incentive", and the team lead doesn't do anything about that, then I don't want to work for that team lead, either. I will vote with my feet, and I don't think I would be the only one. And then this would become, no doubt, a much more "normal" software department, instead of an amazing one.

    16. Re:Perhaps by ScrewMaster · · Score: 2, Insightful

      Ultimately, what you're talking about is managed incompetence, and proper identification and utilization of real talent. Most organizations do well enough at the former, and are just terrible at the latter.

      --
      The higher the technology, the sharper that two-edged sword.
    17. Re:Perhaps by kbrasee · · Score: 5, Funny

      /irony

      /woosh

      /irony

      Error: Cyclic Dependency

    18. Re:Perhaps by ChrisA90278 · · Score: 3, Interesting

      I don't think you even need "good code". I worked on a project that eventually failed and all the code we looked at in those reviews was "good". Either that or we made it good. The big problem was that it did the wrong things.

      The problem is not with the people who write the code. Most are OK and reviews catch gross errors but in out case we had some basic "big picture" ideas wrong.

      Microsoft Vista is a good example of this. Likely the code would pass a review and has few mistakes but the problem is the dumb ideas that got written into the specifications.

      It's like the "bridge to nowhere" problem. Good, competent structural engineers build something no one wants or needs.

    19. Re:Perhaps by lgw · · Score: 4, Insightful

      Excellence can be determined in various ways, often through documentation, the great allergen of programmers. If you can't explain it, it isn't really done.

      Suppose you have a programmer who's 10x as fast as your benchmark standard guy at producing tested, debugged code that meets requirements, but slower at writing docs. Do you make him write docs, or attach a junior programmer to him for that purpose?

      Of course, somewhere up the ladder a software engineer's job becomes mostly writing docs (regardless of whether you go management or architect), but still - tying that anchor around the neck of your best dev is exactly the sort of thing Paul Graham was on about.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    20. Re:Perhaps by DogAlmity · · Score: 2, Funny

      Do programmers also loose karma for being fast and lose with their spelling?

      /irony

      They can be docked karma that way, but when they're not sure about something, they can cover their asses and submit anonymously. That way, if something totally whooshes over their heads, they're in the clear. They can later correct their own dumbass mistakes unanonymously and whore karma instead of losing it. What a perfect system!

      Huh. Too bad Slashdot doesn't have a system like that.

      /irony


      I think I'm starting to get the hang of this!

    21. Re:Perhaps by lgw · · Score: 3, Insightful

      I don't think you're disagreeing with me. Given whatever standard of quality you wish, there is at least a 10 to 1 productivity variance in the creation of software between software professionals. Identifying developers who are on the tail end of that bell curve and removing obstacles from their path is the key to both productivity and retaining your super-programmers.

      The guys on the 10x end of the spectrum aren't just more productive - they can solve problems that the ordinary coder simply cannot solve at all. If you're part of the millionth re-invention of an inventory database, this doesn't much matter, but if your business sells software that soves new problems, these guys make a huge difference.

      Of course, everyone thinks they're a super-coder when they're young, just like everyone thinks they're an above-average driver, but recognizing (and retaining) real talent is supposed to be a development manager's job.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    22. Re:Perhaps by RobinH · · Score: 2, Insightful

      The best judge of good code is always other programmers. I also think that once you move into management for a few years, you start to lose the ability to tell good code, because there really is an element of the "best application of current technology" somewhere in there.

      The worst place to work would be a place where nobody ever looked at or judged your code. That's like an author with no audience.

      --
      "I have never let my schooling interfere with my education." - Mark Twain
    23. Re:Perhaps by lgw · · Score: 4, Interesting

      My fundamental point is not that documenation and paperwork should be avoided, but that in some cases it's just a stupid allocation of resoruces to have certain developers do that work. In the old days, IBM would pair a tech writer with *every* programer, so that really good docs could be produced with a minimum of distraction to the coding. It's hard to know whether that produced the best code (though there's a lot to be proud of in 70s mainframe code), but it produced lots of *really* good documentation.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    24. Re:Perhaps by postbigbang · · Score: 2, Insightful

      We would disagree.

      Unless a code set is monolithic, it has to interact with other components. Maintenance and audit mandates basic documentation. Those that eschew it aren't really programmers, because that's part of the job. Instead, they're really good artists, creative people, and not industrial professionals that understand they're part of a larger process. Part of the lone wolf contingent of coders and hackers will always refuse to be a part of the discipline required to work and play well with others. It's been this way since I started using computers 42 years ago. It hasn't changed. Corporate excellence? No, 'plays well with others'. Doing that requires submission to the processes needed by others and being both courageous and disciplined enough to do so.

      Playing the machine can be done in many ways. Some of them are safe and sane, others edgy, and clearly, some stupid. You have to demonstrate the difference and be willing to submit to scrutinize your code. Otherwise, in a way, you're like how Microsoft used to be-- ranging from the sloppiest rush jobs ever written to fabulous code with no method to judge the underlying difference until the object blew to pieces. Fie.

      --
      ---- Teach Peace. It's Cheaper Than War.
    25. Re:Perhaps by networkBoy · · Score: 4, Funny

      wow, a Beowulf cluster of /irony

      --
      whois gawk date unzip strip find touch finger mount join nice man top fsck grep eject more yes exit umount sleep dump
    26. Re:Perhaps by networkBoy · · Score: 2, Interesting

      to wish I had mod points...
      I really like igw's post http://developers.slashdot.org/comments.pl?sid=1047369&cid=25954607 about attaching a tech writer to a dev. While it may play to the primadonna set (in a bad way) there is some sense in getting those lone wolf types, especially when they have the combination of difficult to teach skills and the unteachable knack of genius for a particular type of problem you may have. I (senior tech) have been attached to such an engineer (hardware dev) who was simply a genius on analog design. His gut feelings for circuit design and layout were closer than most peoples second and third approximations for a PLL or transceiver. Downside was his documentation skills were essentially expressed by 1/(analog design talent). As a result a tech writer and I worked very closely with him when he was nearly done having him walk us through *everything*. I wrote the test plan and the Tech Writer wrote the docs. Worked great, even though he was a stuck up ass.
      -nB

      --
      whois gawk date unzip strip find touch finger mount join nice man top fsck grep eject more yes exit umount sleep dump
    27. Re:Perhaps by russotto · · Score: 3, Insightful

      Documentation may be necessary; certainly documenting interfaces is, and some amount of internals documentation is prudent. But no amount of documentation will make poor code anything but poor. Nor will any lack of documentation make excellent code poor; it merely makes it undocumented.

      Doing that requires submission to the processes needed by others and being both courageous and disciplined enough to do so.

      Courageous submission... wasn't that one of the Ingsoc slogans?

  2. A fine balance by pwnies · · Score: 4, Insightful

    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.

  3. It's official by Anonymous Coward · · Score: 3, Funny

    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.

  4. More checks! by I.M.O.G. · · Score: 5, Insightful

    From the article:

    Whenever someone in an organization proposes to add a new check, they should have to explain not just the benefit but the cost. No matter how bad a job they did of analyzing it, this meta-check would at least remind everyone there had to be a cost, and send them looking for it.

    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!

    1. Re:More checks! by orkysoft · · Score: 2, Insightful

      The bureaucracy is expanding, to meet the needs of the expanding bureaucracy.

      --

      I suffer from attention surplus disorder.
  5. I have mixed feelings. by Samschnooks · · Score: 2, Insightful

    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.

    1. Re:I have mixed feelings. by russotto · · Score: 4, Funny

      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.

      Annoying, but easy to handle. Testers love to find bugs, whether it be for the joy of crushing a young programmer's spirit, or for the look of fear in the eyes of the product manager as the release date approaches. Point a tester towards the bug, and he'll go right ahead and write a defect, possibly cackling evilly as he does so.

  6. Death March by micromuncher · · Score: 4, Insightful

    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
    1. Re:Death March by Anonymous Coward · · Score: 2, Informative

      if you use metrics to understand how hard someone is working, then you fail before you have begun.

      metrics == management

    2. Re:Death March by skribe · · Score: 2, Insightful

      How much does it cost to find, vet and hire a replacement coder? Both in real money terms and in loss of productivity. How does it compare to bringing the 'bad coder' up to speed through better training strategies?

      Just some thoughts,

      skribe

      --
      Blog
    3. Re:Death March by wideBlueSkies · · Score: 2, Interesting

      And some of us like to program just for the sake of programming. And create applications and solve problems because to do so is interesting and fun, and one gets to work with other smart people.

      --
      Huh?
    4. Re:Death March by tomhudson · · Score: 2, Insightful

      A good coder should enjoy their work enough that they can help bring others up to speed. Everyone benefits. The good coders benefit from better communications with their co-workers, as well as knowing what can and can't be handed off to others, and how much supervision they'll need.

      Projects don't fail because of bad coders. They fail because of mismanagement, poor resource allocation (the biggest problem being time constraints), lousy communications, lack of trust, and a willingness to take shortcusts "just this once."

      Besides, it's a real ego boost when a former co-worker tells you that they really learned a lot working with you. Makes you feel good having done some good in the world. Sure beats the usual "pissing contests" that go on all too often.

      Good. Fast. Cheap. Pick ONE. The person who said "Pick two" was an optimist.

    5. Re:Death March by PMBjornerud · · Score: 2, Insightful

      Programmers, though, like it better when they write more code.

      I clearly prefer to write less. Noting better than cleaning up code and ending up with deleting a third of it while making it work better than before.

      --
      I lost my sig.
  7. ...Perhaps the author is a little biased? by Zakabog · · Score: 2, Insightful

    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.

  8. Agreed, Too Much Oversight Kills by cgifool · · Score: 5, Interesting

    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.

    1. Re:Agreed, Too Much Oversight Kills by cgifool · · Score: 2, Informative

      Forgot to mention, morale is in the toilet, because after 2 years of effort we're about to release a new, fully standard-compliant version of the application with -0- new features, and even less compatibility with external applications than before.

      Most people here have told me the only reason they have not left is because we'd never be able to get the same money or even half the vacation elsewhere.

    2. Re:Agreed, Too Much Oversight Kills by mabhatter654 · · Score: 2, Insightful

      Exactly, what made your company interesting and worth buying was what you DELIVERED! At this point you've missed 8 "releases" spending the entire time essentially rebuilding and re-documenting according to "old and slow" rules. Because of the overwhelming paperwork, your division is now a "loss".

      While you needed more structure, your new owners sacrificed ALL your productivity for writing reports!!! They made no money from buying you.. worst is that your employees probably lost the creativity that make the whole thing worth buying in the first place.

  9. As a programmer I want to avoid mistakes... by syousef · · Score: 4, Insightful

    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
  10. Re:obviously by Anonymous Coward · · Score: 2, Insightful

    Now that I've I know, I'm going to dismantle all my QA procedures and hire the sloppiest programmers I can find!

    How about I take every little thing you say and take it to the farthest possible extreme without any regard for the subtleties in what you originally said?

    What you said sounds like a great idea! Why don't we KILL ALL THE PEOPLE WHO DO QA, like you are clearly suggesting, rape and torture their families and then hire pedophiles and trained gorillas to do the work?! Isn't that exactly what you were saying just now?! Isn't it?!!

  11. Nothing changes. Really. by onescomplement · · Score: 5, Interesting
    Paul, as usual, backs into the key argument.

    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.

  12. Been there, agree with that by blake182 · · Score: 3, Interesting

    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.

  13. Mistakes can mean breakthroughs by mdrplg · · Score: 3, Insightful

    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.
  14. I don't care who wrote the article by Joe+Snipe · · Score: 2, Funny

    This sort of thinking does not justify the new userpage.

    --
    Sometimes, life itself is sarcasm...
  15. Re: loose karma by macraig · · Score: 3, Funny

    Yes! Free Karma... right after Willie! I'm starting a grassroots movement to save the Karma from untimely demises.

  16. Don't forget opportunities to redo stuff by Lonewolf666 · · Score: 2, Insightful

    I was one of those guys making constant, iterative improvements in the guts of my component, that had no "business justification" because the only thing it made better was future development and bug investigation. But in the process of that hacking I also identified dozens of real bugs that I wouldn't have found otherwise.

    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
  17. Re:One sure way to find out by Surt · · Score: 2, Insightful

    The problem is that what you are describing is nothing at all like what the market actually wants. The market actually wants massive feature lists delivered as fast as possible, and their level of caring for whether or not quality is there is very low. This is very unlike, say, a bridge, where the primary public concern is going to be that the bridge not fail and kill them. Or an electrical product where the primary public concern is that it not short out and start a fire that kills them.

    When things go wrong in other fields of engineering, it can frequently kill you. In most software engineering, not so much, and in the areas where it CAN kill you (think airplane fly by wire control software), you should be unsurprised to find out that many of the quality and testing standards are quite the same as in other fields.

    Most software engineering is more like movie publishing. The audience quickly gets satiated, and is mostly looking to the next great thing with better FX, and not so much caring if you have a few flaws in your plot (see recent Batman movie if you are unclear on this).

    --
    "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
  18. Re:Real Talent? by lgw · · Score: 2, Informative

    No, there really are programmers who are 10x as productive as "normal", and of course programmers who contribute negatively. You'll know either extreme when you work with one.

    Boss: we've had a team of 5 on this problem for a couple months now, and they're way behind - could you take a look?
    Dev: sure, give me a couple of weeks.

    Two weeks later.

    Boss: so, can how's that project going?
    Dev: oh, I'm done.
    Boss: Done? Great - what was your analysis; how can we speed things up?
    Dev: No, no, I'm done with the project. The approach that team had was crap, so I just did it right. I'm running my unit test now, but it looks good so far.
    Boss: -speechless-

    You may not believe it until you work with someone like that, but they're out there (and large companies do a terrible job of retaining them - as Paul Graham suggests, the main thing devs like that want is to not have obstacles to their productivity).

    --
    Socialism: a lie told by totalitarians and believed by fools.
  19. Re:Real Talent? by lgw · · Score: 2, Informative

    I know what "productive" means. Knowing that is part of my job. "Productive" is delivering features in a maintainable, supportable way, per unit time. Sizing features and defining "maintainable" and "supportable" in terms of concrete rules and best practices is a large part of the skillset of a very senior engineer. Finding the hyper-productive programmers and twisting management's arm to retain them at all costs is another.

    Again, the 10x developer sounds like a myth until you work with him -- I'd say it's the top 1% -- but 3x developers are common. The "contributes negatively" programmer is someone you've met, though the hallmark of bad management is to encourage that guy to work more.

    There's a reason that "real" engineering companies have fellowships and Distinguished Engineer titles to recognize, empower, and retain the top 1% engineers on other fields.

    --
    Socialism: a lie told by totalitarians and believed by fools.
  20. Large organizations don't care about efficiency by branchingfactor · · Score: 2, Insightful

    "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.

  21. Re:Real Talent? by ClosedSource · · Score: 2, Insightful

    "You can engineer maintainability. You won't know how successful that effort was until after the maintenance is performed."

    You can certainly try your best, but as you say, you only find out later how you did. But getting back to the main argument, programming "goodness" is a multidimensional quality that often can't be fully measured until some time has passed.

    There is rarely any attempt to measure it in the real world beyond the misleading metric of LOC/time.

  22. Re:Real Talent? by ultranova · · Score: 2, Insightful

    Again, the 10x developer sounds like a myth until you work with him -- I'd say it's the top 1% -- but 3x developers are common.

    If 3x developers are common, then what is the baseline you are comparing them against ? The very worst programmers ?

    The "contributes negatively" programmer is someone you've met, though the hallmark of bad management is to encourage that guy to work more.

    So, since the baseline seems to be less than zero, and the best developers are three times that, are you trying to say that the most productive developers produce enormous piles of crap ?-)

    But seriously, unless you can quantify productivity numerically in an objective fashion, saying someone is "three times" or "ten times" as productive as someone else is 0.961x as meaningless as "devolved systemic projection".

    There's a reason that "real" engineering companies have fellowships and Distinguished Engineer titles to recognize, empower, and retain the top 1% engineers on other fields.

    Yes. Specifically, real engineers and their companies get hauled to court if the product they designed blows up in the user's face. Software engineers don't; they and their company get paid more to help the users deal with the errors they made - this is known as "support".

    Just a little bit cynical here ;(...

    --

    Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

  23. Re:Real Talent? by lgw · · Score: 2, Insightful

    "Common" as in: "you've probably met one". When you can't measure something well, you can still measure it a little - a half order of magnitude isn't exactly overspecifying. However, when when you know you can give a team of 5 engineers N days, or your good programmer N days, and get the feature delivered on time, that's a pretty good basis for comparison!

    There are plenty of software development jobs (even outside of life safety) where there's no room for serious errors. Sure, GUIs can be poorly designed and crash, and some CRUD programming has room for mistakes (or at least crashes), but any time you're handling customer data you don't really have any room for corrupting that - MySQL jokes aside.

    --
    Socialism: a lie told by totalitarians and believed by fools.
  24. Re:Real Talent? by MadKeithV · · Score: 2, Insightful

    And I think the lesson is: The developer who cares is much, much more valuable than the developer that doesn't. So if your company is not inspiring your developers to care, you're going to hit a brick wall.

  25. Processes galore by raw-sewage · · Score: 2, Informative

    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.

  26. Re:Real Talent? by ScrewMaster · · Score: 2, Interesting

    Maintainability damn well can be designed in from the beginning!

    I agree, it most certainly can. Seriously, what is the point of a clean, well-engineered design, if you're not attempting to build a solid foundation for future work? Why not just crank it out any old way so long as the spec is met? Rhetorical question.

    Learning how to code for maintainability up front is more a matter of experience (having been burned enough times by not having done it, and tried enough possible solutions until you've found those that work) that it is talent. It's also something that many programmers I've worked with over the years (almost three decades at last count) deem unnecessary, because they honestly don't know how. That, and the fact that thinking about maintainability requires actual forethought, as well as some extra bureaucratic/recordkeeping overhead. If you're not planning on being around for more than a few years in a given job, and don't give a flying fuck about the poor bastard down the line, then why waste a neuron on maintainability? That's how a lot of people look at it, I'm afraid.

    I ran my own software business for, oh, fifteen years or so. I started out not concerning myself about maintainability because I was only worried about delivering the product on time. Then, after being in business for a few years and having to maintain my own code I changed my tune pretty quick. I mean, I got really tired of asking myself the same question over and over: "what the hell was I thinking?" And I mean that literally: when the code was written, what was I thinking? 'Cause it wasn't always obvious from the code itself, and I wasted a lot of time refiguring things out from scratch. Wasted even more time refactoring code because I hadn't bothered to think ahead, either. Now to be fair, I wasn't very experienced then and didn't really know what kinds of things for which to plan. That excuse doesn't wash anymore, I'm afraid.

    Right now I'm responsible for several hundred thousand lines of code much of which is over a decade old. If you don't constantly work towards maintainability in an environment like that, you'll founder quickly. Matter of fact, several years ago I went through a major refactoring of that codebase (took a couple of months) just to make it into something that could be dealt with, long-term. Nobody had bothered until that time: the damn thing just kept growing like some amoeboid monstrosity. Reorganizing that project was a thunk of gruntwork that I don't want to ever have to do again, but I did it because not doing it was even more frustrating.

    I used to talk to myself a lot more back then.

    --
    The higher the technology, the sharper that two-edged sword.