Design Principles for Embedded Systems