After the initial completion and introduction of any project comes the normal mode part of the software lifecycle. Even thought the goal of any software solution is to provide as little maintenance as possible, it is inevitable that you'll have to maintain, adjust or even extend a projects to the current needs. Depending on the setup and structure of your project you can prepare and plan ahead for those upcoming changes and amended needs. Of course you'll not be able to predict the future and know everything that eventually will come up further on. But with an intelligent implementation and setup you can put your self in a position where you make it easy to amend the projects to such changes. It is our responsibility and also part of the daily business to take care and prepare for those situations.
By reverse engineering I primarily understands the analysis of an existing situation or system such as workflows, processes or environments and systems with given circumstances. You first analyse the situation and collect the empirical parameters. From there on you are free to decide what effort you want to put in the actual reverse engineering process. This is what we all do every day - learning from another ones experience and results. And maybe we can even improve the situation.