Inversion theory and product design

By Wesley on

This week, I released Degap. Degap gives you a way to share small snippets of text between your devices.

https://degap.app/

I wanted Degap to be a nice app. So I got to work designing a bad app.

Inversion theory

Charlie Munger was a meteorologist in World War II. His work was intended to keep pilots safe. He later popularized his approach as inversion theory.

I said: suppose I want to kill a lot of pilots. What would be the easy way to do it? And I soon concluded that the only easy way to do it was to get the planes into icing conditions they couldn’t handle or to get the pilot into a place where he’d run out of fuel before he could safely land.

So I made up my mind I was going to stay miles away from killing pilots by either icing or getting them sucked into conditions where they couldn’t land… I just reversed the problem.

— Charlie Munger, via https://mannhowie.com/inversion

If you can list the obvious ways to fail, you can systematically eliminate them. Charlie found two easy ways to kill pilots, and then he worked around them.

To eliminate the obvious ways an app could be bad, I listed the requirements I’d need to fulfill to build a bad app. Many apps I use fulfill one or more of them, and I expect you’ll find some of these familiar to you too.

Requirements of a bad app

Slow

A bad app makes you wait. A bad Degap is slow to install, slow to load, slow to refresh, and makes you wait on every tap. A really bad Degap is so slow that its own timeouts break the app entirely.

  • Many apps today show a full-screen spinner or a blank screen while they load the data to populate that screen.
  • Many of the same apps block data you’ve previously downloaded.
  • An app that needs to load so much data that it takes 31 seconds to load will never succeed at loading that data if it’s configured to time out after 30 seconds.

Anybody can wait, and we all do in everyday life. The problem is when this waiting happens in the middle of a task. People are surprisingly sensitive to interruptions.

The basic advice regarding response times has been about the same for [over fifty] years:

0.1 second is about the limit for having the user feel that the system is reacting instantaneously.

1.0 second is about the limit for the user’ flow of thought to stay uninterrupted.

10 seconds is about the limit for keeping the user ’s attention focused on the dialogue. For longer delays, users will want to perform other tasks while waiting for the computer to finish.

— Usability Engineering, Jakob Nielsen, https://www.nngroup.com/articles/response-times-3-important-limits/; see original for citations

When the wait is long enough, users don’t leave by choice. At some point, for some users, the app is just broken.

When I was at Google, someone told me a story about a time that “they” completed a big optimization push only to find that measured page load times increased. When they dug into the data, they found that the reason load times had increased was that they got a lot more traffic from Africa after doing the optimizations. The team’s product went from being unusable for people with slow connections to usable, which caused so many users with slow connections to start using the product that load times actually increased.

— Dan Luu, https://danluu.com/web-bloat/

Avoiding the requirement: Degap caches your clips locally on device, so they usually load before you see a spinner. SQLite queries finish in under 10ms: far less than the 0.1s threshold for seeming instant. Network requests exceed 1s on mediocre cellular coverage, interrupting the user’s flow.

Staying miles away: If you get a push notification about a clip, the clip data is sent as part of the notification payload and is added to your device cache immediately.

Absent

A bad app isn’t available where you need it. A bad Degap is unavailable on a platform where you work with text.

  • Universal Clipboard only works in the Apple ecosystem. Android, Windows, and Linux are left out.
  • Many great apps let you share files easily across platforms. (I really like LocalSend and Taildrop.) However, these apps don’t start helping you out until you dump your clipboard into a file.

Availability is the first part of meeting users where they are, or human-centred design. If an app that’s specifically meant to work across platforms is missing somewhere where you need it, any other design failure is secondary.

The solution is human-centered design (HCD), an approach
that puts human needs, capabilities, and behavior first, then designs to accommodate those needs, capabilities, and ways of behaving.

— Don Norman, The Design of Everyday Things

Avoiding the requirement: Degap is available on Android, iOS, on the web. It’s there wherever you work on text.

