custom software contract