Understanding the trade-offs that we face is a vital, fundamental aspect of engineering decision-making. If we make our system more secure, it will be more difficult to use; if we make it more distributed, we will spend more time integrating the information that it gathers. If we add more people to speed up development, we will increase the communication overhead, coupling, and complexity, all of which will slow us down.

— David Farley, Modern Software Engineering