The first best practice, then, is to have an adaptive enterprise. This means having the tools, processes, management, and resource capability necessary to sense changes in the business or technological landscape such that opportunities or threats are recognized and acted upon. The second best practice is to have an agile network of capabilities. Although we've tried to create repeatable processes and have almost codified best practices, the agile network of capabilities still refers to specific attributes of people. It's politically sensitive to talk about one software engineer who is 8 to 12 times more efficient than another, but it has been observed.
Good people count more than good process.
Alan MacCormack of the Harvard Business School also suggests that experience and ability are the strongest predictors of success in a development effort where the requirements are ill defined until very late in the development approach. McKinsey and Microsoft have both relied more on their ability to attract bright people than on a codified process. The moral to this may well be that if you have good people, defined by their skills, their intelligence, and their commitment to appropriate software engineering practices, you've covered the second best practice. The third best practice is to ensure that your software is adaptable. This means loosely coupled, object-oriented software that allows features to be changed with minimal disruption to the rest of the software.