The 20 Questions disaster
The class built guess-a-thing games. Nobody enforced the question limit. Inputs were free-form. Demo day became a live-fire exercise in missing constraints: infinite loops, negative numbers, and one spectacular crash when the professor typed "maybe" instead of "yes".
Takeaway: Spell out constraints. Write tests for upper bounds. Validate vocabulary. If your user can type it, your code should expect it.
- Budget 30% of build time for destructive testing.
- List every assumption a user could break.
- Let automation hammer those assumptions nightly.