In order to accomplish these goals, we adopted a conservative approach. Before performing any kind of analysis on the whole code, we carefully evaluated the expected costs. To this aim a small but representative sample of modules was preliminarly analyzed and the costs and outcomes were extrapolated so as to obtain some indications on the analysis of the whole system. When the results of the sample modules revealed useful as well as affordable for the entire system, the involved resources were carefully distributed among the different reverse engineering tasks to meet the customer's deadline.
This paper summarizes that experience, discussing how we approached the problem, the way we managed the limited resources available in order to complete the task within the assigned deadlines, and the lessons we learned.