It is critical that a user interface be designed to be upward compatible in the future. Otherwise, a change of implementation (for better efficiency, reliability or security) may necessitate changes to a user interface. Any change to a user interface can potentially lead of a lot of changes to consumer code. The bottom line is that although a provider can make frequent changes to the implementation of a data type, the interface to the data type should only be changed in a backward compatible fashion.
A user interface should be published and well documented. This is because the user interface is the only source of information for a consumer regarding how a data type can be used.