System Development Principles
|Use hardware that you can actually get.
Choose hardware that is common, available in large quantities, and easily obtained from a variety of sources via in-person retail. Avoid single-source hardware.
|Make assembly easy.
Soldering and custom manufacturing of PCBs should be avoided. 3D printers are OK.
|Use solid software.
Choose software that is open source and well supported whenever possible. Give back with clear bug reports and, when possible, patches.
|Let lots of people try everything, but keep sufficient expertise on important projects.
Diversity in hardware designs is good, but unnecessary software forks should be avoided. More forks means fewer sets of hands and eyes solving problems and more overall time spent on maintenance and overhead.
When complexity is necessary, it should be contained first in open-source software and second in task-specific hardware. If neither of these can be achieved, make a prototype with poor complexity management and improve it later.