Contrary to formal, pure-OO thinking, I have my doubts as to the benefits of over indulgence in software re-use. I'm all for it where it makes sense, but I've come to the conclusion that there are limits to the effectiveness of the concept, and these limits are lower, and more easily breached than many people believe.
In the late 70's and early 80's, the car industry was just beginning to explore the possibilities of cost savings that could result from component re-use across product lines at both the national and international level.
And so, briefly, there was a period where the steering column switch assemblies (lights, indicators, ignition etc.) were common between whole ranges of vehicles. Eventually, one manufacturer -- from memory it was GM, but don't quote me on that -- came up with an experimental design where this practice had been taken to its ultimate conclusion. The vehicle was a four door saloon. The front left-side door was interchangeable with the rear, right-side door, as were the front, right-side and rear, left-side doors. The same was true for the diametrically opposed pairs of door handles, indicator/ sidelight assemblies, hub/ disc-brake assemblies, MacPhearson strut assemblies. Front and rear number plates panels and lights, bumpers (fenders), bonnet and boot-lids (hood and trunk), even the front and rear screens.
Now, if your imaginations are active, you may well have a picture of a car that looks like you took the front halves of two identical vehicles and welded them together. with the result being a weird looking car that you couldn't tell whether it was coming or going. This wasn't the case. Although the front and rear screens were the same, they were mounted onto the body at different angles, the front being more steeply rakes than the rear which instantly gave the 'moving forward' stance that we are used to. The same design clues were used to differentiate between the front and rear engine/ luggage covers. The bumpers were mounted a slight different heights. And so on. The differentiation was further enhanced by such cosmetic things as putting a decorative 'grill' on the front, and a spoiler on the rear. The wheel arches had an asymmetric shape, which meant that seen in side-profile, the front and rear arches were different. They enhanced this by mounting small, dark coloured plastic inserts under the rear arches which made them look smaller. The application of a sill-skirt between the arches completed the asymmetric differentiation between front and rear.
The rear doors for example, opened from the rear as on normal cars, rather than the front. Of course this mean that to maintain the commonality between them, each door had to have mounting points on both edges. It also meant that the position of the door handles had to change between the FLS door and RRS door. This required duplicated cut outs, mounting spigots and blind nuts. Making these duplications/ alternations work required a little more effort to get right, but it wasn't too hard to do.
This increased the cost (and weight) of the individual assemblies, but this was more than compensated by the amortization of the somewhat more than half, of development costs across double the number of units as compared to somewhat less than double the development costs spread across half as many units that would have resulted from using four distinct assemblies rather than two.
As a design exercise, the experimental car was a tremendous success. Universally acclaimed at Motor Shows around the world and winning many prestigious awards for Innovation, Design and The Way of the Future, which in many ways is was. Look across the ranges of any large motor manufacturer and you will find many common subassemblies. Right up to a modern example of the Skoda Octavia, Seat Toledo, Audi A3 and even the TT, having a huge commonality with the VW Golf, but real-world experience has shown that there is a limit to the amount of commonality that can be abstracted to a common base.
The problem comes with the administration and arbitration of the disparate goals and requirements of the all the different end uses to which a sub-component or assembly may be put. The problems are fairly obvious with large, 'final assembly' sub components --like the doors above. It's fairly obvious that re-using the same doors for a low-slung sports coupé like the Audi TT and the hatchbacks listed is a problem.
It may not be so obvious that re-using the same doors across those hatchbacks, and even within a single model range is also problematic. Not many people realise that the front doors on many 3-door hatchbacks and their 5-door counterparts are frequently very different. In the 5-door variant, the function of the door is to give a single person access to a single seat that is directly adjacent to it, with the additional requirement that the two doors on each side of the vehicle fit into the space allotted to them. However, in the 3-door variants, the door has the additional purpose of allowing entry to the rear seat when the front seat has been tipped forward to give access. The absence of the rear door mean that the front doors can be longer, easing the access to the rear seat, but this has the deleterious effect that the front doors on the 3-door version will no longer fit the space allocated for them on the 5-door variety.
So, re-using large sub-assemblies on the diametrically opposed corners of the vehicle is rarely done in production vehicles, but the problems do not stop there. Even with smaller sub-assemblies, there are unique aspects and requirements for the function of the parts. Another example are the stub-axle/ suspension assemblies. Whilst the both support a wheel, front wheels have to steer, whilst rear wheels don't. One set of wheels (generally) has to accept drive shafts from the universal gear assembly, the other does not. The suspension set ups for the set of wheels at the "engine end" of the car have to cope with a different set of loads and strains to that at the other end. Whilst it is perfectly feasible to design a common assembly that is configurable to meet both sets of requirements, and this can be cheaper than designing to separate assemblies, the compromises involved in this can lead to weaknesses in the "fitness for purposes" of the assembly for either.
These can include, additional weight, additional complexity, more difficult assembly, maintenance and configuration. It can, if done badly, result in strength and effectiveness of the units in there final configurations, where the range of possible configurations has had to be limited resulting in less optimal performance under minimal loadings at the light-end, and under maximum loads at the heavy end. For your average, run-of-the-mill family saloon, these compromises may rarely show up in normal use, but the will always be occasions where the use exceeds the normal range and the compromise will result in the restricted boundaries being exceeded.
Hopefully, the analogy from the above will be fairly clear. Component re-use is a desirable and cost effective goal for software development, but like most things in life, moderation is warranted. It must be recognised that designing code for re-use incurs costs as well as benefits. To be re-usable, code must be designed not just with the current, pressing application in mind, but also with a view to the future uses to which it might be put. This means that the design and implementation are harder, require more time and effort, and will probably incur the penalties of extra weight and possible, reduced range.
As a component becomes used in more applications, the difficulties involved in maintaining, supporting and upgrading that component multiply with each new end use. Modifying a module to correct a bug or enhance a feature when there are two or three users is hard enough. Once you reach the point of 5 - 10, this begins to be become impossible. Testing takes longer, getting agreements takes longer, reconciling the different needs for change by one user with the needs of stability from another get harder and harder.
Re-using small routines with clearly defined functions, like the nuts and bolts on a car, is useful, productive and cost effective, but as the routine size and complexity increases, so do the problems.
Coming at the problem from the other end, deciding whether to re-use an existing component in a new design requires considerable thought and planning. Often the choices available are multiple, and the requirements, limits and costs that each choice imposes upon your new design will vary, sometimes widely. The bigger the sub-assemblies are, the larger the constraints will likely be, and the harder it becomes to get a 'good fit' between them (the subassemblies themselves) and the overall application into which you are assembling them. Nuts from one manufacturer will generally fit well with a bolt (of the appropriate size) from another, but persuading a door from a hatchback to fit a sports roadster will be considerably harder and is apt to compromise the basic design criteria for the latter.
Re-use comes with a price tag, and not all applications are either conducive to those costs, nor functionally, aesthetically or performance-wise able to bear them.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re-use: moderation please.
by dragonchild (Archbishop) on Oct 13, 2003 at 14:29 UTC | |
|
Re: Re-use: moderation please.
by liz (Monsignor) on Oct 13, 2003 at 14:38 UTC | |
by Abigail-II (Bishop) on Oct 13, 2003 at 15:14 UTC | |
by liz (Monsignor) on Oct 13, 2003 at 15:51 UTC | |
by Abigail-II (Bishop) on Oct 14, 2003 at 09:06 UTC | |
|
Styrofoam and porcelain
by delirium (Chaplain) on Oct 13, 2003 at 16:54 UTC | |
|
Re: Re-use: moderation please.
by johndageek (Hermit) on Oct 13, 2003 at 18:03 UTC | |
|
Re: Re-use: moderation please.
by coreolyn (Parson) on Oct 13, 2003 at 15:37 UTC | |
|
Re: Re-use - freedom and creativity
by pg (Canon) on Oct 13, 2003 at 17:30 UTC | |
|
Re: Re-use: moderation please.
by Nkuvu (Priest) on Oct 13, 2003 at 17:56 UTC | |
by BrowserUk (Patriarch) on Oct 13, 2003 at 18:33 UTC | |
by nimdokk (Vicar) on Oct 14, 2003 at 12:55 UTC | |
by Nkuvu (Priest) on Oct 14, 2003 at 19:03 UTC | |
by oknow (Chaplain) on Oct 14, 2003 at 20:14 UTC | |
|
Re: Re-use: moderation please.
by Anonymous Monk on Oct 13, 2003 at 14:54 UTC | |
by BrowserUk (Patriarch) on Oct 13, 2003 at 15:05 UTC | |
by TVSET (Chaplain) on Oct 13, 2003 at 17:47 UTC |