Formal versus Informal
Different parts of the interface can be specified more or less formally
Formalizing wherever possible is a good idea: research
Keep contracts as simple as possible
Difficult when dealing with recursion and re-entrance
Would like to have a compiler or tool check clients and providers for adherence to contracts