B.Y.O.D.
In the last few posts I've established that to effectively navigate digital spaces in the course of software development we need to move through a field of truth, or a digital multiverse. To move quickly and achieve productivity we require the ability to piece together information from disparate sources, perhaps across multiple parallel tracks, and maybe even look backward through the passage of time. At times we need to do all three simultaneously.
For large mobile software projects it gets more complicated. Many people have an understanding that the mobile space is dominated by two software platforms, iOS and Android. These platforms aim to provide a cohesive experience that feels familiar no matter what device you're on, which makes it all too easy to forget that in reality, every model is a unique physical product, with its own production processes, machinery, and supply chain.
Several times now I have mentioned how the concept of handshake agreements - shared protocols that connect divisions of labour and technological boundaries. These shared protocols exist at every scale, from the very largest of primitives e.g. an entire app that runs on an operating system, to the smallest of primitives, electrical signals and the computer circuits that process them into instructions.
A contemporary mobile app might be expected to support all device models from the last 5 years. Perhaps more, perhaps less, depending on who you ask. In a 5 year period, there are going to be at least 5 major operating system updates, with many more versions that are in principle less consequential. It is less straightforward to quantify how many new physical devices enter the market each year. With the 16 series, Apple introduced the 16, the 16 Plus, the 16 Pro and the 16 Pro Max. Samsung has multiple product lines under the Galaxy umbrella alone, each of which may have multiple new products each year. So there are probably at least many dozens, if not many hundreds, of new phones each year. That's before we talk about smartwatches, tablets, televisions, desktop computers, laptops or anything else that one might expect contemporary software to run on.
Over a 5 year period we end up with thousands of possible devices that could be running our software applications.
Are they all running the same operating system? No.
So we take these thousands of devices, and then we take the dozens of software updates (with a concession that not all devices allow users to freely install an operating system of their choosing) and where we land is that there are probably hundreds of thousands of permutations of 'a device' that is generally assumed to be a uniform foundation for our software to run on. From this most people might be able to see that there is a lot of potential for broken handshake agreements, and in the real world, that is exactly what happens, and a lot of work goes into preventing the general public from ever seeing this.
The supply chain and the division of labour exist for a practical reason - it has traditionally not been possible (for many reasons, but importantly economic ones) to both build the kinds of modern experiences that people expect today as well as maintain ownership of the entire value chain. The same economic forces are a force against testing any particular unit of software against the entire field of truth. Software generally isn't tested against every possible device, with every possible version and every possible form factor, and even if it were, because of necessary delegations of responsibility in the supply chain, it would not be practically possible to resolve all identified issues. As a consequence, device-level issues can be a hard-stop for the relationship between mobile software projects and their customers.
We still haven't quite concluded our coverage of the field of truths. There's at least one more topic I'd like to cover, and it's going to take us right back into the model of software as manufacturing.
Until next time.