Designing embedded systems