I'm going through a project that was outsourced after I left the company several years ago. This project was developed WITHOUT specification. I'm re-speccing it, so we can outsource it to ANOTHER company, who will build a version of it, while I'm currently building an entirely new version of it in HTML/JavaScript.

Don't ask why, my boss is a F*CKING MORON who thinks applications magically pop out of the air, and doesn't understand why prototypes can't be used in production.

I digress.

As I'm going through the work they did, I'm finding a number of atrocities. Architecture, for one, is non-existent. This application should be a single SWF that runs off of a few classes. Instead there are a dozen swfs and DOZENS of AS files, many of which aren't even used and you can tell they took from other people's projects.

But I had to share some of the winners, like this in one of the XML files used to feed the application:
<appendCorrectFeedback><![CDATA[False]]></appendCorrectFeedback>

That's right. A boolean value, stored as a string, as CDATA so as not to confuse the parser. Also note that apparently inside your AS, capitalization counts. A value that should in it's own right be an attribute of its parent node, not a separate value.

How about another?
<colortheme><![CDATA[Blue]]></colortheme>

This tag specifies the color of the background, nothing else. Inside the swf, "Blue" is converted to an RGB value that is used to tint the movieclip in the background. Why not just use the RGB value as a parameter, so I can use any color I want? Because that would make too much sense. Also, protected by CData, just in case the parser sees 'Blue' and starts to feel sad.

I could go on for pages, but I'll post just one more:
<reviewPreRequisite><![CDATA[Off]]></reviewPreRequisite>

This SHOULD be a boolean value, but no, Off is much easier to remember. Again, capitalized, and wrapped in CData to prevent the parser from shutting the power off by mistake.

I have TONS of stuff like this, not to mention a terrible design, and RETARDED business rules that interfere with functionality, but I'm too pissed off to document it all.

The moral of the story here is YOU GET WHAT YOU PAY FOR. This is what $20/hour and a 2 day turnaround gets you.

OFFSHORE AT YOUR OWN RISK.