We propose discovering all the software that must be written for the project in two distinct stages. In the first stage, we focus on figuring out hardware-related software components that must be created. In the second stage, we turn our attention to all system and application software. In the Windows CE world, hardware related software is categorized as a platform. System and application software that is independent of the hardware is classified as platform-independent or public. Mapping our stages to Windows CE terminology, we call our stages Platform Task Discovery and Public Task Discovery.
Platform Task Discovery
Platform discovery involves understanding a hardware feature and figuring out what piece of software is required to make it work. By looking at the high-level hardware components, you will get a good idea about the device drivers that will be required. A few additional components are standard issue. You'll need to quickly focus on the specifics of the Boot loader, and a good set of diagnostics take a long time to refine, so getting started on these first is a good idea.
Public Task Discovery
Public Task Discovery doesn't necessarily depend on Platform Task Discovery. Instead, both can happen in parallel. As you discover tasks, you can decide which basket it goes into. Public tasks are ones that are not platform-dependent. It is important to identify them as such because it will affect how you design and implement the software module that accompanies the task. Platform-independent modules can be used across different platforms or incremental iterations of your platform if your product warrants it.