Defining formal, well-formed, consistent, and uniform interfaces between nodes within the network and the interfaces between the components within a node is essential for providing stable products that can evolve over time. For example, the distributed nature of a DIDO means the system must be designed to account for inherent mismatches between versions of software running on each node within the network, especially since it takes time for updates to flow through the system (sometimes referred to as “reboot the world problem”).
Software interfaces are the most sensitive to component changes within the DIDO. The problem is similar to the logging problem, requiring cross platform, cross programming language requirements, and cross version support; not everything can be written in Java, Python, or even PHP.
Some other tools that might be useful in a distributed environment are debuggers, network analyzers, and discovery aids. Furthermore, given that the system supports all kinds of operating environments and multiple implementations, clear, unambiguous definitions of software interfaces are essential.
Formally defined and maintained Application Programming Interfaces (APIs) are necessary for all the DIDO parts to work together seamlessly.