In feature-oriented software development, feature-oriented software development program cubes (FOSD program cubes) are n-dimensional arrays of functions (program transformations) that represent n-dimensional product lines. A program is a composition of features: a base program is augmented with increments in program functionality, called features, to produce a complex program. A software product line (SPL) is a family of related programs. A typical product line has F0 as a base program, and F1..Fn as features that could be added to F0. Different compositions of features yield different programs. Let + denote the feature composition operation. A program P in SPL might have the following expression: P = F8 + F4 + F2 + F1 + F0 That is, P extends program F0 with features F1, F2, F4, and F8 in this order. We can recast P in terms of a projection and contraction of a 1-dimensional array. Let Fi = [F0 .. Fn] denote the array of features used by a product line. A projection of Fi eliminates unneeded features, yielding a shorter array (call it) Gi. A contraction of Gi sums each Gi in a specific order, to yield a scalar expression. The expression for P becomes: P = Fi where the index values accomplish projection and summation is array contraction. This idea generalizes to n-dimensional arrays that model multi-dimensional product lines. Multi-dimensional product lines A multi-dimensional product line is described by multiple interacting sets of features. As an elementary 2D example, it is easy to create a product line of calculators, where variants offer different sets of operations. Another variation might offer different presentation front ends to calculators, one with no GUI, another with a Java GUI, a third with a web GUI. These variations interact: each GUI representation references a specific calculator operation, so each GUI feature cannot be designed independently of its calculator feature. Such a design leads to a matrix: columns represent increments in calculator functionality, and rows represent different presentation front-ends. Such a matrix M is shown to the right: columns allow one to pair basic calculator functionality (base) with optional logarithmic/exponentiation (lx) and trigonometric (td) features. Rows allow one to pair core functionality with no front-end (core), with optional GUI (gui) and web-based (web) front-ends. An element Mij implements the interaction of column feature i and row feature j. For example, the element labeled cb is a base program that implements the core functionality of