Matt also includes some interesting notes on timing and callback problems:
"Another issue was ensuring that levels and waves were generated cleanly and only once. Because many things in this game depend on timers and animation callbacks there were (and likely still are) a few situations were the game could get a bit confused. One such situation was occuring if a duck was shot just as the wave timer was about to end. The chain of events would cause the (now defunct) nextWave() function to fire twice pushing you forward an extra wave, or level. Occassionally both would happen at once and things would be very hairy. "
Sometimes there's nothing more satisfying than running into subtle problems, solving them efficiently, and shooting ducks as a reward.