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.