Let’s start with an Einstein quote:
“Do the simplest thing possible, but no simpler.”
I strongly believe that this applies perfectly to the world of computer programming. I often see beginning and intermediate developers try to build a framework to solve a specific problem without knowing exactly what that problem would be 🙂 .
I bet you were in the situation when you started a new project, for example a new “Date Picker” and you said:
“I’m going to write the world’s best date picker! It’s going to be object oriented and modular and I will use that fancy pattern, it will have displayers, controllers and this and that and so on…”
You need to ship your date picker ASAP. You build a whole framework and then spend two days writing a crappy date picker application on top of it. You’ll think that: “In the next version, I am going to do so much more.”
Once you start thinking about how you’ll proceed with the implementation, how you’ll build your code based on your abstract design, it turns out that your design is garbage. And now you’ve painted yourself into a corner, and you have to throw the whole thing out.
I’m a strong believer in being minimalistic. Unless you actually are going to solve the general problem, don’t try and put in place a framework for solving a specific one, because you don’t know what that framework should look like.