[comp.std.c++] The cost of incompatibilities

gregk@cbnewsm.att.com (gregory.p.kochanski) (02/08/91)

Here's a quick, ballpark economic-like analysis of when it's worthwhile
to make a language incompatible.

The idea is to calculate a immediate cost (in man-years) to make the change,
and then compare it to a long-term benefit (increased productivity)
by doing a present-value calculation with some reasonable interest rate.

The cost:
We assume a non-trivial change (that can't be mechanically applied easily
with awk or sed or the like) that affects 1% of the lines of existing code.
Assuming 'N' lines of code presently written, and a programmer productivity
of 10 debugged lines per day (comparable to the rate of writing new code),
the cost is 10^-3*N man-days, or 3*10^-6*N man-years.
I believe 'N' is on the order of 10^7-10^8, but it ends up cancelling
out in the end.

The benefit:
Assume that the change increases productivity by a factor of 'P',
where P is probably just a little bigger than 1.
Since C++ is about 5 years old, assume that the total number of lines
is increasing at 1/5, or 20%, per year.  Further assume that an average
chunk of code is re-written or obsolete every 4 (?) years.
Putting those together means that about (0.20+0.25)*N lines are
(re)written every year.  So the change saves (1-1/P)*(0.20+0.25)*N
lines worth of work, or (at 10 lines per day) 1.5*10^-4*(1-1/P)*N
man-years.

Economics:
Having something done now is always better than having it done next year.
Getting $1 now is about as good as getting $1.1 next year (10% interest rate).
Now, getting a product out now can be *lots* more valuable than that,
because next year you may have five competitors.
As a guess, let's use a 25% 'interest rate' to account for this.

So now, we can compare the improvement in productivity with the 'interest'
on the work expended to upgrade.
Productivity: 1.5*10^-4*(1-1/P)*N
Interest on upgrade: 0.25* 3*10^-6*N

So, the change is worthwhile if P>1.01 or so: a 1% productivity improvement.
Now comes the hard part -- estimating the productivity improvement that a
given change makes.  I leave that to the ANSI commmittee.