Lots of you have probably faced a situation when a potential client is looking for someone to help them in refining their existing web site. There are certain pros and cons of accepting such a request, and in this article I would like to share thoughts on this topic based on my personal experience.
First of all, I’d like to mention some critical points both parties should keep in mind:
in the beginning, immediate releases are out of the question;
there should be a dedicated person on the client’s side who can respond to your questions as they arise. Trust me, they will :) If you aren’t able to complete a certain piece of code because the other party can’t provide necessary info on demand, the whole process will take ages;
initially, it’s better to explicitly discuss and confirm all changes to be done as they will affect the client’s system;
since the project isn’t yours and you’re not aware of the specifics, it is almost impossible to give exact figures for the budget and timeline, they will most likely be under or overstated. The best way to understand the project is to start handling it, and setting price and time limits on the first day is quite unprofessional;
website maintenance usually costs more (a higher hourly rate) than development from scratch.
What should you as a developer take into account:
collect code metrics from the project to understand the current state of it and identify potential risks. If making changes and writing unrelated code, you may find yourself in a situation when the client blames e.g. slow system functioning on your actions. With the original metrics, you’ll be safe and secured. But of course, clients will not necessarily cause such troubles and not all of them are even aware of their code metrics;
make code review summary. You need to evaluate the code and tell the client about its strong and weak points in advance;
check if the project has unit tests. Without them, it can be hard to ensure that even a tiny change hasn’t broken anything;
last but not least important is to understand the reason why the previous developer has not completed the started work.
Software maintenance is a pretty complex, challenging thing
In most cases, people providing maintenance tend to be new in the job or are not very experienced in development (maintenance is their chance to enter the market). Creative teams would rather start development since maintenance is too constraining for their open minds. So by default, the least qualified and those in least demand often choose maintenance. But it would be a mistake to think that maintenance is the easiest, it may actually be harder than designing a new product.
We’re programmers. Programmers are architects at heart, and the first thing they want to do when getting to the construction site is to clear it and built something new. Why do they always want to throw the old code away and write a new one? They just think that the old code is necessarily a mess. Of course, it’s usually wrong. But the reason for such an opinion lies in the fundamental law of programming:
It’s harder to read code than to write it
That is why code re-usage is so hard. That is why everybody on the development team has a different function they like to use for splitting strings into arrays. They write their own code functions as it’s easier and more fun than figuring out how the old one works.
Nevertheless, there are very important pros:
- not all code is bad by default. Getting familiar with other developers’ work can be a very useful experience;
- providing a good service for the client, you can earn their trust and raise your chances for being awarded future projects;
- no need to deal with formalities like authorization, basic layout, etc. you have to face when starting a new project;
- this is a great opportunity for the client to quickly see your potential;
- it is a challenge for you as a programmer, in a good way;
- such projects often already have users which means your code will not end up in trash. I think everybody wants their code to bring real value.
And how do you feel about editing and maintaining someone else’s products?