https://medium.com/javarevisited/best-practices-for-writing-clean-and-maintainable-code-in-java-e5f92b859348