Writing quality software requires strong command over programming language, development tools and understanding of the overall system. For embedded software, it could become trickier because of memory constraints, real time multitasking environment, hardware limitations, etc. Most of the embedded software issues could be eliminated by adopting good programming practice, carefully choosing the right OS, making use of some profiling tools, getting familiar with verification/validation results of hardware components and having an understanding of storage classes. This paper discusses various sources of design issues in Embedded software and provides recommendations to solve them at early stage.