About a year ago, I started work on what was to be a fairly simple website: a product catalog with a shop to buy the products, and some fairly simple content sections with monthly articles. No biggy (I won't name the site not to rick disparaging them).
And at first it worked well. There was sufficient flexibility in the way the catalog was handled to accomodate their quirks. But then the quirks started to become more frequent. A special case here, a special case there... This product should have a different label in part foo of the shop, that kind of thing.
I tried to slow down their chaotic ardour and deep love of useless additions, and managed to a certain degree. Every time they'd accept my reasons, say they understand, and ask again two weeks later for something slightly different but amounting to exactly the same in terms of special-casing. And once in a while I wouldn't be around to voice my opinion, and whoever talked to them -- while being aware of the problem -- eventually had to yield on a small bit and not try to convince them that there was a better way.
Today of course, the site has reached a point where it would be more efficient to have it in plain static HTML than with templates, database backends, and some smallish rather ad hoc CMS system. There's only so much chaos one can normalize.
I thought about refactoring of course, but there's no way that I can see that this site could even be refactored without a full-fledged CMS. It's just a huge pile of special cases, that unfortunately also have to be sufficiently dynamic for the shop to work. You can imagine the horror that the templates look like. And even then, when I say "full-fledged CMS", I mean full-fledged as what I do require from a web CMS, not full-fledged as in what's currently available. One in which special cases would be marked as metadata on given documents, and a SpecialCase filter that would know what to do with them. That way it would be abstracted, perhaps complex but manageable and clean.
Of course, I guess I should just quit bitching and finish implementing it