Does anyone believe in reuse anymore?
I started thinking about it again after the third time I was asked about reuse by a C?O during a briefing, and realised that despite not having got there yet, we are actually getting closer.
For me, reuse began with procedural programming. First with C, then with OO, and now with Web services, reuse proponents have argued that now we're finally going to benefit from software reuse. Procedural brought functional decomposition, but it turned out that the specific decompositions weren't always useful or long-lived. Then OO tried to improve decompositions by tying them to real-world objects that seem to have more longevity than bald software artifacts. Finally, web service protocols create patterns for specific kinds of information transfer and for self-description of interfaces.
While these qualities of decomposition, modeling and standard interfaces/self-description are probably necessary to support effective reuse, I suspect that they aren't sufficient. We're going to have to solve a few more problems.
One is what I call world view. If you and I each break down a problem into some set of domain objects (hopefully benefiting from OO techniques), will we come up with the same decomposition? And if we don't, and I implement part of the solution and you another, how shall we integrate the two? We'll need glue of some form or other, to convert between these different views of reality. We'll have to convert parameters, tweak call semantics ...
A simple example is in purchase orders. If I decompose purchase orders into extended line items (with the line item quantities in the line item, not the PO), and you in non-extended (where the PO refers to a simple product and the PO itself has the count), any integration of our various work must map between
these semantic realities, making reuse incrementally more difficult.
I suggest that effective reuse and integration can only easily occur when the various authors agree on some fundamentals about the problem, like what set of domain objects and methods on those objects would be useful.
There is work happening for some well-known application domains, fostered by associations within those industries. Right now we are seeing agreements on world view being developed for some specific cases of information transfer, including (at least) supply chain, financial instruments, and so forth. Eventually there will be more.
Another requirement of reuse is effective directories. People have been talking about this for some time, but I don't believe we've seen a good enough repository yet. After all, a directory must permit searching on those agreed-upon domain objects we've just mentioned. However, the current directories I've heard about don't do this - they are horizontal directories, designed by software geeks who haven't yet grokked the human issue here. IMO.
But the largest problem, which applies equally to web services specifically and to software reuse in general, seems to me to be a legal one.
Web services proponents describe a world in which consuming organisations look up a supplier of the information or service they want in a directory, tailor a call to the published interface, and extract the result from the described report format. What they don't even attempt to solve is the
problem of the business relationship.
When a consumer wants to do business with a supplier in a business setting, their legal teams do a long dance that involves negotiating contracts, signatures, and so forth. A similar dance will be required for effective reuse that spans organisations, because the reuser (reprogrammer?) will want indemnification from patent infringements and bugs (say) that the component author is responsible for.
So far I've seen no work in this area, to facilitate automated manufacture of business relationships. And without this, I think reuse can only ever be a personal thing.