SYCL 2023: Love, Abstraction and The Tipping Point
Last week in Vancouver, Software You Can Love 2023 brought together programmers from across the world working on software applications ranging from national defence systems to power plants to decentralized media ownership. There was even a dev who works on robots that make cakes.
While the talks were prepared in isolation by each speaker, certain themes seemed to be woven through the two days of content as if by design. This disparate group of software developers share many common experiences in the practice of software development in 2023.
It didn't take long to realize that there was a consensus among attendees that the industry is not building software we can love. Almost every talk included a jab at some well known failure of software at which the audience would chuckle knowingly.
Loris Cro, the creator of SYCL, criticized the recent trend of software that doesn't take "no" for an answer. For example, a Firefox popup asks "Do you want to enable notifications?". The only buttons are "Yes" and "Not Now". Where is the "no" button!
This user hostile pattern is obviously not software we can love. Why does this happen? I'm guessing the pitch was something like this: "Our analytics show that users who have notifications enabled are 50% more likely to convert to paid accounts in their first 30 days. Based on this we are setting a Q1 OKR to increase notification activations by 25%."
This is the ugly side of data-driven decision making, a practice that has been much lauded in the product management space. It encourages us to suspend our own personal ideas of how software should work in favour of chasing metrics. Loris's manifesto for SYCL is an antidote for this thinking. It begins "For some of us, creating software is an intimate act. We care deeply about the experience that results from our work, just like a painter or a musician takes pride in their art." We should trust our own opinions and not always shy away from product decisions that are based on little more than pure emotion.
Mentions of abstraction appeared in almost every talk at SYCL 2023. In Dominik Tornow's "The Linear Developer Experience", he described abstractions as magic. Dominik showed how the database transaction context manager in Django allows the developer to behave as though errors do not exist. When an exception is thrown, partial mutations of the database are magically rolled back. Of course this abstraction begins to fall apart when multiple databases are in play and atomic operations are not actually possible. Abstractions can be magic, but they can also be dangerous. Dominik left the audience with this heuristic: "an abstraction that doesn't affect the way you think is not worth knowing."
Jonathan Marler's "How to Use Abstractions to Kill Your API" was a success story in which he replaced
libX11 with his own homegrown library that directly implements the X11 API. It turned out to be a fairly reasonable endeavour which netted him cross platform compilation, slimmer builds and better error handling. Though
libX11 is a very widely used library perhaps it fails Dominik's test for abstractions and can safely be discarded.
Abner Coimbre demoed his project Terminal Click which is an exploration of what a better terminal might look like. What isn't immediately obvious is that under the hood, he is rethinking the fundamental architecture of a terminal. He explained the history of how physical terminals for computer mainframes were replaced with terminal emulators. These emulators were built on top of abstractions that represent the physical terminal and the physical cable (pipe). The terminal had no direct access to the host system, it merely piped input to the shell, which was responsible for invoking binaries. In Terminal Click, Abner has unlocked some extremely compelling features by making the terminal a first class program that directly invokes binaries, doing away with the pipe and the shell and making the terminal far more than a mere emulator of a display screen.
Terminal Click is a fascinating exploration of what might be possible if we tear down long standing layers of abstractions and consider a problem from the ground up. Another example of this that was mentioned is the company Tiger Beetle, which is attempting the herculean feat of building a database from scratch. Tiger Beetle is throwing out everything that's taken for granted in databases and taking a completely new approach. Based on the number of times Tiger Beetle came up in the SYCL 2023 talks, the audience is very excited to watch what happens.
The Tipping Point
The talk that I enjoyed the most was Dominik Tornow's. It had a unique format involving three discrete sections: Inspire, Enchant and Delight and he did a masterful job weaving between concrete programming concepts and philosophical ideas. He declared proudly that it was the first time he had brought emotion into a tech talk.
As he began the final section, he warned that "Delight" can be a double edged sword. There is a delightful period at the beginning of a software project's life where the complexity is minimal, the tools are flexible and progress is quick. Unfortunately, the software project eventually reaches what he calls "the tipping point". Some new issue arises and in the process of solving it, the experience of developing the project is forever altered for the worse. Work becomes gruelling. Simple changes become complicated to make. Discussions about development are no longer about building a great product for the user, but about architecting microservices, managing distributed state and reconciling a litany of other technical complexities.
In Dominik's example, the tipping point was the decision of a theoretical company to shard data across two databases. From that point on, every component in the project would need to consider which database to use and how to make formerly atomic transactions durable in the new multi-database environment.
We saw the impact of tipping points in some of the other presentations. Martin Wickham delivered an excellent technical deep dive into a seemingly intractable problem in the Zig compiler that emerges at the intersection of two well meaning features: Result Location Semantics and Parameter Reference Optimization. It was a lesson on the subtle ways in which disparate features can interact to create emergent complexity. Often the complexity of adding a new feature to a product is a function of the complexity of features that the product already has.
Earlier in the day, Loris had given another example of software refusing to take "no" for an answer: a dialog that asks "Do you want to update to Windows 11?". The available answers were "Yes" and "Schedule Later". This elicited a big laugh from the audience.
I was reminded of a Twitter thread where someone was frustrated that an old iPad was effectively useless because Apple had sunset support for it. It is sad that a once valuable device became worthless due to its software ceasing to function. When Windows 95 came out, we never would have expected that computers with Windows 3.1 would unilaterally cease to work at some point thereafter.
Windows 3.1 and its software ecosystem didn't connect to servers to provide functionality though. Microsoft could sunset support for Windows 3.1 without actually rendering it useless. In today's world of cloud software, ending support can mean shutting down servers or modifying APIs. This often does kill legacy software in the hands of the user through no fault of their own. Can we expect companies to keep cloud services compatible with legacy versions in perpetuity though? If iOS apps had to maintain compatibility for every iOS device in history that would be an immense tipping point that would make developing for iOS a miserable endeavour.
Perhaps we can avoid tipping points by making difficult tradeoffs that are painful for certain parties to bear. Apple can sunset support for legacy devices. Windows can compel users to upgrade to Windows 11. What would it have cost Dominik's company to refuse to move to a multi database architecture?
I left SYCL 2023 inspired by all the work I saw. It is amazing to see devs doing work out of pure passion and love for the craft of software development. I remain convinced that we are in the dark ages of the practice of software development and many secrets remain to be unlocked before we have our renaissance.
If you enjoyed this post, please follow me on Twitter to catch the next one or subscribe via email or RSS feed.