https://medium.com/@sahulkumarparida/16-essential-problem-solving-patterns-every-developer-should-master-2c8e9641dab3