Characteristics
An application programming interface is a form of ICD for a software system, in that it describes how to access the functions and services provided by a system via an interface. If a system producer wants others to be able to use the system, an ICD (or equivalent) is a worthwhile investment.
An ICD should only describe the interface itself, and not the characteristics of the systems which use it to connect. The function and logic of those systems should be described in their own design documents if required. In this way, independent teams can develop the connecting systems which use the interface specified, without regard to how other systems will react to data and signals which are sent over the interface. For example, the ICD must include information about the size, format, and what is measured by the data, but not any ultimate meaning of the data in its intended use by any user.
An adequately defined ICD will allow one team to test its implementation of the interface by simulating the opposing side with a simple communications simulator. Not knowing the business logic of the system on the far side of an interface makes it more likely that one will develop a system that does not break when the other system changes its business rules and logic. (Provision for limits or sanity checking should be pointedly avoided in an ICD.) Thus, good modularity and abstraction leading to easy maintenance and extensibility are achieved.
Read more about this topic: Interface Control Document