I don’t know nothin’… but I have a lot of data. Software development is the sort of field where it feels like there should be answers — where we should know things to be true or false. After all, 2 + 2 is 4, always. And so much of computer programming boils down to really concrete results that we can treat as true or false.
But the reality is that it’s not so concrete. There have been bugs in CPU math implementations, and floating point is an approximation anyway. And that’s just the processor! The rest of our computing stack has made similar compromises.
I don’t think this is a bad thing — it’s essentially impossible to build any useful system without some leaky abstractions. This is just something to be aware of, because it affects everything that we build.
“Standards” and Uncertainty
Even though there are “standards” for HTML, CSS, and the rest of the relevant acronyms, the way things actually display for users is not guaranteed for all time for any given website. Instead of expecting a web page to look perfect for everyone, we check caniuse.com to see if the features we want to use will work where we want them to work.
If a website or an app is supposed to work on mobile devices, we do what we can to program to APIs and standards. And then, we test it on a pile of actual devices that AO’s tester, Phil, maintains.
This is always a compromise: we’d love everything to work perfectly everywhere, but that’s not how it goes. Instead, we try to find the constraints that matter. That might be, “If we go back to browser version X, then that covers 99% of our users according to our analytics.” Or, “99% of our users are using screen sizes in X range.”
Now, these are just examples, and we’ll always want to consider factors like accessibility and who is getting excluded. But regardless of where we set the targets, we can’t know 100% for sure that anything we build will work perfectly for everybody. We gather all the data we can and draw conclusions from that.
It is undoubtedly frustrating to deal with uncertainty, realizing there’s no real way to be confident something works.
Living in an Analog World
You may have felt this yourself if you’ve been learning software development. You should know that this is normal. While our tools are theoretically reliable, predictable, and consistent, our world is not. Don’t feel like you’re missing some piece of the picture: the picture is as chaotic as it feels.
And that’s fantastic. If the world were so simple that we could test everything exhaustively, everything would be much more reliable, and it would also be much more rudimentary. I’m excited that the things we build are ambitious, even if they operate in a world of uncertainty.