Although the Palm IIIx has about the same computational power, and about four times as much memory, as the first Apple Mac, it is considered a "constrained" device. In comparison to the vast resources of the average desktop computer, the Palm device is an example of a constrained device because its resources are far less than the devices we may normally target with our desktop applications. The standard approaches to software design may not apply for Palm device applications.
Although this chapter focusses on Palm devices, the considerations are relevant to any constrained device. PocketPC devices are less constrained than typical Palm devices in terms of memory, but many of the design considerations for small devices still apply.
As desktop computers have become more and more powerful, software is doing far more work than before. The resources of the hardware on which these applications run is practically unlimited. This power has enabled more elegant software designs, which allow applications to be maintained more easily and to support change as requirements change. Such change may mean changing large parts of the application. Software design techniques have developed ways to isolate change in an application. Isolated change means that other parts of the application are not affected; this, in turn, means that components supporting existing functionality do not need to be touched. This helps the application's design support change in a more predictable and orderly fashion, often despite the unpredictable nature of future changes.
In a portable device, however, these design principles may not always suit the more constrained environment. On a portable device, the design priorities change. Limited resources must be allocated to features to gain their maximum effect. Speed of execution, use of memory, and screen space become more important than an elegant design that may be pure from an object-oriented perspective and allows changes to be isolated.
This chapter discusses the software design issues that arise when the target is a constrained device. These issues are related to the amount of CPU power in the device, the size of the screen, and the amount of memory available.