How not limit your applications by using to the most fundamental principle of programming: interface-based programming? Why writing a core modules without interfaces is bad? Why you should avoid using ArrayList and LinkedList?
Got use to the core OOP like: Single Responsibility Principle and Composition over inheritance. Refresh your memory with Decorator pattern.
"One of the earliest and most fundamental principle one learns while coding is programming by interface. Definition Interface-based programming defines the application as a collection of ..."