Technology does not exist in a vacuum. It exists in a complex milieu of customers, budgets, competitors, organizational goals, product features, time to market, and so on. In this world, there are no context-free notions of "good" and "bad" (and anyone who proclaims one technique or method as universally bad or another as universally good is hopelessly technocentric). So to make good decisions we need a context, which is defined by looking at the business objectives and using them to help define what "good"means (and what "bad" means). With the context properly defined, it is possible to evaluate technology trade-offs in a manner that always keeps the business objectives in mind. This message is in stark contrast to what technologists typically preach. For example, technologists typically promote one design method (or inheritance model or programming language) over another using a universal notion of "good" and "bad" they have an answer even though they don't know what the question is; one size fits all. It's as if they are saying, "I know what's good for you even though I don't understand your world." This does not imply that different technologies don't have different trade-offs they do. But the trade-offs can be evaluated only by looking at the business objectives and requirements. This leads to the following high-level process.
And always make the less important decisions (such as various design techniques and ultimately the programming techniques) in light of the more important decisions (such as what the system is supposed to do and, even more important, why it is being built in the first place). |