Many medical devices are rapidly becoming software intensive. Software controls their operation, collects and analyzes information to help make treatment decisions and provides a way for users to interface with the medical device. In these devices, the software transforms a general-purpose computer into a special-purpose medical device component. As in hardware design, specifying the software requirements, creating a sound software design and correctly implementing it are difficult intellectual challenges. Software has additional challenges. It is nearly impossible to measure software to determine if it meets the first test of quality: that it exists as specified. And software provides a great deal of flexibility to work around hardware or other problems, particularly those discovered late in development. We can only address these challenges with a disciplined, methodical approach to the creation of software, i.e., software engineering.