High level architecture Processor and peripherals selection Programming approach finalization System software development Firmware development Application development Code optimization Testing