For the last few years I have focused my full attention on preserving what I believe to be the real promise of objects, namely flexibility. Flexibility is the ability to make unforeseen changes in a timely way. A long series of inventions have addressed flexibility, starting with 'stored program' digital computers, then the subroutine call, and now the polymorphic message send. But flexibility is a property that programs still easily loose. And the loss is due to a failure of design.
The relationship between design and flexibility is of course complex. Here I will only mention two principles, each of which I have found to take more away from flexibility than they give back to design. First, the notion of a program life cycle admits failure from the start. If we are to have a life cycle, let us make it long. One hundred years cannot be beyond reason. Second, analysis as an activity to be conducted independent of implementation [see correspondence] again presumes implementation artifacts to be short lived and of little value. These ideas have become self-fulfilling prophesies. Although they apply in the current circumstance, they have become barriers to change from that circumstance. They impede progress in object-oriented programming.
The cause of flexibility will not be served by merely discrediting life cycle or independent analysis. To make progress we must examine the system of practices that have lead to these principles, discard those practices justified only by habit, construct new practice where human nature alone is insufficient, and then describe the whole with metaphor that implies useful longevity for the programs we make. I have many modest proposals. All fall within this framework.