The Internet of Things (IoT) provides the necessary technologies to support key societal and industrial applications such as smart urban management, precision agriculture, and Industry 4.0. Despite this clear potential, recent analyses show that IoT deployment is proceeding slower than expected due to a lack of systematic design methodologies, inflexible platforms, poor reliability and limited operational lifetime. Over the last several years, my research has produced both foundational and applied contributions in IoT systems. In this presentation, I will present my research methodology which combines self-adaptive software and hardware/software co-design to enable a new generation of IoT platforms. I will also share some firsthand experiences in designing IoT system for real-world industrial applications for both industrial projects and an IoT spin-off company.