Analyze software requirements to design an embedded software solution within the given resource constraints.
Consult with hardware engineers and other engineering staff to determine functional requirements, to design software interfaces, and to provide support for hardware verification.