Staying miles away: Technical users spend a lot of time on the command line. Degap is available as a CLI tool.

Solipsistic

A bad app prioritizes internal consistency at the cost of working with the tools that users expect. A bad Degap is more concerned with looking and working the same on each platform than making it usable on any specific platform.

  • Cross-platform apps are often specified or built to be the same on each platform whether or not the metaphors and interactions fit well with the platform.
  • Cross-platform mobile frameworks tend to sacrifice visual or functional consistency.
  • Cross-platform mobile frameworks sometimes make it more difficult to integrate with platform features. Other times, it makes it difficult for a developer to work around the framework to deal with platform features directly.
  • Apps that only implement features when they can work identically on each supported platform will only ever support the lowest common denominator of these platforms.

Being a poor citizen of the platform doesn’t just mean being an eyesore. Fitting with users’ expectations mean that they can spend their time in your app in System 1 thinking. Rather than conceptualizing this as 5% worse, it might be better to think of it as having your users switch what track their brain is on.

System 1 operates automatically and quickly, with little or no effort and no sense of voluntary control.

System 2 allocates attention to the effortful mental activities that demand it, including complex computations. The operations of System 2 are often associated with the subjective experience of agency, choice, and concentration.

— Thinking Fast and Slow, Daniel Kahneman

In UI design, forcing a user into System 2 thinking tends to be unwelcome and not nice. If I only use an app on iOS, the app wins no points with me for working the same there as on Android.

The point is that every question mark adds to our cognitive workload, distracting our attention from the task at hand. The distractions may be slight but they add up, especially if it’s something we do all the time like deciding what to click on.

And as a rule, people don’t like to puzzle over how to do things. They enjoy puzzles in their place—when they want to be entertained or diverted or challenged—but not when they’re trying to find out what time their dry cleaner closes. The fact that the people who built the site didn’t care enough to make things obvious—and easy—can erode our confidence in the site and the organization behind it.

— Don’t Make Me Think, Steve Krug

Avoiding the requirement: Degap works the way you expect on each platform. Get notifications when a new clip arrives. Send clips using the Android Sharesheet, the iOS Action Extension, by pasting on the web, or by piping into standard input.

Staying miles away: Degap takes advantage of the unique features on each platform. Degap uses a notification content extension on iOS and notification actions on Android to let you copy the content of the notification without ever launching the main Degap app.

Possessive

A bad app makes ending the user relationship difficult. A bad Degap refuses to let go of the user’s account or the user’s data.

  • Closing an account usually works against a developer’s target metrics. A user who doesn’t sign in today could sign in tomorrow; a user who deletes their account today probably won’t create a whole new account tomorrow. This gives the developer an incentive to keep the user from closing their account.
  • A user who doesn’t have access to their account anymore often doesn’t have access to clear their user data either. The app hangs on to that information, possibly forever.
  • An app that clings to the user relationship needs to collect more information than otherwise necessary to build fallback authentication methods for account recovery.

If locking a user out means they don’t even have access to delete their data, account recovery needs to be both reliable and safe. That tends to be complex to implement and involves a lot of difficult tradeoffs.

A deactivated account allows Facebook to keep your data. It is still valuable to advertisers and other third parties.

As a result, Facebook encourages account deactivation as opposed to full deletion of your data.

If your intention is to permanently delete your account, do not be fooled into deactivation instead.

— Delete Facebook, Edward Cant, https://deletefacebook.com/deactivate/

There are many strong misalignments between a developer and users that lead to compromises like account deactivation. Most of these compromises ultimately don’t help the user end the relationship.

Avoiding the requirement: Degap accounts can be closed from any client app. When an account is closed, Degap clears all of the user’s data.

Staying miles away: All Degap accounts expire, and that expiration is under the user’s control. The expiration is a dead man’s switch: if a user loses access to their account, they know their data will self-destruct.

Intrusive

