Jack Greenfield on Software Factories

Jack Greenfield describes the case for Software Factories (via Martin Fowler):

Total global demand for software is projected to increase by an order of magnitude over the next decade [...]. Without comparable increases in capacity, it seems inevitable that total software development capacity is destined to fall short of total demand by the end of the decade.

So how is this to be achieved? Greenfield looks to the semiconductor industry, which at first makes me suspicious:

We build large abstract concepts like insurance claims and security trades from small, concrete concepts like loops, strings, and integers. We carefully and laboriously arrange millions of tiny interrelated pieces of source code and resources to form massively complex structures. If the semiconductor industry used a similar approach, they would build the massively complex processors that power these applications by hand soldering transistors. Instead, they assemble predefined components called Application Specific Integrated Circuits (ASICs) [...] and then generate the implementations.

We have already done this, Greenfield argues, for instance in the case of DBMSs. And when this happens, it follows a recurring pattern:

  • After developing a number of systems in a given problem domain, we identify a set of reusable abstractions for that domain, and then we document a set of patterns for using those abstractions.

  • We then develop a runtime, such as a framework or server, to codify the abstractions and patterns. This lets us build systems in the domain by instantiating, adapting, configuring, and assembling components defined by the runtime.

  • We then define a language and build tools that support the language, such as editors, compilers, and debuggers, to automate the assembly process. This helps us respond faster to changing requirements, since part of the implementation is generated, and can be easily changed.

So we could do it again, if only we straighten out the differences between the semiconductor industry and the software industry. Greenfield quotes Peter Wegner, who said that in software, the “costs are concentrated in development rather than production,” and the cost of developing reusable components, Greenfield continues, is “generally quite high.” We need “a systematic approach to reuse.”

We also need to straighten out the differences between economies of scale and economies of scope. Economies of scale arise for instance in the production of machine screws, where “multiple identical instances of a single design are produced collectively.” Economies of scope, on the other hand, arise in for instance automobile manufacturing, where “multiple similar but distinct designs and prototypes are produced collectively.” Both economies might arise in software; there are areas where applications are mass produced, and areas where enterprise applications are developed once.

What makes this article interesting is the claim that the discussion of “software ASICs” has naively mistaken development for production, and economies of scale for economies of scope. “It makes no sense,” writes Greenfield, “to look for economies of scale in development of any kind, whether of software or of physical goods. We can, however, expect the industrialization of software to exploit economies of scope.”

The above was posted to my personal weblog on June 20, 2005. My name is Peter Lindberg and I am a thirtysomething software developer and dad living in Stockholm, Sweden. Here, you’ll find posts in English and Swedish about whatever happens to interest me for the moment.


Related posts:

Posted around the same time:

The seven most recent posts:

  1. Tesugen Replaced (October 7)
  2. My Year of MacBook Troubles (May 16)
  3. Tesugen Turns Five (March 21)
  4. Gustaf Nordenskiöld om keramik kontra kläddesign (December 10, 2006)
  5. Se till att ha två buffertar för oförutsedda utgifter (October 30, 2006)
  6. Bra tips för den som vill börja fondspara (October 7, 2006)
  7. Light-Hearted Parenting Tips (September 16, 2006)