The "Real" Software Development Lifecycle...

If you ask a student out of college or technical school how software is developed, he'll say the software development lifecycle (SDLC) is something like:


  1. Gather requirements for a new system

  2. Design the new system's inputs, outputs, screens, etc.

  3. Develop the system

  4. Test the system

  5. Deliver the system to the customer

  6. Maintain the system



If you're *really lucky* he's read enough slashdot to know, it's more of a spiral or iterative approach--less initial work, more testing, earlier customer involvement.

The more I'm exposed to real software, I'm convinced it's closer to.


  1. Some nerd decided he needs a cool, fast widget to do 'X'. He just wants to make his job easier. He codes it up after-hours, fueled by cheetos and Mountain Dew

  2. He shows it to somebody in his cube. Immediately, that shameless self-promoter decides it's the second coming of VisiCalc

  3. The company makes a multi-language version of his Widget and starts selling it

  4. Version 2.0 comes out, adds 20 new features, 40 annoying bugs.

  5. Three years pass. The original nerd left the company, no one can decipher his pointer-arithmetic, bitwise-shift-left code, so they just wrap it in a DLL and hope to God it doesn't break. ( Or they choose to put the low man on the totem pole in charge of that code. Choose your poison ).

  6. After 5 years, the original widget is now a Java app that's a 250MB download, translated into 13 languages. It's slow and crashes randomly, and customers dislike it, but they depend on it. Managers present impressive PowerPoint slides on how they should SAVE THE WIDGET by "focusing on its core competency".

  7. Somewhere else, disgusted with Widget 10.5.1, a nerd writes a cool fast Gadget to do 'X'. He just wants to make his job easier. He codes it up...

  8. Lather, rinse, repeat.

Comments

  1. I think you're right (and I live in the same world). One question is, how are companies like Microsoft making this sort of thing work? (I guess that presumes you accept that they are, as I do.) How do you "ride the nerd" to success and avoid the bloated remnant product? (Sort of like a lot of TV shows's second season ...)

    ReplyDelete
  2. David,

    I guess what I'd say is, follow the practices of Bob Martin (unclebob) like this:

    - Don't let the code rot.

    - Don't put the low man on the totem pole in charge of your utterly critical subsystem. As Uncle Bob says, peeling off a 'tiger team' to work on the shiny new thing while leaving the other programmers to deal with legacy codebases eventually bites you. In the ass.

    What frustrates me is that people treat software as utterly disposable. If it sucks, so what? There's 15 other widgets that do the same thing. I'll use one of those.

    ReplyDelete

Post a Comment

Popular posts from this blog

Review: The Southeast Christian Church Easter Pageant

Driving for the Cure...? (Or, how I got blacklisted...)

No, I don't have Connective Tissue Disorder