Springboards and You

I’ve been thinking a lot about the state of user autonomy in modern computing lately, and have come to a pretty stark realization about a design pattern present, if not focal, to almost every popular operating system today. I don’t know if Apple were the first to invent this but they’re certainly the first to come to mind when I think about it, so for the purposes of this post I’ll be referring this pattern as the Springboard, and explain why I don’t like them.

For those of you wondering what my grudge against gymnastics is, springboards are a UI element that lays out a collection of widgets, for the purpose of showing little bits of information and, principally, launching applications. In the case of mobile operating systems, namely iOS and Android, they are the default view and typically the first thing you see upon unlocking the device they’re running on. On desktops, they are less prominent, and are usually restricted to simply launching applications, in the case of Launchpad on macOS and the App Grid of GNOME Shell. Due to this distinction, my argument more strongly applies to mobile OSes, but don’t believe that desktop environments aren’t also culpable.

An iPhone X displaying the Home Screen of iOS 14, featuring an arrangement of apps and widgets.

Springboard on iOS 14.

Now, why am I making such a fuss over such a handy little feature? Put simply, springboards are detrimental to user autonomy. They present a colorful arrangement of little tiles representing bundles of utility with no regard for the user’s intentions. The first step in accomplishing a task using a springboard is to wade through a pile of every app and widget that you don’t need before finding the app or widget that you do. Instead of empowering you to accomplish whatever task you’ve set out on, it presents a literal smörgåsbord of distractions, a tiny jab reminding you of its existence every time you see it, which could be hundreds of times over the course of a single week.

While it’s true that springboards are often user-customizable, in that you can organize and arrange widgets as you see fit, the result is static. It doesn’t actively seek to accommodate your needs in the moment. Take this in contrast to, say, a search-based launcher, like Spotlight on macOS or (shameless plug) Synapse. Upon activating it, you’re presented with a blank slate. Nothing, not even suggestions, appears until you start typing, after which results relavant to the inquiry begin to populate the drop-down. This is a model of information retrieval that respects users. It is additive, rather than subtractive.

The Pantheon Desktop Environment, featuring an unobtrusive search application, Synapse.

Synapse on a Pantheon desktop environment.

In defense of springboards, they can serve a purpose. Sometimes we’re searching for something, but we don’t have the words to describe it. Rather, we’ll know it when we see it. This is a perfect use case for springboards; lay everything out and examine each item one by one until we’ve found what we’re looking for. This is an exceptional problem, though, for which only exceptional solutions should be applied to.


Directed Acyclic (Social Network) Graphs

I (begrudgingly) still have an Instagram account. You’d never know that unless you’re on Instagram, though. I (happily) have a personal website (in fact, if you’re reading this, you’re probably on it right now)! You would know that if you were to view my Instagram account. This is not an accident. As you may or may not be aware, both Instagram and this website exist as part of the world wide web, a collection of documents and resources connected by hyperlinks (or just links, as we refer to them in this century as) embedded within them. Links are one-way streets; much like Wikipedia, once you’ve gone down the rabbit hole, there’s no coming back. The only reason you can go back and forth across links in a browser is because it keeps track of the ones you’ve followed and order in which you’ve done so in its history. This information isn’t encoded anywhere in the link itself.

Since the emergence of Google and its PageRank algorithm, links have become the currency of the internet. Over the past two decades, this expression has taken on greater meaning. The proliferation of affiliate links primarily by Amazon meant that site owners could convert the Internet’s currency could be converted into fiat currency, though don’t kid yourself into believing that the anyone benefits anywhere near as much as Amazon does. In the past decade, the rise of social media sites has been propelled in part by leveraging the fundamental property of links that we observed earlier to create walled gardens; platforms that are easy to move to, but hard, if not impossible, to leave from.

While certainly not the only one, Instagram is the poster child of this behavior. Try to share a link on Instagram, to construct a gateway out of their realm, I’ll wait. As of time of writing, there’s only one way that I know of, which is to use the one link field that’s available in your bio. Naturally, any profile or post can be shared easily via a link. It wasn’t always like this, of course. Instagram leverages its position as one of the most popular social media sites on the web to force their users’ hands. “What are you going to do? Not use Instagram?” (That’s probably the answer, in all fairness.)

