Engineers working on large, complex project with short deadlines will face many design tradeoffs and decisions. Deciding where to focus time during the design phase is a big challenge. This paper identifies three important design decisions you should make when programming an embedded system, and provides guidance given your application requirements. Taking time to consider each of these three items will put you on the right track to designing a reliable, scalable, and maintainable embedded application.