Should we repair our legacy system or rebuild it?
Repair when the system does the right things and is merely hard to work on, because a rewrite throws away years of accumulated correctness for a cosmetic gain. Rebuild when the underlying model is wrong for how the business now works, when the platform is out of support and cannot be secured, or when nobody can safely change it. Difficulty is a repair problem. Being wrong about the domain is a rebuild problem.
Can you take over a codebase written by someone else?
Often, and we will look before answering. We spend a short paid period reading the code, running it, and finding out what it actually does before we commit to a position — a system that looks alarming from the outside is sometimes perfectly sound underneath. What we will not do is recommend a rewrite by reflex, because it is the most expensive advice in this industry and the easiest to give.
What if there's no documentation and nobody who built it is left?
That is the normal case rather than the exception. The system itself is the documentation: we read the code, watch it run against real work, and interview the people who use it daily, because they know the exceptions the original developer encoded. What comes out of that is a written description of current behaviour, which is worth having even if you then decide to change nothing.
Do we have to switch over all at once?
No, and you should not. Big-bang replacements are how these projects fail — everything changes on one weekend, and any problem is a crisis. The alternative is to move one workflow at a time behind the existing interface, so the old and new systems run together and each step is small enough to reverse. It takes longer on paper and finishes more often.