Expectation managment has been covered. As for the technical solution ...

Just start off with a main loop that contains a stub for 'doEverything()' that calls the existing mess. Then figure out how the report is run (sounded like you were saying there's one main report this whole mess does?) and write a stub for 'runReport()' that calls that mess.

Every time I've taken over someone else's project, I've re-written to one extent or another. The first step is always just figuring out what the hell it currently does. The top-down refactor is the best way I've found to wrap my head around this. It has the beneficial side-effect of sometimes -- OK, rarely, but still -- being useful as a framework for the eventual new system.

With over 3,000 files in your project, I don't see how you could do anything else without first figuring out what does what. Actually, you might be able to outomate this inspection somewhat. Try creating a Perl script to grep through the existing files, catalogue all the classes and functions, and map out what calls what. Knowing that 'foo()' calls 'bar()' and that 'bar()' is only called by 'foo()' goes a long way to getting things organized.

Me.cents --
Me.cents --