Now, I've seen the way offshore fucks up projects. So I sit down, and try and figure out how best to prevent this sort of blow up. My solution? I write the program myself, mostly. I supplied design diagrams, documentation, and about 40% of the code, already implemented so that it matches the design. There are a bunch of blanks in the code marked with "TODO: Open the connection to the database and fetch the next record. Map the column values according to the tech spec, a la: 'rec.sMfgCode = dbrecord("sMfgCode")'*".
Now, it's entirely possible that the developer might screw up filling in those blanks. Mind you, this stuff is (theoretically) basic knowledge for a contractor, but hey- it could happen? But I was surprised by the scope of the offshore fuckup. The developer completely ignored the sample code I gave him. I did most of his job for him and he just pissed it down his leg and reimplemented the application. He ignored my design diagram, didn't create the classes I told him to, and generally fucked the entire thing up.
Also: no comments, bad coding practices, ignorance of key syntax elements, and a horrible horrible habit of doing lots of switching logic instead of using OOD and the config file to control app behavior.
I hate offshore.
*No, I didn't name the database columns. They really used Hungarian Notation. I hate Hungarian Notation