Below are some of the tips and tricks that we've picked up in the chaotic, fun two weeks that we had to make Fruit Ninja!
Start ideating and planning early! (Luckily none of us procrastinated.)
Plans can change, and often the design is an iterative process. With time and cost constraints, we found ourselves simplifying the game early on and recreating multiple versions of our state diagram. Simplification of the system takes time.
Integration took more time than we'd expected; no component in the system works in isolation. When making changes to one piece of code, ensure that all other aspects of the code are still working as expected.
Be careful with the electronics and wiring- use wires that are only as long as necessary, and keep your workspace clean to avoid debris (especially metal debris).
We experienced unexpected, intermittent shorts during testing and were unable to figure out exactly why, but we suspect there could be metal debris within the breadboard. Additionally, our wiring is admittedly a bit messy; anything on the breadboard could have been creating metal-to-metal contact while physically moving the breadboards around.
Keeping the circuit itself clean and organized will help with debugging later. Debugging is inevitable, so prepare yourself well for it :)
Code should be cleaned as well- comment out any unnecessary test code before implementing that actual game.
For instance, to test our motors, we wrote code that changed the position of a servo motor in response to a keyboard key press. This code should be commented once it is no longer needed.
Familiarize yourself with open drain/open collector output pins. Pull-up and pull-down resistors are crucial for consistent circuit behavior.