You’ve probably used hundreds, maybe even thousands of different pieces of software in the past year. Every program installed on your computer, every app on your phone, and every self-service checkout you’ve had the pleasure of contending with—we interact with software a lot.
There are also many pieces of software that we depend on without even necessarily realizing it. We trust our bank, for example, to have a well-behaved backend system that isn’t going to unexpectedly transfer the contents of our bank account to someone else, or suddenly decide that we’re in millions of dollars of debt.
Sometimes we encounter pieces of software that are an absolute delight to use; they do exactly what we want, contain very few bugs, and are easy to use. But other times we encounter pieces of software that are absolutely horrible to use. They are full of bugs, crash all the time, and are unintuitive.