1. Give yourself a few months to learn the existing codebase
2. Document the existing codebase
3. Start writing unit test and/or integration test for the existing codebase
4. Adopt a mindset of ZERO tolerance for defects making it to production
5. Begin at the lowest layer of the codebase (usually data access) and execute refactorings there to either encapsulate areas of potential change or business domains
6. Once the data access has been refactored to "good enough" work on the next layer up and continue this process to the top, this should enable you to have an architecture that is closed and decoupled.
Interesting point, I'll add that we don't see many desktop computers any more. Kids or those wanting to learn to program don't see the whole machine. Instead we have these slim downed devices that require existing knowledge to take apart and put back together again.