I was explaining some of the finer points of OO to a friend who's starting to learn; one point being you often don't begin to realize any benefit from OO until you start to re-use, begin abstract subclassing, or work collaboratively (which are actually different facets of the same process). The reinvention argument begins to fail when you work on a project with more than one engineer. From a single programmer's POV, any farming-out of work begins to look like avoiding reinvention, and it must occur if the project is going to be completed in reasonable time frames.