Friday, July 30, 2010

Should We Re-Write It?

Yes, of course we should.  Now, what were we talking about again?  Ah, that's right, a legacy application somewhere in the bowels of our enterprise.  It's old, it's confusing, it's built from clay and straw and other such dated materials.  It's just an embarrassment to have around and is difficult to support.  So yes, of course we should re-write it.

Whoa, hold on there cowboy.  I said we should re-write it, not you or I should re-write it.  There's a lot involved in "we."  Just directly porting that old ASP code to shiny new C# code isn't going to solve anything.  The problem isn't that it's written in ASP.  The problem is that it's written poorly in ASP.  That difference is what's going to get you in the re-write.  Just changing the language isn't going to solve anything, there's no value in it.  The application needs to be re-written, not transliterated.

Consider an analogy.  Let's say some random guitarist writes a song.  And let's also say that song is terrible.  The guitarist might not be so bad, and maybe there was some real inspiration behind the song and he really wanted to express it.  But he failed.  The song is just awful.  The music and the lyrics don't come together to tell a story so much as they get in each other's way and prevent each other from telling their parts of the story.  It's hard to follow, it doesn't get the message across.  It's just a bad song.

Would that song sound any better on a piano?  Probably not.  Sure, a skilled pianist could add a little talent to the playing of the song.  Each note would individually sound better, more alive and easier on the ears.  But is that really your measure of what makes music "good"?  That it's slightly less offensive to your ears?  The song still doesn't convey its story.  It's still difficult to follow and understand.  It still, well, sucks.  All you've done is expend a sizable amount of effort for the purpose of, what, exactly?  You haven't fixed the code, you've transliterated it.  You've created the C# version of engrish.  Ya, that's going to be much easier to support.

The problem is in the design of the application.  We don't know what it does, the business user doesn't know how it does it.  But maybe if we work as a team, we can mutually educate one another a little bit and pool our expertise to actually come up with a solution to a business problem.

Having the developers take it upon themselves to just re-write applications is a very, very bad idea.  Why?  Because you're asking the person who knows the least about the requirements (doesn't know the story the song is trying to tell) to develop an application that meets those requirements, and the business user doesn't even know this is taking place.  Nobody knows that the entire application needs to be regression-tested.  Does the business user have time for something like that?  They didn't ask for it.  Does anybody else know how to test it or validate that anything in it works?

Yes, I agree that poorly-written legacy software which is difficult to support should be re-written.  Absolutely.  But not secretly.  We need a product owner.  We need collaboration.  We need to come together to define the correct solution to the business need at hand.  Otherwise we're just turning one difficult-to-support application into another difficult-to-support application.

To put it another way... If somebody successfully polished a turd, would you now be willing to touch it?

No comments:

Post a Comment