How do you approach writing software when the requirements are highly ambiguous or the hardware platform is still under development?