https://medium.com/frontend-canteen/things-i-learned-after-refactor-a-shitty-code-project-ab55f99e2c24