Embedded systems are computing devices that are radically different from normal desktop computers in terms of the specific requirements of the application for which they are used. Characteristics such as reactivity, robustness, power, size and cost issues force certain design constraints which are otherwise obviated or trivial. Traditional computer design methodologies do not fully address essential design issues critical to system requirements. Certain issues peculiar to embedded systems have been identified and a few possible guidelines to resolve those issues have been proposed. Issues pertaining to testing and maintenance have been discussed for embedded systems with diverse applications. During the product life cycle optimization of development cost, production cost and performance are important. This can be achieved through careful and proper use of software engineering methodologies.