Do design patterns increase or decrease the complexity of an Application?

If the person reading the code is aware of design patterns and their concept and is able to identify design patterns in practical use (not just the book examples) then they really do reduce the complexity.

However I've found with a lot of junior developers, which haven't heard much about design patterns or weren't aware of them at all, that they believe their use increases the complexity of the code.

I can understand it: You suddenly have more classes or code to go through to solve what seems to be a simple problem at first. If you're not aware of the benefits of design patterns, hacked solutions always look better.


Design patterns often lead to additional levels of abstraction around a problem, and if not handled correctly then too much abstraction can lead to complexity.

However, since design patterns provide a common vocabulary to communicate ideas they also reduce complexity and increase maintainability.

At the end of the day it's a double-edged sword, but I can't imagine a situation where I'd avoid using a design pattern...


There's an infamous disease known as "Small Boy With A Pattern Syndrome" that usually strikes someone who has recently read the GoF book for the first time and suddenly sees patterns everywhere. That can add complexity and unnecessary abstraction.

Patterns are best added to code as a discovery or refactoring to solve a particular problem, in my opinion.