Program Families
Program families is a design methodology, introduced by David Parnas, in which software is conceived not as individual programs but as sets of related programs that share a common architecture while varying in specific features. Rather than building each program independently, the designer identifies which decisions are common to all family members (and hides them in shared modules) and which decisions vary (and exposes them as parameters). This transforms software development from a series of one-off constructions into a systematic process of software product lines generation, where new variants are assembled rather than rebuilt.
The economic logic of program families is combinatorial: in a non-family architecture, adding a variant costs proportionally to the system size; in a family architecture, adding a variant costs proportionally to the number of new decisions. This is why operating systems, web frameworks, and automotive platforms can support millions of distinct configurations without collapsing under their own complexity.
Program families are the application of modularity to time. A modular system decomposes space; a program family decomposes the future.