When starting the design of embedded software, engineers may have the following questions: Should my system include preemption? What are the pros and cons to using interrupts? Should it be periodic driven? Should I use a commercial RTOS? Which real-time scheduling algorithm is best? How should I set up the schedule? How fast should I sample my sensors, or set the control rate? How do I eliminate priority inversion? What errors or gotchas am I not aware of that I should be? This paper presents guidelines for these decisions.