https://medium.com/@nisula.rap/introduction-to-software-engineering-a-comprehensive-guide-44356ae05ef7