Skip to content

N-Version Programming

Independently designed software versions perform one required function, and a cross-version decision uses their comparable results to tolerate some design faults.

Core Idea

N-version programming uses at least two separately designed programs to perform one required function. They receive corresponding inputs, produce comparable results, and a specified decision mechanism compares those results. A wrong result from one version may be detected or masked, but that depends on the other versions and the decision rule. Independent development does not guarantee independent Failure.[ref-b16b2a6e880f][ref-04f2e4d4732a]

Scope of Application

The method applies where a software function can be implemented more than once and checked at agreed decision points. Avizienis describes an airport scheduling/reservation experiment with eighteen delivered versions and transaction-end checks. Knight and Leveson studied twenty-seven independently written versions of a simulated radar-decision program. Neither case is evidence that these experimental programs controlled a real airport or interceptor.[ref-b16b2a6e880f][ref-04f2e4d4732a]

Clarity

Three claims must stay separate: copies of one program provide replication; separately written versions provide design diversity; a measured low rate of joint error would support a reliability estimate. Only the second is built into the N-version method. Two disagreeing versions can detect a problem without identifying the correct one, and a majority can still be wrong if errors coincide.[ref-b16b2a6e880f][ref-04f2e4d4732a]

Manages Complexity

The pattern reduces a complicated software design to a few essential questions: What common function is required? Who independently designed the versions? How are inputs and outputs aligned? What does the decision mechanism do on disagreement? What shared faults remain possible? Version count alone answers none of the last questions.[^ref-b16b2a6e880f]

Abstract Reasoning

Check that versions implement the same function, were designed separately, receive comparable inputs, and send corresponding outputs to a declared decision rule. Then analyze when an erroneous version can be overruled—and when correlated erroneous outputs or a defective voter can defeat the scheme. Knight and Leveson found more coincident failures than an independence model predicted for their particular experimental task, not for every possible N-version application.[ref-b16b2a6e880f][ref-04f2e4d4732a]

Knowledge Transfer

The same software pattern can be recognized in database transactions and simulated decision functions, although their input types, checkpoints and error consequences differ. The broader idea of deliberately redundant, diverse means belongs to live Redundancy Engineering, the proposed strict parent, and to the more portable Redundancy and Diversification primes. Calling ordinary duplicated hardware “N-version programming” is only analogy unless independently designed software versions and their comparison rule are actually present.[ref-b16b2a6e880f][ref-04f2e4d4732a]

[^ref-b16b2a6e880f]: Algirdas Avizienis, “The N-Version Approach to Fault-Tolerant Software”, IEEE Transactions on Software Engineering 11(12) (1985), 1491–1501, especially §§II–IV. [^ref-04f2e4d4732a]: John C. Knight and Nancy G. Leveson, “An Experimental Evaluation of the Assumption of Independence in Multi-Version Programming”, original author paper / University of Virginia Technical Report TR-85-11 (1985), abstract and §§1–2, 8; journal version in IEEE Transactions on Software Engineering SE-12(1) (1986), 96–109.

Relationships to Other Abstractions

Local relationship map for N-Version ProgrammingParents appear above the current abstraction, mutual partners to the right, and children below. Node labels state whether each abstraction is prime or domain-specific; colors identify relation types.N-Version ProgrammingDOMAINDomain-specific abstraction: Redundancy (engineering) — is a kind ofRedundancy(engineering)DOMAIN

Current abstraction N-Version Programming Domain-specific

Parents (1) — more general patterns this builds on

  • N-Version Programming is a kind of Redundancy (engineering) Domain-specific

    Independently designed software versions intentionally duplicate a required function so selected failures need not defeat it.

Hierarchy paths (12) — routes to 8 parentless roots

Neighborhood in Abstraction Space

N-Version Programming sits in a sparse region of the domain-specific corpus (69th percentile for distinctiveness): few abstractions share its structure, so a faithful description tends to retrieve it precisely.

Family — Software & Systems Architecture (29 abstractions)

Nearest neighbors

Computed from structural-signature embeddings · 2026-10-08