Dave Newton asked:
> 
> Assume a large body of existing work used across multiple websites:
> - No documentation
> - Buggy home-grown libraries (DB, connection pooling, 
> strings, everything)
> - Home-grown "custom tag" system (parse the file on each page load)
> - Essentially un-maintainable and un-extensible
> 
> So... How do you deal with this situation?

I recommend the book Working Effectively with Legacy Code, by Michael
Feathers.  And the book Refactoring, by Martin Fowler.  These two will
sharpen your tools for working on this system.  They'll also help you
concentrate on what you need to clean up for the work you're doing, and
leave aside cleaning up other parts until it's necessary.
 
> It takes too long to work on the existing codebase (I'd 
> guesstimate a minimum 2-4x longer than a reasonable 
> implementation, plus immeasurable developer irritation & 
> frustration) for even the most minor of changes. Can you 
> legitimately bill clients for work that should have already 
> been done? Do you have to justify to every client the extra 
> hours put in because of the current state of the app? _Can_ 
> it be justified? Does it have to be an internal cost, and if 
> so how can you generate momentum to get it done?

Ward Cunningham calls this situation "Design Debt."  By not keeping the
code clean as you go along, you build up a balance of design debt.
Every thing you do becomes a little harder to do.  This is like paying
interest on the debt.  For short periods, this can be a reasonable
tradeoff, but many teams only make the minimum payment, letting the
mess, and resultant difficulty, grow over time.

Personally, I think it's irresponsible to hand the client a system
that's wallowing in design debt.  And many clients are not able to judge
this for themselves (as they might look at the balance carried on a
credit card).  Whether they paid less for the messy system than they
might have for a clean one is a moot point, after the fact.  (And
generally I think the answer is "no.")  The face is that they own a
system that's going to be harder, and therefore more expensive, to
maintain.

Who bears that cost depends on how it's presented to the client.  If the
estimator didn't take this situation into account when they negotiated
the job with the client, it can be very difficult to convince them
later.  And since they've probably already dealt with a development team
that delivered less than was purchased (i.e. the messy system), they'll
already be predisposed to distrusting development teams.  Gaining that
trust is the key, but it's not easy.

 - George
   http://www.idiacomputing.com/moin/FavoriteBooks

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to