https://medium.com/@thetechnicalwriter02/5-things-that-i-learned-before-designing-a-software-system-1ac1aa73e31d