https://medium.com/@marv-ike/designing-better-software-a-guide-to-best-practices-and-principles-0ccb69852dc3