https://bertorobles.medium.com/how-to-become-a-software-engineer-step-by-step-guide-chapter-12-optimizing-performance-and-eafcde0e028a