We present a building block approach to hardware platform design based on a decade of collective experience in this area, arriving at an architecture in which general-purpose modules that require expertise to de sign and incorporate commonly-used functionality are integrated with application-specific carriers that satisfy the unique sensing, power supply, and mechanical constraints of an application. Of course, modules are widespread, but our focus is far less on the performance of any individual module and far more on an overall architecture that supports the prototype, pilot, and production stages of design, and preserves the artifacts and learnings accumulated along the way.

We present heuristics for partitioning functionality between modules and carriers, and identify guidelines for their interconnection. Our approach advocates exporting a wide electrical interface, eliminating the system bus, and supporting many physical interconnect options for modules and carriers. We evaluate this approach by constructing a family of general-purpose modules and application-specific carriers that achieve a high degree of reuse despite very different application requirements. We show that this approach shortens platform development time-to-result for novice graduate students, making custom platforms broadly accessible.