I'm currently working on an application for a company, a project which involves interacting with their mid-sized API. The application is a port of their existing iOS application. When I gave them an initial estimate for this project, it was based on two assumptions:
1. The API would be documented.
2. The iOS source would be reasonably well constructed.
Having received access to both the API and the iOS source, neither of these assumptions have proved true.
The API is barely documented, there are redundant methods (with some deprecated or discontinued, but not mentioned), data is repeated across models without any reason, and worst of all most calls return silently without any indication of success or failure.
The iOS application is the result of several years of low-budget contractors throwing together code. None of it is commented, there is code duplication all over the place, and it aids very little in the construction of the Android application.
Because of this, it now looks like building an API client alone will take me almost as long as the original project estimate. Further complicating things is that I start a new job at the end of the month (the original project would have been finished much before my start date), but now there's no way I can get the whole application done before that date.
I'm not sure what to do. I don't want to simply throw away the weeks of work I've performed for nothing, but I also don't see a way to finish the entire application before my start date.
I'm sorry for the size of this. I'm just not sure what to do. Does anyone have any advice?
1. Sit down with the customer, explain the situation to them, and tell them that you need to ask for more money in order to complete the project. If they agree, use the extra money to subcontract the project out.
2. Find somebody else who would be interested in taking over the contract (preferably somebody you know, trust and have a relationship with) and then sit down with the customer, explain the situation and say that you'd like to negotiate a hand-off to the new supplier, who is better equipped to handle the project.
3. Go buy 10 cases of Red Bull, get some tooth-picks to prop your eyelids open, and work straight through and get 'er done.
4. Sit down with the customer, explain the situation and offer to deliver what you have, for a pro-rated portion of the original price.
5. Sue the customer.
6. Cancel the project outright, eat the loss and chalk it up as a learning experience. Next project, make sure you have a contract that features a change management process, opt-out clauses, incremental delivery (and payment), etc., to protect you from getting burned (that is, assuming you don't have those things now).
Note that option (5) above is totally a joke, and (3) is probably not recommended. I like (2) best, if you can pull all the pieces together. That way you preserve a positive relationship with the customer, and potentially enhance relationship with whoever you hand the work off to.