Decoupling Your System
You could google about the definition of decoupling, [GGL] but let's take it from my perspective. Decoupling is a process to make each part more independent. This is a process that modularize your system. As any algorithm in this world, it has many weaknesses. So, let me summarize it for you:
#1 Architecture Overhaul
Architecture overhaul can become tricky if it means of changing a big API. Take Linux kernel as an example, each minor release take major interface change that makes specific driver are not compatible. But then again, this argument can be broken by the way of Linux kernel is developed: monolithic. No wonder it can have so many modules tightly coupled.
Even so, a proper way of making modularity and system planning, can make architecture overhaul is nothing -- yeah, it still costs you something, e.g. money. Pay attention to intermediary services. It is often what ever changing beneath will not so much cost you, but when you change the way of any subpart communication, it will break down the system.
Consider using deprecating method. However, watch out for deprecating that can lead into regression. Whatever that breaks it will stop your system. Often regression is something that you wish to have so that your customer shall upgrade your system. But, that's felt like cheating. Take a look at Sun Microsystem, Microsoft, [BIG VENDOR HERE] and any of their software, they always take compatibility a big issue that it sometimes make the new software crippled.
#2 Web of Modules
Too much interface also can make each of your module become messed up and ended up with chaining each other, breaking the rule and the first objective. Theoritically, this should be impossible. But, with extreme conditions of many big projects and with the not-so-mature-and-strict company policy about documentation leads many modules ended up chained each other so much.
Solution is implied: do documentation strictly, plan your architecture well, and creates some labs. If you have (D)VCS, you would have the main development kept in the trunk, some modifications in branches, and mature releases in tag. There, I just gave you the tips of using (D)VCS.
Ah.. penyakit gw kambuh... :P
To be continued.