It is often hard to discern what is right in software, and occasionally this problem can be due to implicit coupling.
Consider this: you have a piece of software. It is build on an server. The server handles a lot of the dirty work for you, while performing optimizations and the like to make its own job easier.
The server is completely unaware of how you use its functions in your software. It just does what you tell it to, in the way that it does them according to the contract it provided you with. Ideally, your software should work the same way. Server and software existing independently of the specifics of the other, that's what decoupling is all about. The Right Way to develop software is to decouple operations as much as possible, thus to increase their flexibility and reusability.
However, you have discovered a way to manipulated the server's optimizations to your favor -- you've tricked it into giving you functionality for "free," and begun relying on it. You use your software in a certain way -- possibly even a bizarre way -- and received a benefit without having to do any hard engineering.
Now, you're asked to control the optimization, due to some side effects that occur in certain circumstances. And you're asked to (try at least) do so without tying yourself into the server, or leaving the scope of your own software.
But here's the problem. You may not have made any calls to the server, but you're already coupled to it by relying on its internal functionality to work in a certain way. And the price for doing your optimizations thusly is that you can't manage these applications at the same level. Your software, without calling out of its scope, has been relying on functionality in that other scope. And for your software to have a say in how that
In short: you are either going to have to reinvent the wheel -- recreate your desired functionality at a higher, more software-specific scope -- or you will have to interface with the axle.
Sometimes, I choose to grab that axle. And no, I don't feel good about it.
Posted by das at August 4, 2005 03:20 PM