https://medium.com/@sinyinzachimwemwe/drying-out-your-code-best-practices-for-writing-maintainable-code-47742abc87e4