1. Is this a “Good Idea”? Feature creep – kill it.
2. DRY. Don’t Repeat Yourself
3. Orthogonal? how independent is this?
4. Testable? Testing is important. Manual testing is good. Automatic testing is much better.
5. Is there another way? “Nothing is more dangerous than an idea if it’s the only one you have.”
6. Costs of changing this later
7. What if I didn’t have this problem? See if you can change the problem.
8. Challenge assumptions – especially your own.
9. Document rationale
(Full Story: Software Architecture cheat sheet)