Software developers are passionate and creative people, which impacts their thinking when writing software code. Depending on the kind of software, developers should use different approaches in order to make final product of a good quality.
In the context of this topic, I identify 2 main kinds of software - framework and application.
Framework is a software that is supposed to be distributed as a component for other development teams, so that it helps them implement better applications.
Application is a software that is supposed to be distributed as a product to limited kind of audience, so that it helps them execute their business-related tasks.
Ironically, I referred to "application" when defining "framework". This might be understood as a fact that the framework would not have any purpose if not applications that are going to use it.
When working on a framework, we should think about different kinds of software developers that we are targeting. Obviously, we are solving only particular tasks, but we are providing numerous different ways to do the same thing. This could be achieved by providing extensibility (expecting abstractions to be injected) or by providing many kinds of overrides for different methods.
So, in short, we need to use our creativity at a maximum. If not, our framework will not be attractive or useful enough.
When working on an application, we are focusing on particular problem domain. Our time is paid by a company that does not need to have a large contingency of never-ending things. We are concentrated on delivering product and functionalities needed by the company or a customer.
While I have not seen somebody thinking of a framework as an application, I have seen the confusion other way around - when developers designed an application as a framework. Here are the consequences when such a situation occurs:
To sum up: when developing an application, limit yourself to the domain you are working on - solve domain-specific problems. Allow framework developers solve everybody else's problems.
Think big, do little. (I can't figure out who is the author, but I like this quote)
Another article about generalities and concretions which apply to frameworks and applications, respectively.
My training courses around software architecture, if you want to master the intricacies of crafting software systems.
The author of the above content is Tengiz Tutisani.
If you agree with the provided thoughts and want to learn more, here are a couple of suggestions: