Pages

Monday, October 22, 2018

Stages of the Software Legacy Lifecycle

Software has a life cycle just like everything else, and sometimes even goes beyond into the after-life (in keeping with this season, that's zombie-hood).  We've all had to deal with legacy code, either as developers or as users.  I've developed a 13 point scale to measure legacy-ness of software from inception (1) to death (12) and beyond into zombie-hood (13).  The following guidelines to help you place where the code you are working on or using might fit into.

The form of this is "Stage / What They Say / What They are Thinking", followed by what it might really mean when talking to someone who knows something (perhaps not much) about the code in question.

1. First Date / May be Coming Soon / Never heard of that one before.

  • The product manager hasn't heard that idea before, but it sounds intriguing.  Could you say more?

2. Talking about It / In a Future Major Release / Heard of that, still thinking about it.

  • There's an open requisition for the architect who can design that.
  • It's not in the plans.

3. Engaged / In a Future Release / Heard of that, think it might be useful.

  • The architect knows what needs to happen, but needs to document it.
  • There's an open requisition for the engineers who can write that.
  • It's in not in the plans yet.

4. Twinkle / In the Next Major Release / Heard of that, pretty sure it's useful.

  • There's an open requisition for the architect who can design that.
  • It's in the plans.

5. Pregnancy / Coming Soon / Know what that is, planning on it.

  • The architect knows what needs to happen, but may need to document it.
  • There's an open requisition for engineers who can write that.
  • It's in the plans.

6. Birthing / In the Next Release / Know what that is, implementing it.

  • The architect knows what needs to happen, and has documented it.
  • There are engineers who know how to write that code.
  • It's in the plans.

7. Infancy / Piloting / Still working the details out.

  • The architect knows what needs to happen, and has documented it.
  • There are engineers wrote that code.
  • There are still some bugs preventing full shipping.

8. Childhood / It's in Production Today / Implemented it.

  • The architect who designed it is still around.
  • The engineers who wrote it are still assigned to the project.
  • It shipped.

9. Adult / In Maintenance / Been there, done that, losing interest.

  • The last engineer who knows how that works is leaving the company for another opportunity.
  • An open requisition exists for an engineer to maintain that which is expected to be filled soon (hopefully before the last engineer who knows how that works leaves).

10. Middle-Age / Reaching the End of Life / Losing interest.

  • The last engineer who knows how all of that works left the company for another opportunity.
  • There's an intern who can compile it and can fix the occasional bug.

11. Elderly / Legacy / Lost interest but the customer's haven't.

  • The person who wrote that retired.
  • The engineer who took it over from left the company for another opportunity.
  • This is an engineer or intern who maintains that and understands how some of it works.

12. Dead / End of Life / Customers have lost interest.

  • The intern who maintains that goes back to school full-time next week (or at least that's what they said).

13. Zombie-Hood / Extreme Legacy / Everybody else BUT the customers have lost interest.

For that mission critical software that just can't go to end of life.
  • The guy who wrote that is dead, 
  • The person who took it over from him has retired, 
  • The engineer hired to maintain it quit,
  • There's an intern who can run the legacy compiler used for it and who can fix the occasional bug.
  • Nobody else knows how that any of that works anymore.


Just like real life (in the movied), death and zombie-hood can happen to software at just about any time, and death isn't really a prerequisite stage before zombie-hood.

   -- Keith