https://betterprogramming.pub/100-essential-systems-design-concepts-that-every-developer-must-know-part-2-b6c4c6239af8