Complex systems and products evolve over years to meet new requirements, while applying tried and tested technology. To maximise the reuse of components through the life span, companies need to plan for changes that they can anticipate and cannot anticipate, and facilitate accommodation of such changes in the original architecture and design of the system. However, the degree to which future product changes can be planned depends on the uncertainties that the system, product or product family is subject to. A deeper understanding of these uncertainties is the focus of this paper. The paper first provides a brief literature survey, and discusses the sources and nature of uncertainty. This is followed by a classification of the types of uncertainties that are often encountered and that should be considered, as well as methods and techniques for modelling these uncertainties for incorporation in system design. The paper also provides examples of uncertainties for a variety of systems and products throughout and concludes with an uncertainty checklist for system architects and product designers.