Write Libraries, Not Frameworks
<i>A framework, usually, must predict ahead of time every kind of thing a user of it might need to do within its walls.</i><p>The one thing not mentioned in the article is that the above line of thinking is almost guaranteed to lead to an insane level of abstraction, which was parodied in this classic article from nearly 15 years ago:<p><a href="http://web.archive.org/web/20141018110445/http://discuss.joelonsoftware.com/?joel.3.219431.12" rel="nofollow">http://web.archive.org/web/20141018110445/http://discuss.joe...</a><p>(Sadly, that site is gone, but the memories live on...)<p>Addendum: to see this in practice, one needs to look no farther than Spring, the famous Java framework:<p><a href="https://docs.spring.io/spring-framework/docs/current/javadoc-api/" rel="nofollow">https://docs.spring.io/spring-framework/docs/current/javadoc...</a><p><a href="https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.html" rel="nofollow">https://docs.spring.io/spring-framework/docs/current/javadoc...</a><p><a href="https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/support/AbstractAnnotationConfigDispatcherServletInitializer.html" rel="nofollow">https://docs.spring.io/spring-framework/docs/current/javadoc...</a>