Make exceptions
coderoom.wordpress.com
coderoom.wordpress.com
At first your code is an unmaintainable cesspool of special cases, then you educate yourself "proper" design and compulsively try to make your code as uniform as possible and you end up with a cesspool of design patterns. After being on both sides a few times, you should have a better idea of what's worth generalizing in a specific domain.
Much of the first half is a barely related ramble that could be argued either way depending on context. For example, Angry Birds is an excellent game comprised of the same code running different data for its many many levels.