Good software design is as important in the development of a product as a strong foundation in the construction of an edifice. This is particularly important in the development of an embedded system where resources like memory, power, and processing capabilities are limited. Continuous innovation, fast-changing consumer needs, and the drive to remain ahead of competitors in terms of market share and product profile has drastically reduced the time to market a product and its development life cycle. The cost of defect correction increases with the development lifecycle stage. Post-release defect fixing is the most costly. Thus, it is important to have good software design and a process in place so that stringent deadlines can be met and rework activities minimized.