# The Principle of Interfaces

Posted 2 years ago | Originally written on 21 Jul 2022

Interfaces are predicated on the following idea: the number of items that may be interacted with to effect some effect is a tiny fraction of the number and manner of ways in which that effect may be produced. Interfaces serve as a way to drastically reduce complexity thereby hiding the how from the user so that she may focus only on the what. I've previously mentioned that multiplicity admits combinatorial complexity and the underlying functionality allows layers of discrete spaces leading to wildly explosive growth in a system's state. The interface is the control panel from which the power to effect this complexity may be wielded.

A great example of what a good interface would look like is to think of bicycle gears. Typically, a bike with gears will have controls for each gear set - one for those at the pedals and one for those at the rear tyre. A bike with three pedal gears and seven rear gears would thereforehave a combined set of 21 possible gear ratios (3 times 7). But here's the question that reveals what a poor interface bike gears provide: in what order should I shift gears? I'm sure cycling enthusiasts would know a right sequence by which to shift gears but for the ordinary cyclists like me this is non-trivial and I just end up haphazardly shifting depending on how I feel never really knowing how to deterministically cause the intended effect. In reality, some ratios are quite similar meaning that within our set of 21 possible gear ratios there will be pairs of similar ratios even if subtly. This means that our interface (the two levers I would operate on the handlebars) has null redundancy - extra functions with little or no added value. In general, redundancy is good to have if it adds extra functionality (an A380 can fly on only one engine meaning that for the most part the other engine can be considered redundant) but null redundancy is waste.

Wouldn't it be better if there was an intermediate gear shifting system which could avail the subset of non-redundant gear ratios through some meaningful lever? This would make it easier for the lay cyclist to better use the gear system.

This is precisely what a good interface does: it masks out combinatorial complexity in a manner in line with use. The user never has to stray from his point of use to access the functionality but simply invokes the use sensibly. Instead of interacting with the combinarial complexity of the problem state space (the set of all possible ways to use the system) he can deal with it meaningfully.