The N-Version Programming (NVP) appr~ach achieves fault-tolerant software units, called N-version Software (NVS) units, through the development and use of software diversity. To maximize the effectiveness of the NVP approach, the probability of similar errors that coincide at the NVS decision points should be reduced to the lowest possible value. Design diversity is potentially an effective method to get this result. It has been the major concern of this paper to formulate a set of rigorous guidelines, or a design paradigm, for the investigation and implementation of design diversity in building NVS units for practical applications. This effort includes the description of a most recent formulation of the NVP design paradigm, which integrates the knowledge and experience obtained from fault-tolerant system design with software engineering techniques, and the application of this design paradigm to a real-world project for an extensive evaluation. Some limitations of the approach are also presented.