This paper presents an approach to architecting a product family that shares inter-changeable modules. Rather than a fixed product platform upon which derivative products are created through substitution of add-on modules, the approach here permits the platform itself to be one of several possible options. We first develop function structures for each product. After comparing function structures for common and unique functions, rules are applied to determine possible modules. This process defines possible architectures. Each architecture is represented using a matrix of functions versus products, with shared/unique function levels indicated. This provides a systematic approach to generating architectures.