Reinventing the wheel
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 stem 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, then they do not get to solve problems. The GOOD NEWS is that there is an immense amount of 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.
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 expect from a senior developer:
Dont just learn the pattern, also learn the whys and hows
When I say do not reinvent the wheel I am by no means suggesting cookie cutter solutions, because it is important to know when to use which solution. Developers which try avoid "reinventing the wheel" can easily get caught in the pitfall of "now I have a hammer and everything is a nail". Developers should spend their time solving real problems and not reinventing the wheel.
- When should you build custom software and when should buy off the shelf or use open source?
- When should you use Scrum or waterfall or Kanban or Extreme programming or your own process?
- When should you use which language or technology or pattern?