Working on existing software built by someone else is one of the most difficult challenges in the software consulting industry. People want to know how much it will cost. But we don't really know what we will be getting into until we get our hands into the mix.
Even worse, the client is used to working with a developer who knows how everything works--after all, they wrote it. When a new developer gets started, there are many hours--sometimes hundreds of hours--spent just learning what is there and how it works. That expense of getting a new person up to speed can be a hard pill for a client to swallow.
What do they do in the construction world? They start by giving estimates for what they think they will need to do and build in a buffer - a "just in case" amount for unforeseeable problems. If something bigger than the buffer comes up, they stop and present the client with options, and then either raise the budget or change the requirements.
This might not sound like the ideal solution, but work has to be started before you know the full extent of the problems. To discover mold in the walls, you have to tear into those walls. The key is to be prepared. If there are extensive or expensive issues to be resolved, come up with creative ways to fix the problem so as to minimize the expense and stay close to the original budget.
So if you have an existing software application that needs to be updated or upgraded, what do you need to consider?
First, expect ramp up time (and cost) in order to get the new person up to speed. The first few weeks or even months, depending on the size of your custom software application, may see few visible results.
If you are getting estimates from vendors, ask exactly what they plan to do for that amount of money. If you are very specific about what you want, you should expect bids that are fairly close to each other. However, if the estimates are all over the board (one company we talked to had estimates ranging from $5k - $300k+) then you probably need to size down what you are asking them to do (pick a small chunk of work to start with) and then very clearly, with more detail, spell out your requirements. This will produce estimates that you can better compare - apples to apples that should result in estimates that vary by smaller amounts.
Make sure you and your vendor budget time and money for unexpected things that crop up. Even perfect projects done by the best people have issues come up.
Finally, pick a team that solves problems creatively. Quite often, creative individuals turn a problem into an opportunity or find slick ways to solve the problem with little money. When we interview we look for this--we give the potential hire a situation we have encountered in the past and ask for their solution. If you do this, give the base information you had when you encountered the issue and ask the potential hire or vendor what they would do. They usually don't have time to actually solve the problem--that isn't the point. You just want to see how they think and if they can be creative.