"Cognitive dissonance" is a fancy way of saying "I need to remember two (or more) different and contradicting things at the same time to understand this." Keeping those different things in your head creates a cost and it keeps accumulating the more indirect the things are ('cause you'll have to keep all those in your head).
When you're trying to find a solution to your problem, think on the way the data will flow through your code.
At this point, you should at least have hard about how cool functional programming is. There are a lot of concepts here, but at least the very basic ones you should keep in mind.
"The magical number" is a psychology article about the number of things one can keep in their mind at the same time.
"Cargo cult" is a type of cult which appeared in the Melanesia, in which the natives would build their copy of an airplane (no motor, 'cause they didn't have the knowledge to build one -- or even knew what went inside the airplane) in the hopes they would get the same results as a real airplane.
Simple rule: Is the code yours or from your team? Good, go break it. Does it come from outside? DON'T. TOUCH. IT.
Most of the times I saw design patterns being applied, they were applied as a way to find a solution, so you end up twisting a solution -- and, sometimes, the problem it self -- to fit the pattern.
A lot of times I heard "We should use the right tool for the job!" Most of those times it was just a way to push an agenda.
Maybe you're in a project that needs to process some text. Maybe you're tempted to say "Let's use Perl" 'cause you know that Perl is very strong in processing text.
But that may still be not the right tool.
You may be tempted to use a list (or tuple, if your language allows) to keep your data if it's simple -- like, say, only 2 fields. Don't.