https://levelup.gitconnected.com/100-essential-systems-design-concepts-that-every-developer-must-know-part-6-51-60-978801728a4b