I'm not new at that kind of experience, always in my life I did the challenge of refactoring some old application, and many times I found something frustrating in it. Does not really matter to me, just because I enjoy to do it, but sometimes I really feel pain. Just some point to clarify what generally happen.
- Even if there is no design in the legacy stuff you are trying to port, you will find smart people telling you the design do exists and is just too huge to be understood by a single person.
- Functionsare are hidden: I personally looked at code that do the real job in some nested "catch" block.
- Bug becames rules: as a smart idea you will find some bad design issue to became a rule to follow. Still today I have code that is not able to work with long file names. There is a lot of almost not working code dealing with the 8+3 dos alias to avoid to refactor a "well designed" fixed length binary record.
- Managers does not known about technical details: I still find some difficult to explain what is the real difference between dealing with an Ms Access database and a server based database engine ( doesn't matter which one ).
- Developers cost nothing: Every people is able to desing software. I have some code to show of a self describing senior developer who produced an home made OR/M based on a nested switch case ( first level an enum for the query, second level the DB type ) payed the same as me. I know I could be a little too ambicious, but I felt me crying when I look at that kind of code.
- Success of legacy: In my experience, the project who earn money was almost messy stuff, created by modifying the modifications, without any kind of design, in which a good portion of the function work on a luck based approach.