Dealing with complexity
Small flexible interfaces
Less emphasis on features, more on quality
Testing
Ask questions about lower layers
Make consumers demand quality and reliability
Make software consistent