Good engineering practice greatly helps reduce the number and severity of bugs while the error handling framework enables graceful recovery. Reducing the possibility of user code making the whole system unstable goes a long way towards achieving robustness. An effective memory management system is needed to prevent memory leaks. For systems that are never completely shut down and cannot be rebooted, keeping an accurate track of resources is what makes the difference between peak performance at all times and slow degradation to partial or total unusability. Applications and system modules that allocate blocks of memory should cater for the possibility that none might be available.
Defensive programming has to be applied from the OS up to the application level.
However, reliability alone is not enough to make good products. Sound consumer design is also necessary. Applications should take advantage of the uniqueness of the WID market. They should be designed both for current usability and for future developments in wireless technology. Consistency of style is paramount.