In my last diatribe on this subject, I tried to convince you (and myself) that application modularity leads directly to a bunch of ‘dark patterns’ that plague our experience of computers today, and (as well as turning potential allies into enemies) is hugely wasteful of human effort.
It’s also created a situation where I get a different user interface to play a movie, depending on whether I get it from Netflix or Amazon or Disney. I think this is dumb and we should change it.
So what might an alternative world look like? Grab your coffee, gentle reader, rev up your imagination and come with me on a little trip to … Featureland. I’ll try to convince you (and myself) that this might be a better world to live in - if we can build it.
choices
Here’s the world we live in today: a bunch of applications competing for your money, to help you do … something. You, the user, can choose which app to use, but you can’t choose what features each app contains.
And here’s what a feature-modular equivalent would look like: instead of apps, you chose between features.
So instead of everyone having to choose either one or the other app, everyone can choose their own particular mix of features :
So here are some things that would be normal, in this rather unfamiliar world.
you’re not the boss of me now
First, nobody can force you to run a feature you don’t like:
This is a total contrast to the app-modular world, where if you dislike a feature enough, you have to just not use the app, which isn’t always an option. For example, instagram: I have the luxury of being able to delete it from my phone, but plenty of people I know depend on it for their livelihoods. Ideally, none of us would have to delete instagram - I’d just disable the feed feature.
Complete transparency and control over what features you have running would also let you refuse features that, say, spy on you and sell your data to advertisers, or in fact piss you off in any way at all. In fact, I’m going to go out on a limb here and propose that this simple capability is the only thing that will allow us to build systems that you and I can actually trust.
Second, nobody can force you to update a feature you do like:
You like Pig? Run Pig. Run it forever. Even if the whole rest of the world switched to Owl and Turkey two years ago, you can just keep hanging out with Pig, and nobody can do a damn thing about it. This might sound like a heretical opinion, but if something’s working for you, why fix it? If other people want to use Owl and Turkey, they can just modify them to be able to talk to your Pig.
Third, you can curate your own feature clusters for any activity:
So for our watching TV example, you could use the New York Times reviews for movie recommendations, Netflix’s interface for playback and scene thumbnails (my favourite), and IMDB for actor information : all bundled into a feature cluster that you use when you watch TV. But if someone in the house prefers Rotten Tomatoes, they can swap that in for your New York Times reviews, no problem.
Fourth, you can run different feature clusters at different times:
Jumping out of a plane? Driving a car? Climbing a cliff face? Watching TV? Cooking? Enable the feature cluster that helps you with that activity, and get rid of all the others. No distractions. You want to know when it’s time to pull that rip cord - you don’t want to see a notification saying that you have sixteen new Whatsapp messages.
Fifth, you can get people to modify, or build you new features:
Want to change the way your calendar deals with time zones, so you don’t accidentally schedule a meeting for midnight on the day after you get back from holiday? Want to get Spotify to start from the beginning of a song when you switch to your big speakers? Want to change the way your Scrabble games get saved? Just call a friendly local coder and get it done, the way you call a plumber or an electrician.
Sixth, you can pass features on to others:
If you’ve built a useful feature, you can make it available to others - for money. If that feature turns out to be useful, people will adapt it and pass it on, and you will profit. It’s fine to build and ship just one little feature - you don’t have to make a whole app, you don’t have to start a huge business.
questions
This little thought experiment, small as it is, throws up a number of questions.
It’s hard enough to choose and interact with applications, of which there are thousands out there, and of which I have already too many on my phone; how the hell are we going to manage thousands, even millions of features?
What happens when two features from different providers interfere with each other? Times a thousand?
How do I adapt a feature from some other coder to my particular needs, and make it work in harmony with the other features around it?
How do we go about finding features that we need, or identifying when those don’t exist?
How do we pay for features? Do we buy them, or subscribe to them? How does the money get routed fairly to the people that made them?
Does all code have to be open source? Or can people ship code that’s secret, but still allow others to modify it?
How do we work together when we’re each running completely unique pieces of software?
Do people even like writing code in features? How do we specify, document, diagnose and debug faults in software when all we have is a cloud of features?
What happens to software brands? Does every feature have a brand somehow? Do we apply branding to types of activity somehow? Or do brands disappear? What’s the purpose of brands in this context?
What happens to platforms? If there’s no applications, and everything’s just features, where’s the demarcation line between the “platform” and “application code”?
Do people care enough about their computers to switch to this new way of doing things?
Won’t a world in which everyone can choose their own features just be total chaos?
Is this way of thinking just too alien?
The honest answer to these questions is: I don’t know. For a really good reason:
Like, I’m just one guy. I don’t know whether a feature-modular computing platform is desirable, or even possible.
What I do know is that I want to find out. And the best way to find out is just to go ahead and build it, so I can try it out.
So that’s what I’m doing.
I might need a little help.