A long one, I'll try to summarize. Setting: early '90s, before the internet was big. I'd just quit my job for a local BBS, but had made a contact in another state that wanted to use the BBS backend to create a web service. Big plans, big vision, great idea at the time. Let's call this man Phil.
Before I get the contract settled, I make it clear to Phil that he's going to be buying all the development software because I don't have it - he agrees. That's Visual C, the BBS backend, and the Btrieve database system. Also need his graphics/content/copy - to come later. (Note: This is never a good sign.) Draw up, fax and fax back contract.
Phil buys the software and tells me he'll be shipping copies to me via UPS. Back then, fair use still applied to software and backing up was a simple process. I'm expecting 15 discs or more: five for VC, 4 for Btrieve, and 6 for the BBS. Calls back after three days - no package. I get tracking number and find out it's not express so it'll take a week.
Package arrives and it's only six discs. Problem. Turns out to be first four of VC, and first two of BBS. Call Phil, get his secretary (a man, sounds like a boy?), he's out, call tomorrow. Call back, get Phil, explain missing discs. Sorry, get those out to you express, will call back with tracking number. Call UPS next day, and it's normal shipping. Wait a week for package, meanwhile coding some skeletal HTML and very basic C (can't really do much with no IDE) for the interface backend.
Package #2 arrives; it's all of VC and nothing else. Call Phil, explain that I need the rest of the software. Delineate exactly which discs to send, and also quote him a first bill for time I'd already spent coding plus phone time. Check's coming with discs. Call back for tracking number, and it's actually express this time, but it's 2 boxes (?).
Package #3 arrives - 2 boxes. First one contains six discs, the entire BBS backend. Second box has only a lone check covering the initial fee plus the hours billed over the phone. Still can't compile without the database API but at least I can configure the BBS on my test box. Call Phil, and he blames me for the mix-up and accuses me of dragging my feet! I counter immediately, and demand the remaining software under ultimatum of halting production. This seems to heat his spurs, so I take this opportunity to bill him for more work (some of which was done, and some of which wasn't.. yet.). Check plus discs coming UPS, call back for tracking number, etc. Call UPS and it's not an express shipment.
Package #4 arrives (now working on month two of the project). Inside is another complete copy of VC - no Btrieve. Another disc with some JPGs whose filenames were date/timestamps was included, along with a check. Call Phil, where's Btrieve? He accuses me of lying about the contents of the package and dragging my feet again. I tell him I'll continue production when I get the tools I need. OK, I'll ship them express. Verify he knows what discs I need (last 2 of database), call back with tracking number... UPS says it's express. Good. Cash check, pay bills.
Package #5, and I finally complete the suite of software! The box has six unlabeled discs, two were the missing Btrieve discs, and the first four of VC again..?? Whatever. Install.. and the third disc is damaged. *** AND *** SOME MORE!! Call Phil, explain, standard accusations of lying, will ship discs, tracking number, call UPS, not express so wait a week. So much for compile. Took this opportunity to bill for the next batch of code - not much, but I needed some flow.
Package #6 - and it's three unlabeled discs. Two are the replacement Btrieve discs, the last is more JPGs for the site. No check. I spend a chunk of time coding and renaming JPGs and get a skeleton site up on my test box. Call Phil - get the secretary. He turns out to be 17, friend of Phil's, and informs me that Phil is out of town for a week and a half. Thanks.
Code all week, get site smoothed out. Basic web portal is done, and looks pretty nice, too! Call Phil, he's not too happy - his wife filed for divorce. Ouch. Not my problem though - I need to get paid! Bill him for the work, and convince him to give me user/pass for the server so I can upload. Check's coming postal service, but wait until Monday to cash it.
Try to access server - no go, user/pass invalid. Call Phil and find out they belonged to the boy, who quit. Also find out the boy was the artist, but he was kind enough to finish the art before he quit (hence the second CD of images). He sets me up with a new user/pass. They work, I upload skeleton site. It works. Begin work on filling the gaps and integrating the BBS features (chat, forums, e-mail, MUD, etc). Cash check, pay bills.
Coding along when a call from the bank comes. Check bounced, billpays caused NSF, I'm overdraft. ****! Call Phil, ask why check bounced. Money is tight, divorce, blah, blah, will re-send plus $78 to cover $30 bounce plus two $24 NSF. Hurry or my phone gets cut. Express postal check to me - cash check. Back to work and the check clears and my bills are paid.
Site is ready for testing, so I upload it. Call Phil and ask why some basic features aren't working - he hasn't installed Btrieve on the server yet, will tonight. Whatever, bill him for time spent. Test site that night, and everything is working. Check's in the mail, but don't cash it until the first.
Cash check, call Phil with request for content/copy for unfinished corners of the site. Come to find out he didn't have any, and I should make it up (fine, more billable time) but doesn't go without the now-obligatory accusations of me not doing my job (even though I'd just uploaded a fully functional test to his server). Complete implementations of BBS features, and make up some bologna for the page descriptors. It'll pass until Phil decides he'd like something better (and so would I).
Sure enough, the check bounces, puts me in the hole again. Call Phil, he's very apologetic, sending another check right away. Comes express postal, and I cash it (having stopped production until I get paid). At this point, I wisely upload a "fix" to the server that prevented some navigation and disabled the BBS features. This way, when he calls to complain, I know he actually looked.
Check clears, but I realize he didn't cover the NSF/bounce fees this time. Add that to his next bill and get back to work filling the gaps. Write up more nonsense content, finish up basic features and even implement a want-ads module (leftover code from my last job). Don't upload yet - bill for time first (plus NSF/bounce fees). Call Phil and realize he never complained about the "bug". Tell him that the site is almost ready for testing, bill him for time spent. Check coming postal, don't cash it until the first.
Now, this is over four months after the contract was signed. Check comes, and it's good. I upload a mostly-working test of the site, and call up Phil to begin testing and refinement. Can't get a hold of him though. I figure I need some time off so I wait two more days to call him. Call back, and he says he's not ready to test yet, the divorce is getting finalized, call back in a week.
Call back in a week and he's irate with me. Says I've been dragging my feet and throwing obstacles in the way, that I care more about the money than the business relationship, etc. etc. I gently (as I can) remind him about the burned disc fiasco which he blames on the boy and he calms enough for me to get to the part where he needs to pay the final bit. I'm lucky enough to notice his last check didn't cover my bank fees as he'd promised, so I tacked that onto the bill. This last bill was a bit larger than the previous, so I decided to hold off on any actual fixes until the check clears. Testing - yes; fixing - no.
Phil must have never visited the site, because I didn't hear from him until I got his next check, with a predictable sticky saying wait till the first. I predict this four-figure is made out of 100% tire-grade rubber. He reinforces the "wait until the first" and then tells me we can start testing in a few more days.
I was right - the check was no good. Phil calls up, ready to begin testing, and I tell him to write me another check plus another $54 to cover a bounce and an NSF. Now he gets really freaked out - claims he doesn't owe me for the fees (in the contract, he has to pay my "out-of-pocket expenses"), claims he doesn't owe me for the last bucket of time, claims I'm running him into the ground, says the reason the site isn't done is all MY fault. 30 minutes of (billable) bickering and he agrees to send another check but doesn't want to do testing yet.
Check comes, and clears! Hooray!! Call up Phil to get the wagon rolling. No dice! Since I'm running him broke, and the site delays are MY fault, he expects ME to do the testing and bug fixing myself - and! - to not bill again until the site is fully live (according to the contract, the day he submits the site to search engines).
NO WAY. NO WAY IN HELL. Time to exercise my "emergency" option in the contract; I quit, click. Good thing I wrote a solid contract. Quick thinking inspires me - so I "patch" the site to make it virtually unusable, and quickly upload before he thinks to disable my login. Go back really fast and pull my want-ad add-on (it was mine, remember?), but try again to disable some core features too late.
Not a total waste - I did make several thousand dollars plus get to use a free copy of Visual C for years. Best part is this: got a call about three months later from the boy-secretary. Find out, Phil filed Chapter 11 since the site never took off and his divorce finalized. The ex-wife got almost everything - and the boy's dating her now! Ah, sweet justice...