A bad app puts the user under surveillance on hardware that the user owns. There are many valid reasons to have client-side tracking and telemetry, but a bad Degap prioritizes the developer’s optionality without weighing the tradeoff.

  • Users don’t like being watched, and they don’t like being watched in secret. Client-side tracking tends to be an unpleasant surprise to the user whenever users find out about it.
  • Cross-app tracking breaks the mental model of apps being logically separate sandboxes.

Treating observability as pure upside leads to weird conclusions.

Many major companies, like Air Canada, Hollister and Expedia, are recording every tap and swipe you make on their iPhone apps. In most cases you won’t even realize it. And they don’t need to ask for permission.

But for the fact that the app developers don’t publicize it just goes to show how creepy even they know it is.

— Zack Whittaker, TechCrunch, “Many popular iPhone apps secretly record your screen without asking”, https://techcrunch.com/2019/02/06/iphone-session-replay-screenshots/

Third-party tracking, on the other hand, is widely rejected by users when they have a choice.

Apple’s App Tracking Transparency (ATT)… allows Apple iOS users to opt out of data sharing across their apps (third-party data sharing) by prompting users to either allow or disallow data sharing. The vast majority (80–85%) of users opted out when prompted…

— Guy Aridor et al., Evaluating the Impact of Privacy Regulation on E-Commerce Firms — https://www.anderson.ucla.edu/sites/default/files/document/2025-05/att_privacy.pdf; see citations in original

When users notice that tracking is happening, they don’t like it. As a result, giving users visibility into this data is rare. Without that visibility, developers and users become aggressively misaligned.

Avoiding the requirement: Degap doesn’t participate in tracking networks and uses no third-party cookies. Degap doesn’t have ads and so doesn’t need to use your device’s advertising ID.

Staying miles away: Degap doesn’t include client-side tracking at all, including for analytics. This is a much easier policy to convey to users, and it keeps misalignment to a minimum. If you’re a user and want to provide information about how you use Degap, please write to me.

Extractive

A bad app treats the user as a resource to be mined. Degap is a bad app when it tries to extract a disproportionate return from the user or their data.

  • Paying money isn’t fun.
  • Paying money is a poor substitute for alignment. You can pay a developer, but you don’t pay to control the developer.
  • Payments aren’t simple. There’s a lot of complexity in the program and on the part of the user to make sure it’s right. There’s a lot of complexity in recovering when something goes wrong.
  • A user choosing to use an app chooses to spend their attention on the app. Advertisements divide the user’s attention so that some amount of it can be paid to the advertisement.
  • A user thinks of their data as private. After all, that’s why authentication and user accounts exist: to keep private data private. Selling a user’s data is a violation of this mental model.

Most people in our capitalist society today don’t have the option to spend time and money making something to give away without any expectation of return. For those who do, the difference is profound.

Offering something for a price of zero to the user is psychologically different from asking for anything in return. It also gives the user the room to evaluate the app on its merits free of any obligation to continue using it into the future.

[P]eople appear to act as if zero pricing of a good not only decreases its cost but also adds to its benefits.

Thus, the zero price effect might be attributed… to the uncertainty surrounding the overall benefit associated with costly options and the contrasting certainty about overall benefits associated with free options.

— Zero as a special price: The true value of free products, Kristina Shampan’er and Dan Ariely

Avoiding the requirement: Degap is free to use. It costs me money to run Degap, but my dollars pay for the focus of users’ attention and the privacy of their data.

Staying miles away: Degap doesn’t have a Patreon or a tip jar, and it isn’t shareware. The stack is built on inexpensive services so I can operate it sustainably without needing donations.

The result

Degap stays miles away from my requirements for a bad app. Inversion theory says that this should make Degap a nice app. (Good craftsmanship from a decade of software engineering experience should help too.)

I’d love to know whether you agree. If Degap solves a problem you have, I hope you’ll give it a try.

https://degap.app/

Wesley / [email protected]