https://medium.com/@leelundrigan/study-time-essential-principles-laws-rules-and-patterns-every-software-engineer-should-know-d62df3a3bdf