After my recent post about The Dark Side of mISV's I received numerous comments and emails about different ways to prevent the situation from happening again and ways to mitigate if it does happen. While I appreciate the advice, many of the aspects were implemented on later contracts before even that development was complete. While we are steadily dropping custom development not related to dotProject and complementary applications, I'm laying out the specific changes that exist in all of our contracts now.
The key points:
- Now all jobs for new customers require 20% down before it even goes on our schedule.
- Each successful demo of a milestone – on our server of course – generates an invoice for another % of the funds.
- Failure to pay that invoice (net 10) stops development.
- Lack of communication stops development.
- If at any time development is stopped – as described above – all future dates are delayed approximately 1 week + the duration of the delay.
- No rights, priviledges, ownership, etc are transfered until all payments are made in full. While most contracts have the implicit concept of “you don't pay, you don't get the services”, this spells it out explicitly.
- If anything has been delivered to their systems, once an invoice is missed, it gets deleted immediately. (This is specified in the original contract, which my attorney has assured me offers some protection against “destructive actions”, etc. since it is clearly laid out.)
- Late penalties are spelled out clearly in a flat percentage applied monthly. As we moved into higher transaction systems where there were potentially hundreds of transactions for hundreds of dollars each, I briefly considered basing penalties on a percent of the business transacted through the potential system – my lawyer liked that one – but we decided that this would be a metric difficult to track and nearly impossible to prove if the customer has already been demonstrated to be untrustworthy.
- On the upside, if at any time the customer is unsatisfied with the work performed, they can walk away. Of course, no code is transferred until their account is settled. Luckily, using Subversion and dotProject, I can take a snapshot of all work up to a certain point and settle to that point.
Fortunately, about 85% of CaseySoftware's customers at any given time are repeat customers, so this point has been irrelevant. Some people may believe that these clauses are draconian but having them all laid of explicitly clearly defines all the expectations on both sides early in the process. Fortunately, I have only had to enact one the above clauses and hope I can continue to say that for years to come.
I also work on a simple basis. If I don't like you, my team and I are not going to work with you. Life is too short to spend with people you don't like.