Several years back, Steve Woloshen was introduced to a new programming concept called Black Box Black-Boxing. Similar to the Black Box metaphor of programming, where the inner workings ("private" methods) of a class are distinct from the outer workings ("public" methods) and not available to the class consumer, Black Box Black-Boxing takes it one step further and makes the inner workings unavailable to everyone. Steve's experience on a large Unix to Windows to Unix to Windows to Unix batch process is an excellent example of this:
Project Lead: To get the compliance data in the stream, we'll need to have the AIX Stream component output the eligibility indicator as well.
Steve: That's no problem at all; I'd imagine just a few lines of code need to be changed.
Lead: Hmm ... well, the source code for that component is no longer available.
Steve: We'll have to rewrite it. Where are the specs for it?
Lead: Hmm ... well, those are no longer available either, and no one is sure what all it does.
Steve: ... we'll just have to get the indicator after it hits the AIX server
Lead: Hmm ... well, we thought of that, but the AIX can't access the warehouse data
Steve: ...
Steve went back and thought of how possibly he could solve this problem. After some research and experimentation, Steve found a way to rename component classes without recompiling and create a component with the same interface as the original that would simply wrap around original one. It involved a bit of hacking on the server, but it was definitely doable. Steve reported this to the Lead.
Lead: Hmm ... well, you know, this sounds rather familiar. In fact, I'm certain that we did this last year for the Linear Progress project.
Steve: Oh? That'd be much easier, we could just add the code to the wrapper component instead of having to hack up the server.
Lead: Hmm ... well, the source code for the wrapper component is no longer available.
Steve: ...
After their meeting, Steve went back and confirmed that they had, indeed, hacked the AIX Stream component in order to wrap it. And naturally, the specifications of the changes made to the wrapper component were nowhere to be found, either.