https://medium.com/@anindyasasriya/rock-your-code-how-to-ooze-with-solid-programming-principles-4a960c06dda0