You know what seperates an artist from an engineer? Let's say Joe designs something pretty cool. Mary sees it and uses that design. In Engineering, Mary is wise. In Art, Mary is a thief.
For years, in many IT shops, and throughout the computing world, we have built a culture where it is better to write your own definition, your own design, your own snippet of code, than it is to use someone else's. We still reward this thinking.
I work in the area of EA Frameworks. There are quite a few frameworks emerging these days, and most of them are wildly similar. The solution is right in front of us, and with some thinking, we are converging on the answer. Yet, few people have taken the time to learn any of these frameworks (except the oldest and least comprehensive, Zachmann). The number of people who have taken time to study two or more frameworks: geometrically smaller.
In Engineering, this would be foolish, but in Computer "Science" it appears to be simply acceptable for professionals to invent new definitions when existing ones will do, invent new frameworks when existing ones are ample, and invent new services when existing ones meet the stated needs.
We need a broad array of people to take the time first to LEARN what is available, before inventing new things. It is a culture of learning that is missing. We have replaced learning with invention in Computer Science. And as a result, we are a group of artists competing for space to show our artwork, instead of teams of engineers leveraging excellent ideas to build greater and taller and stronger constructions.
The lack of reuse is not a problem that we will solve by installing a SOA product or inventing a framework. Building a culture of engineering requires that we recognize and reward the people who reuse other's ideas and work, and that we remove the obstacles to their success.
You can reuse code TODAY. If your employer paid you to, and you took the time to learn, you could do it again tomorrow.