This brings us to the apex question of, “Why?” Why do platforms seek to cordon off their users? Why should you, as a user, care? Again if you’re reading this site, you’re probably aware that social media sites want your attention so they can serve you ads for which they’re paid handsomely, considering how little concrete evidence there is of the efficacy of online advertising in general. Of course, these sites are desperate to improve their numbers, if even by fractions of percentage points. They have also demonstrated countless times over that they have absolutely no respect for you or your privacy, and it’s much easier to track your every online movement to be analyzed for any shred of information about you to be shared with advertisers from the comfort of their own platform. This is, at best, only to the benefit of the platform owners. At worst (and more realistically), it is to the user’s detriment for a number of reasons.

Principally, this kind of “siloing” of information is antithetical to the very nature of the internet, which is meant for sharing between all who participate in it. Practically, users are primarily on these platforms to consume "content". Of course, many of these platforms can offer more content than any user could ever consume, and more importantly don’t care to consume, so the platform will try to select and present what it believes the user will be most likely “to engage with.” In $CURRENT_YEAR, this is achieved through black boxes colloquially referred to as “algorithms.” The user is unable to know exactly why a given piece of content, an article, a video, etc, was presented to them. In more and more cases, the platforms are unable to explain even to themselves how these algorithms come to a conclusion given a set of parameters. This is dangerous for users, and frankly society to greater extent as well.

Every recommendation system, search engine, and the like suffer from bias, an inclination or opinion. To be clear, that’s not inherently bad. It would be impossible to suggest one thing over another without having some criteria to base that decision upon, and because the notion of “better” is ultimately a subjective one, rather than an objective one, it is a bias. These biases becomes bad when they become hidden from users of such a system, as there’s a very good chance that at least some of the biases are again, at best, indifferent to them, and at worst, actively harmful towards them. Many of the ostensible foundations of society (at least in the parts of the world I’ve lived), such as democracy and free markets, are predicated on its members being informed and rational actors. Paradoxically, we live in a time where the people of these societies have access to more information than ever before, yet the “end of history” has been in the rear-view mirror for most of my life. Clearly at least one of our assumptions is wrong. I’d argue that the idea that people today have the ability to be informed in such a way as to make decisions in their best interests rationally is wrong and that most of us are no better than our counterparts were a century ago. Ironically, the tools with the greatest chance of correcting this problem are currently being used to perpetuate it at a scale never before seen in history.

In conclusion, before sharing a link, one should ask themselves where they’re sending others. Understand that, in principle, wherever you send them, they can’t come back. Are you leading them down a dead end? Or worse, into a walled garden? Or are you sending them off to just another node on the graph, rife with opportunity to explore more links to meaningful and enriching information? I’ve always had links to this site on my other presences on the web, such as social media, and I used to have links back to those social media platforms on this site. Given the direction we’ve been heading in, I think that’s for the best.


Rust2018 and the Great CLI Awakening

From Rust2018 and the Great CLI Awakening by Vitiral:

spoiler: simultaniously[sic] refreshing and painful

Rust is a fantastic language for writing a Command Line Application (CLI). For the ergonomics of hacking, it has one of the best argument parsers ever, has seriously the best serialization library ever and it compiles to almost any target and goes fast when it runs.

I had a very similar experience rewriting tcc in Rust. The first iteration was written in JavaScript, and was essentially just a wrapper around the Node title-case package using oclif. In my defence, it took (no exaggeration) fifteen minutes to make, however running it felt like it took fifteen minutes to complete (slight exaggeration). I’ve been intrigued by Rust since I first heard about it a few years ago, and have been following its development at a distance. I’ve never felt that I had a good excuse to try it though, until I finally got fed up with tcc 1.0’s performance and took the plunge. I recently saw a fantastic list of excellent resources for learning Rust, and can’t wait to find out all of the anti-patterns I stumbled into in the development of tcc's second iteration.