How to negotiate software contracts