We recently came across a customer who already had a GIS based Application running, but full of bugs. Our task in such a case is to get all those bugs out and have a stable application with some new features.
Client hardly had documents explaining interfaces,however, we get down to our job after getting access to their code, servers and other related info.It took a whole lot of time and patience to sort out their old app and coming up with a plan to redesign it.
Let me share our experience and lessons we learnt.
Every application has a unique set of technologies and packages, just like all zebras have different lines on them; in this case we had Python, Django, and Postgres. Rather than criticizing the previous developers for the selection of technologies or framework, spend your energy in putting yourself in their shoes and consider the challenges they faced. This will explain you why they used these technologies, you might have some bright ideas but maybe at the time of development these ideas did not make sense.
Your new client will be forcing you to give him an estimate of work as soon as possible but you will be in the middle of understanding the old application and everything seems just like rocket science to you. All you need is courage to give an estimate. The best way to understand any application is to start working on it; you will not learn to swim until unless you step into the pool.
One of the most important points to understand any application is to see how the code is written. People now a days are sharp enough to use Code Repositories, and that is the key to breaking down how the application has progressed over time, which of the features was added later on,and what was the reason for it.
Sometime people do use Code Repositories but they rarely commit their code, or they only do it when they have almost completed their work. But this is like a Code Repository used for backing up your code only. In that case, the only option left is walking through the application or using a good debugger and following the flow of the code.
While you are getting things done your client will start getting creative and will bombard you with new modifications. You have to hold them and make them understand the power of Iterative Development or introduce them some Agile Development Methodologies.
Once your application has gone live you will be required to support the ongoing processes. You can be in a different time zone and you might have to stay awake until midnight to support your client. Find a way to do that. Most of the time a support issue is an understanding issue or an infrastructure issue. It is very rare that your application has errors if you have properly tested it for bugs. Do get some Network/Operating System experts in the loop and explain to them what technologies your application is using.
Your overall goal should be to keep your client happy and that can only happen if you listen to your client and understand what his real business problem is, and what they want to achieve out of the software that you are developing for them.