This document discusses co-designing software and hardware to create great products. It recommends a user-centered iterative design process involving concept testing, paper prototypes, software simulations, simulated hardware, prototyping hardware, and eventually custom hardware. The goals are to preserve progress between prototypes, make user tests authentic, and take small jumps between generations to save time and costs. This approach allows focusing on other priorities like industrial design, apps, user testing, marketing, and business development.