The Software Factory Principle

Computer History Vignettes

By Bob Bemer

This piece documents the origins of the software factory concept, and in some ways laments that most of the world has never made good use of it.

The major historian of the software factory is Michael A. Cusumano of M.I.T. From [1], which is a must reading for the seriously interested, are extracted:

My copy of this paper came from Don McNamara of Corporate Information Technology at GE, with a cover note saying “Congratulations! Your vision has made a permanent impact on our profession.” I cherish it.

Software News of 1987 March, page 38, in an article entitled “‘Factories’ for Software?”, reported McNamara's talk in the distinguished lecturer series at the Wang Institute. “Design code for re-use, and register it. Re-use is a secret to productivity”, he said.

The following is verbatim from the Report of the NATO Software Engineering Conference on 1968 Oct 07-11, pp. 94-95 (Reference [6]):

“The most ambitious plans for a set of tools to aid in the production of large systems that were presented at the conference were those contained in a working paper by Bemer.

Bemer: (from ‘Machine-controlled production environment’)

Tools for Technical Control of Production

1. Goals

  1. Maximizing programmer effectiveness and personnel resources.
  2. Minimizing time and costs for original production, changes and checkout.
  3. Maintaining the best-conditioned system from a quality viewpoint.
2. Attainment

By utilizing the machine-controlled production environment, or software factory. Program construction, checkout and usage are done entirely within this environment using the tools it contains. Ideally it should be impossible to produce programs exterior to this environment. This environment should reside on the computing system intended for use, or in the case of manufacture of a new system, on the most powerful previous system available.

3. Functions Provided

a. Service

  1. Computing power and environment
  2. A file system
  3. Compilation
  4. Building test systems
  5. Building final systems and distribution
  6. Information during the process
  1. Diagnostic aids
  2. Source language program convertors
  3. File convertors
b. Control

  1. Access by programmer
  2. Code volume
  3. Documentation matching to program
  4. Software and hardware configurations, and matching
  5. Customizing
  6. Replication and distribution
  7. Quality control
  8. Instrumentation
  9. Labor distribution
  10. Scheduling and costing

In comments following this text, Ascher Opler said “IBM is also developing such a system. The cost is enormous, and a vast amount of hardware is needed”. (Note that, in the following NATO Conference of 1969, a paper was given on IBM's “CLEAR-CASTER” system).

Doug McIlroy, the original exponent of software piece parts [8], said that “It would be immoral for programmers to automate everybody but themselves. The equivalent to what Bemer is discussing is done by all big manufacturers to assist the process of hardware design. However, in addition to the storage of information provided voluntarily by the programmers, one should take advantage in such a system of the chance to accumulate additional information without bothering the programmer”.

As I copy this last comment a third of a century later, it is painful to know that the software industry has still failed to achieve what McIlroy foresaw so clearly. Nothing will illustrate this more than the last paragraph of his paper, properly inserted here because there is no component more important to the software factory than interchangeable and reusable piece parts.

“I would like to see components become a dignified branch of software engineering. I would like to see standard catalogues of routines, classified by precision, robustness, time-space performance, size limits, and binding times of parameters. I would like to apply routines in the catalogue to any one of a large class of often quite different machines, without too much pain. I do not insist that I be able to compile a particular routine directly, but I do insist that the transliteration be essentially direct. expressed in machine independent terms. I want to have confidence in the quality of the routines. I want the different types of routine in the catalog that are different in purpose to be engineered uniformly, so that two similar routines should be available with similar options, and two options of the same routine should be interchangeable in situations indifferent to that option.

What I have just asked for is simply industrialism, with programming terms substituted for some of the more mechanically oriented terms appropriate to mass production. I think there are considerable areas of software ready, if not overdue, for this approach.”

Also in the 1968 Report, but too long to copy here, is Reference [7], created in August of 1966. In pages, it provides 8% of the technical content. It is a very explicit elaboration of the nature of a software factory, following on the original concept I presented at IFIP 65 and 68. [2,5]


Note: Numbers in square brackets are the serial numbers in the master list of my publications.

  1. M.F.Cusumano, “The software factory: a historical interpretation”, IEEE Software Magazine, 1989 March, 23-30.
  2. [36] R.W.Bemer, “Software systems customized by computer”,
    Proc. IFIP Congress 1965, Vol. II, 356, 1965 May 24-29
  3. [37] R.W.Bemer, “Economics of programming production”, in
    Economics of Automatic Data Processing, A.B.Frielink, Ed.,
    North Holland Publ. Co., Amsterdam, 1965, 155-166
  4. [39] R.W.Bemer, “Aspects Economiques de la Production de Software”, in
    Mecanographie et Informatique, 1966 May
  5. [50] R.W.Bemer, “The economics of program production”,
    Proc. IFIP Congress 68, Booklet I, 13-14
  6. [51] R.W.Bemer, “Machine-controlled production environment”,
    Report NATO Conf, on Stwe. Engg., Garmisch, 94-95, 1968 Oct 7-11
  7. [52] R.W.Bemer, “Checklist for planning software system production”,
    Report NATO Conf. on Stwe. Engg., Garmisch, 165-180, 1968 Oct 7-11
  8. M.D. McIlroy, “Mass produced software components”,
    Report NATO Conf. on Stwe. Engg., Garmisch, 138-152, 1968 Oct 7-11
  9. [57] R.W.Bemer, “Manageable software engineering”, in
    Software Engineering 1, Proc. COINS III, Academic Press,
    New York, London, 1970, 121-138
  10. [63] R.W.Bemer, “Manageable software engineering”, in
    State of the Art Report 1, The Fourth Generation,
    InfoTech Intl. Ltd., Maidenhead, Berks., England, 445-465, 1971 Jun
  11. [66]R.W.Bemer, “A software engineer's workshop: tools and techniques", in
    State of the Art Report 11, Software Engineering,
    InfoTech Intl. Ltd., Maidenhead, Berks., England, 273-286, 1972
  12. [83] R.W.Bemer, “Toward the complete software factory”,
    Proc. Honeywell Software Productivity Symp., 651-658, 1977 Apr 26-28
Back to Home Page