All too often I hear developers and architects say "We need to consider solutions for our specific problems" without ever considering existing solutions. They then go on to create a unique sub par solution for a common problem. Unless you are working with bleeding edge technology then more than likely most of the problems you come across have been solved already. In fact most of the problems you will have with software are so common that they will be solved off the bat if you just stick to a set software development processes, industry best practices, design principles, and common design patterns. After all; these principles, patterns and practices stemmed from common problems.

I have interviewed many developers and have seen some resent having to know existing solutions. They believe that their job should consist of solving problems on the fly and coming up with new and exciting solutions. I think this attitude comes from the reason why they became a software developer in the first place. One of the most attractive reasons to get into software development is the problem solving aspect of it. Developers may feel like if they learn and implement design patterns and principles that they do not get to solve problems. The GOOD NEWS is that there is an immense amount problem solving skill required around the domain and figuring out which solutions to use and how to implement the range of solutions to your project. Developers should spend their time solving real problems and not reinventing the wheel.

Learn the current theory before you start solving problems

When interviewing senior developers I insist on a certain degree of knowledge and understanding around software design and architecture. Without a solid understanding of the fundamentals I can not trust them to guide the team correctly. Here are some examples of topics I expcet from a senior developer:

Check out these links for more info:

My design and architecture repo