Substrate Ambiguity
A substrate is an entity with which something else interacts or interfaces.
In biology, enzymes often act on a specific substrate. Similarly, in programming, an interface can permit interactions with a specific component.
The “lock and key” model of enzyme-substrate interactions suggests that the active site of an enzyme conforms to the shape of the substrate perfectly.
Substrate promiscuity or ambiguity refers to the ability of an enzyme to interact with multiple substrates.
Many software interfaces have the property of substrate ambiguity, in that they potentially interact with many components, albeit through a specific interface.
Essentially, they have a one-to-many relationship.
With respect to their functional use, many software systems are ambiguous. They can be used in an infinite variety of ways by users.
It has been proposed that a given design [[Philosophy/Concept|concept]] should only be associated with one purpose but in the process of design this ideal may not be met.
Writing unambiguously about software is therefore a challenge.
A tool can be designed for one purpose but fulfill multiple. A tool may also be used in multiple ways to fulfill a single purpose. One is functional ambiguity, the other process ambiguity.
It is a good property of a tool that it works when used the wrong way, and points you to the right way.
A recipe can be marked up and customised, as the cook adapts it to their needs.