https://levelup.gitconnected.com/100-essential-systems-design-concepts-that-every-developer-must-know-part-4-41-50-8bfa8c3292c