I am sure as software developers we know the importance of designing and developing reusable and loosely coupled components. Recently in the XP discussion forum I came across a discussion on the topic of "Building Agile applications using replaceable components". It drew my attention and followed the thread to understand where it was heading. Basically the author challenges the basic assumption behind "loosely coupled components". Instead of giving my version of the details, I would let his article speak about the thoughts.
Here are couple of links from the author(Raju's) webpage explaining loosely coupled, replaceable components.
Also this article challenges the assumption that Java could be used to build loosely coupled, replaceable components.