In this wonderful article, Martin fowler talks about how trying to fit your code around patterns, and forcing them, could do more harm than good. Personally in my experience I've had lots of problems with YAGNI (You aren't going to need it). Even though I profess some of the things related to XP, I try not to marry into anything. There is times where careful design is needed, and you can't do everything as fast as with XP.
One of my major pet peeves is when I create software, and they ask me to draw the UML. The UML often times is illegible, but I could understand how in really complex software you would love a UML in order to make sense of the data.
I think, that as always, *it depends* on the scale and purpose of your system, trying to make absolute asseverations only hurts the software engineering space.
I will make an emphasis on the next points, which are really important.
- A constant desire to keep code as clear and simple as possible
- Refactoring skills so you can confidently make improvements whenever you see the need.
- A good knowledge of patterns: not just the solutions but also appreciating when to use them and how to evolve into them.
- Designing with an eye to future changes, knowing that decisions taken now will have to be changed in the future.
- Knowing how to communicate the design to the people who need to understand it, using code, diagrams and above all: conversation.
I'd like to make an emphasis in <understanding> the patterns and <appreciating> when to use them. Those two things, are the entire reason for taking this class, and it is wonderful. I hope that soon we can see a beautiful array of patterns in the wild.
Fowler, Martin. "Is Design Dead" (2004). Retrieved from https://martinfowler.com/articles/designDead.html