Todo projeto de software possui necessidades comuns, que resolvemos aplicando alguma tecnologia, tais como: ORMs, Containers de IoC, Frameworks web, etc. Para cada problema comum, existe um leque de tecnologias com abordagens diferentes de resolução, o que nos leva à seguinte questão: Como decidir entre uma tecnologia ou outra?