Product Development typically has a few distinct phases:
- An early effort that is focused on prototyping, initial concept validation, and proof of concept,
- A middle stage where run-time optimizations are made to reduce image size and resource usage,
- And a final stage, where completed code is packaged for deployment.
In this phase, prototype level accessories are attached to the platform and the operating system often includes monitoring and error collection tools. The user-space applications tend to expect a certain sequence of events and range of inputs which limit error checking and management. During this phase, the platform is most often running a fully featured instance of the operating system that provides the required debugging and testing tools.
As the prototype is proven and refined, the hardware moves from breadboards to printed wire assemblies while the user-space application is enhanced with error checking, failure recovery and improved user interfaces. During this phase, the platform software is tuned for performance and size by carefully removing unneeded elements from the recipe.
As a product reaches the design intent, the operating system image is streamlined to only include required libraries and components so as to reduce the size and loading time. Further, the system is configured to load startup applications and configuration files in a sequence that facilitates the desired end-user experience.