Why would one think of re-engineering of a product/project in the first place or redoing the same stuff again?
What factors really decide that we need to re-engineer the product or site? They would be something as follows:
- The functionality is not designed as per the requirement
- The designed code is in written in such a way that no up-gradation is possible.
- Do we have the bandwidth and budget to do so?
Now what needs to be considered while redoing the old project?
Do we require to redo the entire project/product again or only a part of would be sufficient?
The product should be re-done in such a way that we can make use of maximum stuff used previously, so that both time and money is saved.
Not to touch the accepted functionality i.e. if the existing functionality or part of it has already being accepted by people/client, redo the things in such a way that the accepted functionality remains same.
Few things that should be treated as priority in this process would be as follows:
- Understanding the current business model
- Understanding the current modules/features
- Study & Analyze existing architecture to check the feasibility to extend
Redoing does not mean that you change the existing functionality completely. Redoing the project may not have become necessary because of the functionality changes, but could be of different causes altogether. I would like to mention one example here and that is the recent project of re-engineering which was accepted by the client. Client was very happy with functionality and had many users live on the system. But he demanded system to be re-designed because the current system was based on open source and the functionality was written in such a way that it was on a single code based on which three different sites were running and also the code was written in core modules.
So when the client needed an up- gradation of open source, he was not able to do so. Also an additional drawback was that if he wanted to add certain functionality to only one site, all 3 sites needed regression testing. Now in this case one can clearly see why the client would need product re-engineering. Each time adding few things causing such a headache any one would go like to go for re-engineering.
So to sum it up in one statement- Our product/project should be designed in such a way that it should not leave any scope for re-engineering at all. And that I would say can be called a truly successful project.