These might not actually be the top 3, but I know they are going to be pretty close for most people:
- The Call Stack
- The Transaction
- The Layers Pattern
The first two are interesting in that they imply a specific paradigm of programming (whether good or bad), which is easy to implement and easy to think about, but ultimately, makes for a very poor choice in certain situations (yes, I’m being vague to stay out of a rabbit trail).
The 3rd I’ll pick on because without using the Layers pattern, most developers would be completely and utterly lost. In fact, this one is so in-grained, that many developers don’t even realize it’s a pattern. So much for being pattern averse. Can you actually make an informed choice when you know of only one option?