Stories
Slash Boxes
Comments

News for nerds, stuff that matters

Slashdot Log In

Log In

[ Create a new account ]

How To Make Software Projects Fail

Posted by timothy on Tue Dec 04, 2001 08:48 PM
from the excessive-capitalization-is-a-start dept.
Bob Abooey writes: "SoftwareMarketSolution has an interesting interview of Joel Spolsky, of Joel on Software fame. Joel, a former programmer at Microsoft, discusses some of the reasons he thinks some very popular software companies or projects fail, including Netscape, Lotus 123, Borland, etc." This interview brings out some mild boiler-room stories which sound like they could be the basis of a good book, along the lines of Soul of a New Machine .
This discussion has been archived. No new comments can be posted.
How To Make Software Projects Fail | Log In/Create an Account | Top | 905 comments (Spill at 50!) | Index Only | Search Discussion
Display Options Threshold:
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
(1) | 2
  • Isn't it obvious? by smileyy (Score:2) Tuesday December 04 2001, @08:53PM
  • Good point (Score:5, Insightful)

    by Bandito (134369) on Tuesday December 04 2001, @08:54PM (#2657494)
    He says:

    "My theory is that this happens because it's harder to read code than to write it."

    He couldn't be more right. I've recently been asked to port some code from another group in the company. Upon first reading it, I found global variables being referenced from everywhere, and it looked terrible.

    The more I looked at it though, the easier it got to read, and having an existing code base to work from made things much easier.

    Plus, when I have problems with it, I can blame it on a "design error" by the previous programmers!
    • Re:Good point (Score:5, Insightful)

      by Skyshadow (508) on Tuesday December 04 2001, @09:04PM (#2657542) Homepage
      This is why it's important to force your developers to (gasp) comment their code. Of course, 99 times out of 100, this won't happen because either (1) the boss thinks that'll slow you down and you'll miss your release date or (2) your boss has never written a line of code in his life and doesn't even know you can comment on that computer codes thing.
      [ Parent ]
      • Re:Good point by czardonic (Score:2) Tuesday December 04 2001, @09:11PM
        • Re:Good point (Score:5, Insightful)

          by zmooc (33175) <zmooc@zmooc. n e t> on Tuesday December 04 2001, @09:49PM (#2657730) Homepage
          Good code speaks for itself about what it does, but not about WHY it does something and that's were comments come in handy.
          [ Parent ]
          • Re:Good point by A.Gideon (Score:2) Wednesday December 05 2001, @01:01PM
            • Re:Good point by zmooc (Score:2) Wednesday December 05 2001, @03:15PM
        • Re:Good point (Score:5, Funny)

          by jdcook (96434) on Tuesday December 04 2001, @09:59PM (#2657772)
          I couldn't agree more. In a similar vein, I removed the turn signals from my car. I get .0000047% improved performance and, after all, what good are signals? I know where I'm going.
          [ Parent ]
          • Re:Good point by mccalli (Score:2) Wednesday December 05 2001, @11:08AM
        • Re:Good point by thePfhitz (Score:2) Tuesday December 04 2001, @10:40PM
          • Re:Good point by haruharaharu (Score:2) Tuesday December 04 2001, @10:53PM
            • 1 reply beneath your current threshold.
        • Re:Good point by mshiltonj (Score:2) Tuesday December 04 2001, @11:02PM
        • Re:Good point by rodgerd (Score:3) Tuesday December 04 2001, @11:34PM
        • Re:Good point by Andy_R (Score:3) Wednesday December 05 2001, @06:43AM
        • Re:Good point by johnnyb (Score:2) Wednesday December 05 2001, @02:51PM
        • Re:Good point (Score:4, Insightful)

          by Anonymous Coward on Tuesday December 04 2001, @10:04PM (#2657800)
          If you think no comment is ever useful on well written code, you shouldn't be a developer. If someone new has to come into your project (especially a jr. engineer), well placed comments will greatly decrease the time required to understand the overall function of your code. By assuming your code speaks for itself, you're assuming everyone is exactly as familiar with the code as you. This basically forces a newcomer to study your code down to every nook and cranny before it even makes sense. Not commenting your code is nothing other than lack of discipline and a sign of indifference towards the overall success of the project.
          [ Parent ]
          • Re:Good point by beable (Score:1) Wednesday December 05 2001, @05:40AM
            • Re:Good point by deaddrunk (Score:1) Wednesday December 05 2001, @06:55AM
          • Re:Good point by mightbeadog (Score:2) Wednesday December 05 2001, @11:56AM
        • Re:Good point by Anonymous Coward (Score:1) Tuesday December 04 2001, @10:05PM
          • Re:Good point by Anonymous Coward (Score:1) Tuesday December 04 2001, @10:24PM
        • 2 replies beneath your current threshold.
      • or (3).. (Score:4, Insightful)

        by rho (6063) on Tuesday December 04 2001, @09:13PM (#2657592) Homepage Journal

        or (3), incessantly repeated nerdisms such as "if it was hard to write it should be hard to read" instill an improper sense into young, impressionable programmers.

        [ Parent ]
        • Re:or (4).. by Pentagram (Score:1) Tuesday December 04 2001, @09:37PM
        • 1 reply beneath your current threshold.
      • Re:Good point by Razzak (Score:1) Tuesday December 04 2001, @10:14PM
      • Re:Good point by small_box_of_stuff (Score:1) Wednesday December 05 2001, @09:23AM
    • Re:Good point (Score:5, Insightful)

      by StaticEngine (135635) on Tuesday December 04 2001, @09:30PM (#2657658) Homepage
      Good code is not just code that compiles and runs efficiently. Good code also has the following properties:
      • Clear, Consistant Formatting - This code complies with the company standard for writing code. Indents are properly nested, Functions are named consistantly, variables use Hungarian Notation or some other standard. Any programmer should be able to look at code by another programmer and pick up on it very quickly, without shaking their head and saying "What the hell were they thinking?"
      • Copious Comments - Lots of comments, clearly written and explanatory. What does this function do? Put a block at the beginning explaining it. How does this algorithm work briefly? Write a paragraph if you have to. The best comment I heard was from a friend about a former coworkers code: "It's English with some C++ thrown inbetween the comments."
      • Documentation - Anyone who shrugs this off is an idiot. You always have time for documentation. And it's not just for the instance where a programmer gets "hit by a bus." It's for people who leave behind code when they quit, or go to a new project. It's for the new hires, so they can understand and study and learn good design, good techniques, and developer rationale. It forces developers to explain themselves. And it allows non-techies to understand what they're doing. Imagine you had to get through 12 years of grade school with no books. Pretty frightening, eh? Documentation is good. Write it.
      Coders who follow these rules truly are an asset to their company. Geeks who hack, write unreadable code, and utter geek credos about enforcing obfuscation and being purposefully vague have no place in a business environment.
      [ Parent ]
      • Re:Good point by Cato the Elder (Score:1) Tuesday December 04 2001, @09:41PM
      • All things in moderation--including comments by achurch (Score:3) Tuesday December 04 2001, @09:45PM
      • Re:Good point (Score:4, Interesting)

        by Codifex Maximus (639) on Tuesday December 04 2001, @09:52PM (#2657742) Homepage
        From a purely intrinsic point of view, I agree with you StaticEngine. From a purely practical point of view, I couldn't disagree more.

        Let me explain myself. I have been the type of programmer you speak of. I have written copiously commented code. I have properly formatted my code and used standardized function names and such. After all, I was taught in college to write and comment my code so that any programmer could walk in off the street and understand it easily; that made it easy to replace me and I was.

        It seems that when you follow good programming practice, you end up destroying your job security; and as silly as it sounds... it appears to be sooth.
        Jaded in a realistic world.
        [ Parent ]
        • Re:Good point by Anonymous Coward (Score:1) Tuesday December 04 2001, @11:42PM
        • Re:Good point by rootofevil (Score:1) Tuesday December 04 2001, @11:44PM
        • Re:Good point by Anonymous Coward (Score:1) Wednesday December 05 2001, @12:28AM
        • Re:Good point by TeeWee (Score:2) Wednesday December 05 2001, @05:08AM
        • Bad point by quark2universe (Score:2) Wednesday December 05 2001, @09:54AM
          • Re:Bad point by MrBoring (Score:1) Wednesday December 05 2001, @12:59PM
          • 1 reply beneath your current threshold.
        • Job security? (Score:4, Insightful)

          by LinuxParanoid (64467) on Wednesday December 05 2001, @10:20AM (#2659643) Homepage Journal
          Dude, think about what you are saying. Do you want to keep maintaining your old crappy code or pass that job onto someone else? Or do you want to go write some new code?

          Your perspective assumes your company requires a fixed amount of software. Think more imaginatively.

          Better documentation means you can shove maintenance to a more junior programmer with less pushback.

          Also, without good documentation, its a b*tch to try to outsource/handoff pieces of the code you don't want to bother writing.

          Besides, I don't care how well documented your code is, you should always be able to convince a boss that its more efficient for you to make changes to it (even at higher salary) than some cheaper guy who has never seen the code before.

          --LP
          [ Parent ]
        • Re:Good point by Jucius Maximus (Score:1) Wednesday December 05 2001, @01:26PM
        • Re:Good point by rkent (Score:2) Wednesday December 05 2001, @03:15PM
      • Re:Good point NOT by renehollan (Score:2) Tuesday December 04 2001, @10:29PM
        • Re:Good point NOT (Score:4, Insightful)

          by cjsnell (5825) on Tuesday December 04 2001, @11:55PM (#2658194) Journal
          Coders who follow these rules produce what? 3000-6000 lines of code a year? Ain't gonna get product out the door that way. What you get is code with lots of comments about what it is supposed to do, but doesn't because of all the time spent on documentation instead of design and debugging.

          Excellent point. My philosophy about commercial software is this:

          Never forget why you're writing the code to begin with. The point is to get working, stable code out the door as fast as possible. Anything that does not accomplish this is a waste of time.

          Doing your architecture work is fine, but do it on a whiteboard in your cube with your co-workers. Don't waste time holding formal design meetings and drafting useless documentation and diagrams because, honestly, nobody will ever read them.

          Modularize/componentize your code as much as possible. Document what the module as a whole does and what data it requires and what data it returns . You shouldn't have to waste time commenting every single peice of code. If you''ve modularized and documented what the module does, any decent programmer can figure out the rest.

          In addition to not hiring idiots, don't hire people who love to wallow in bureaucracy and process. Besides not getting jack shit done, they impede everybody else.

          If you want to comment and spend hours drawing Visio diagrams, fine. Wait until after the product is released to do this. These do not accomplish the goal (see point #1).

          Chris

          [ Parent ]
        • You're wrong about Hungarian by G Neric (Score:1) Wednesday December 05 2001, @12:58AM
        • Re:Good point NOT by ttfkam (Score:2) Wednesday December 05 2001, @01:14AM
        • Re:Good point NOT by StaticEngine (Score:2) Wednesday December 05 2001, @04:23AM
        • Re:Good point NOT by scrutty (Score:1) Wednesday December 05 2001, @06:47AM
      • by beable (170564) on Wednesday December 05 2001, @06:10AM (#2658914) Homepage
        Clear, Consistant Formatting: [...] variables use Hungarian Notation or some other standard
        I find Hungarian notation much harder to read than not using it. For example, I find the Unix man page for strcpy which looks like this:
        char *strcpy(char *dest, const char *src);
        much easier to read than the Windows-style Help which is full of stuff like "LPCSTR lpBuf" and suchlike. The idea which is commonly called "Hungarian Notation" says that a variable name should include the type of the variable as a prefixed abbreviation in front of the name. This leads to stuff like:
        byte[] baBuf;
        whereas without Hungarian, it might be called:
        byte[] message;
        which would be much more meaningful.

        Especially in object-oriented programming, the type of a variable is the least important piece of information about the variable, and has no place being abbreviated and prefixed to the name. The most important thing about a variable is what the programmer is using the variable for, and that information should be what the name of the variable tells another programmer. If somebody really wants to know the type of a variable, then their editor or IDE should tell them what it is. If it doesn't tell them automatically, then they should look at the variable declaration, which will state exactly what type the variable is. If programmers want the variable name to tell them the type, then what is the point of declarations? And why bother putting a comment near the declaration saying what the variable is for, because people aren't going to read the declaration or comment anyway, because they are just going to look at the Hungarian warts.

        The argument that Hungarian notation reduces the possibility of assigning variables of different type to each other is long dead with compilers well capable of throwing errors if any incompatible type assignments are attended. I think that Hungarian notation is dead, or at least should be.
        [ Parent ]
      • Re:Good point by japiter (Score:1) Wednesday December 05 2001, @09:01AM
      • Re:Good point by Salamander (Score:2) Tuesday December 11 2001, @10:51AM
      • 2 replies beneath your current threshold.
    • Re:Good point by joshv (Score:2) Tuesday December 04 2001, @10:31PM
      • 1 reply beneath your current threshold.
    • Don't forget CVS by dimator (Score:2) Wednesday December 05 2001, @01:16AM
    • Re:Good point by small_box_of_stuff (Score:1) Wednesday December 05 2001, @09:46AM
      • Re:Good point by Bandito (Score:1) Wednesday December 05 2001, @12:41PM
    • Re:Good point by Bouncings (Score:2) Wednesday December 05 2001, @02:29PM
    • 3 replies beneath your current threshold.
  • How to make a good software project / product fail by Twilight1 (Score:1) Tuesday December 04 2001, @08:58PM
  • by Skyshadow (508) on Tuesday December 04 2001, @08:59PM (#2657515) Homepage
    Step 1: Hire my boss (God, please hire him away!).
    Step 2: Put him in charge of software development.
    Step 3: Do nothing as priorities change weekly and deadlines slip away.
    Step 4: Do nothing to stem exodus of clued-in employees to less-screwed companies.
    Step 5: Force remaining employees to work 15 hour days. Provide subtle reminders that there's a recession out there.
    Step 6: Do nothing as even non-clued-in employees flee.
    Step 7: Hire a sweatshop in China to crank out code; present this sound like a good idea.

    There, that was pretty easy. And, to be honest, everything beyond Step 1 pretty much happens on its own.

  • by Omerna (241397) <clbrewer@gmail.com> on Tuesday December 04 2001, @08:59PM (#2657516) Homepage
    I'd HIGHLY suggest reading a SoaNM. One of my favorite books (fiction or non).
  • next week? by scaryjohn (Score:1) Tuesday December 04 2001, @09:03PM
  • by Sonicboom (141577) on Tuesday December 04 2001, @09:06PM (#2657548) Journal
    Alot of .com's I've worked at in the past 2-3 years always wanted to "lowball" developers and engineers, while lining the pockets of resource managers, implementation managers, marketing people, etc.

    Then a skilled/talented developer and/or engineer wants more money. The employer does nothing to retain them - thus the skilled/talented employee leaves.

    Now who maintains the code?

    The other problem is bringing in short term consultants for long term projects. The non-technical people who make these executive decisions don't seem to see the feasability of KEEPING their code maintained by the talented/skilled person who BEGAN the development on it.

    I know alot of consultants read /. - so I'll probably take a big hit on the karma - but I just was the casualty of another dotcom failure - and this was a seriousl problem.

    Another problem is hiring non-technical managers to manage technical people. At my last job we had a manager off of an automobile manufacturing production line quit his job at the auto company to take a job as the manager of a group of Unix admins. This "bumper jockey" had NO CLUE what we did for a living, and treated us like a bunch of unionized UAW slobs, and not like professionals.

    How can a non-technical boss effectively manage technical people???

    Also - how about all the Ceo, Cio, Cto, eieio - types with their big salaries, catered lunches, etc... Alot of them have NO programming or hands-on technical experience. Hell - I've had the CTO come up to me and tell me that "The Internet was broken" when he knocked the dongle out of the side of his laptop - severing the network connection. And this guy is our Chief Technology Officer???? *lmao*

    I'm not saying that only technological people can make technology companies work - but I do feel that managers should take some sort of hands-on classes to learn some basic programming and internet skills so they have SOME SORT OF CLUE about what WE all do for a living!
    • Death by Engineers (Score:5, Insightful)

      by Skyshadow (508) on Tuesday December 04 2001, @09:17PM (#2657617) Homepage
      I'm in the alternate situation: Too many of my execs (except, for some reason, the VP of Development) are engineers.

      This leads to a whole host of problems:

      Many of them tend think they're smarter than people in non-engineering roles.

      Pursuant to this, they don't think PR and marketing and sales are "hard" or really even "important".

      Again after #1, they're always right when in disagreement with marketing or sales guys.

      Most of them haven't developed in a decade+, so now they know just enough to be dangerous -- make micromanaging decisions about detailed subjects things they don't understand well enough, chase unnecessarily after bleeding edge tech, etc.

      Fail to understand that not everyone wants to always work 14 hours a day.

      Laugh off meetings, so that eventually nobody in the company knows whats going on.

      As a result, nobody's heard of us (no marketing budget, no trade shows, no nothing) and nobody's buying our products (engineers tend to make lousy sales guys; despite what they might believe, nobody wants to listen to a 3-hour ridiculously detailed presentation on your product).

      There's got to be a happy medium someplace.

      [ Parent ]
    • Re:problem = clueless management/directors/execs e by Maul (Score:2) Tuesday December 04 2001, @09:59PM
    • Re:problem = clueless management/directors/execs e by Big Jim (Score:1) Wednesday December 05 2001, @01:44AM
    • Summary (Re:problem = clueless management...) by osolemirnix (Score:1) Wednesday December 05 2001, @04:07AM
    • Re:problem = clueless management/directors/execs e by bobaferret (Score:1) Wednesday December 05 2001, @10:14AM
    • Re:problem = clueless management/directors/execs e by K-Man (Score:2) Wednesday December 05 2001, @04:25PM
    • Non-aggressive personalities by Grax (Score:1) Wednesday December 05 2001, @10:01PM
    • Re:problem = clueless management/directors/execs e by version3 (Score:1) Tuesday December 04 2001, @09:32PM
    • 7 replies beneath your current threshold.
  • I'm a little confused.. by Anonymous Coward (Score:1) Tuesday December 04 2001, @09:06PM
  • Rewrite vs compatability (Score:4, Interesting)

    by Iamthefallen (523816) <Gmail name: Iamthefallen> on Tuesday December 04 2001, @09:07PM (#2657553) Homepage Journal
    Joel: Hmm. That reminds me that Microsoft learned the "no rewrite" lesson the hard way.

    Obviously, MS biggest problem though is that they don't know when to give up and actually rewrite. For instance, it seems that the windows series of operating systems are all made with the intent of being backwards compatible and reusing core parts back to early DOS systems. Backwards compatability and code reuse is nice and all, but there is a limit to it and a time to give up.

    It will however be interesting to see what comes out of the "total rewrite" of IIS.