I’m a fan of well-designed software. I believe that software architecture and the code itself can be beautiful just like user interface.
Even though I am fascinated with design patterns and OOP, I’m aware of threats of overarchitecturing. Few years ago I had a chance to maintain quite a big project with truly complicated, flexible architecture. At first sight I was really excited to see tons of design patterns and dozens of layers. However, after deeper look at the code I realized that some programmers hadn’t understood or care about architecture and had made cross-layer calls or hardcoded some configuration. Finally, in spite of flexible architecture (which increased complexity and cost) the project wasn’t flexible at all. This confirmed me that even the most complex design can’t guarantee flexibility and that simple, easy to understand designs tend to be better than complicated one.
I’m allergic to code duplication. It is quite common to hear something like “Lets copy this code for now and we will create reusable class later”. The point is that after tests are passed everyone forget about copied code until it comes to bugfixes or functional changes. It is a nightmare to update all copies of the given code fragment, especially if some of them was already modified. I think that it is almost always worth to invest some time in creating reusable component to prevent wasting time on fixing numerous bugs. I also believe that avoiding code duplication promotes cohesion which is definitely good for any software.
Well, I could write more about favoring convention over configuration or clearly defining the purpose of software but this is “about me” page not book about software engineering so I will simply summarize that I do care about software architecture.
If I want to hire you to build a simple widget are you available?
I feel exactly the same about reuse. Hate it when I see code is just copy&pasted. Usually, it’s due to time constraints. Sometimes, developers just don’t get the chance to do things right the first time.