In 7th grade, our home room teacher showed us Scratch for the first time. The majority of fun with Scratch was sharing. Posting graphics on the walls, modifying and experimenting with each other’s work, and bringing the “new” products back to their original inventors.
But the real spark of Scratch came from just how easy it was to make shared state. In Scratch, you can create a globally consistent variable that is synced across every one who ran my game just as easily as any other variable. Adding a leaderboard to my game was just as easy as replacing my variable with a Cloud Variable.
Making a shared variable is as easy as clicking a checkbox
This was the last era of the internet, to me, felt personal, multiplayer, distributed, and evolvable. It was easy to build stuff on your own and remix other work. It felt like a clearing in the woods, a safe gathering space for those who knew about it.
The house from Up (2009)
Over time, this started to fade. Geocities came and went. Big platforms like Facebook, Google, and Amazon swooped in to buy all the real estate around our little clearing. It lost most of the personal aspects as it grew into an app platform.
Some stubbornly kept their little hypertext gardens but doing so was a radical act rather than the norm. We, as citizens of the internet, have lost our ability to shape it and make it a home.
In 2019, Yancey Strickler illustrated this in what he called the Dark Forest Theory of the Internet.
Imagine a dark forest at night. It’s deathly quiet. Nothing moves. Nothing stirs. This could lead one to assume that the forest is devoid of life. But of course, it’s not. The dark forest is full of life. It’s quiet because night is when the predators come out. To survive, the animals stay silent.
This is also what the internet is becoming: a dark forest. In response to the ads, the tracking, the trolling, the hype, and other predatory behaviors, we’re retreating to our dark forests of the internet, and away from the mainstream.
Our web has turned into a relentless competition for our attention. As corporations and influencers grasp for power, an increasing number of the web’s citizens have retreated to the underground burrows of the cozy web to avoid the fallout. Hidden away from a hostile public web filled with spam, AI marketing, and malware, we find respite in our group chats, Discord servers, and forums.
Maggie Appleton in The Dark Forest and the Cozy Web
But we’ve fallen into a very narrow set of design patterns. In the name of profit, platforms optimize for views, hours spent, and clicks. They ‘accidentally’ boost provocative and incendiary behaviour because they know that it draws people to their platform, healthy or not. Each additional app on the web increasingly competes for increasingly scarce attention. Who has space for authentic connection anymore? That doesn’t make profit numbers go up.
It seems that we’ve reached the inevitable conclusion of optimizing “connecting with each other” to the extreme. With no feedback system for users to have a say or improve the conditions, the web is quickly spiralling into something that doesn’t do all that good of a job. The thing that the web originally was meant to do — enable people to meaningfully meet and collaborate with each other — is harder than ever. Perhaps we might carve out a bit of space for those again?
In design, there is a technique diverge-converge, which as the name suggests, has two stages:
- Diverge: come up with many independent solutions to the problem
- Converge: narrow down and refine a small number of solutions to the problem
The early days of the internet exemplified the diverge cycle of design. We tried a lot of ways to connect people and things on the web. Over time, some things stuck and others didn’t. Evolutionarily, we’ve guided ourselves to this unfortunate set of web design practices and it’s not clear that these will continue to serve us well. We’ve converged on a state of the internet that worked great for the first 15 or so years, but now parts are creaking and dilapidated.
How might we broaden the design space again?
The first step to this seems to be to dispel the myth that the internet and the web as a whole is something so vast and monolithic that it is unchangeable. We look at these entrenched protocols and take them as a given.
But here’s the wonderful bit about software (and specifically the web) that feels uniquely special: you don’t need permission to make things.
The internet is the first place people got to build real things without needing to ask someone if they could. This is powerful. We should give people the ability to own technology, to bring it into their own complex life stories. The real use cases may be the ones waiting to be discovered. One of my favourite examples is the French bistro.
The small Parisian restaurants serving home-cooked meals in very modest settings—like the cafe before it, was an invention. Many tales exist of its origin. Some say it was working-class landlords opening their kitchens for extra income. Others say it was the Auvergnats, immigrating to Paris from what is today central-south France, who first worked as rag-pickers, then wood and coal sellers, then metalworkers, who created small working-class restaurants to supplement their income. Either way, it was not planned or engineered, but simply not-disallowed. There were no rules in place to stop this invention.
(Simon Sarris, Welcome, ghosts, emphasis added)
The best pieces of software I’ve had the pleasure of using are ones that are agentic. Examples like Minecraft and Scratch let me fully construct a world for myself in which I operate. They set the rules, but I am the one who decides how I want to play.
Agentic software designs for and explicitly allows user-made desire paths and folk-usages of software. People will use software in whatever informal, distributed ways that emerge from real world contexts. Folksonomies are a great example of these informal taxonomies developed by users on social sharing platforms. Tumblr tags, for example, have adapted to become not just a form of tagging or organizing, but also metacommentary, memes, and other comedic content.
An Yokochō alleyway in Tokyo, Japan. There is an inherent smallness to the design that fosters communication and character. Owners say that the smallness encourages genuine communication between staff and customers as well as among characters, much unlike the homogenization of shopping malls and chain stores (paraphrased from Emergent Tokyo: Designing the Spontaneous City). How might we create Yokochō alleys of the internet?
Agentic software embodies a Hundertwasser flavour of design where:
- The resident has access to the same tools as the architect.
- Everything is writeable, everything is rewriteable.
- People can solve their own problems.
For this to happen, we need to reduce the burden of building software. Not all tools need to be complex power tools that require university degrees to operate. Progress can mean simplifying tools to enable the layman to shape his immediate environment to his taste. How might we make software not just the tools of the engineering elite but the layperson as well?
Like any society, it is not only architects, builders, or engineers that move us towards this collective consciousness. We need people to bring themselves and assume new identities—perhaps where the role of ‘technologist’ is fluid and all-encompassing. Where ‘technologist’ is everyone and anyone concerned with the role of technology, empowered to use it to shape their experience in our pervasive digital world.
We must make it possible for the average layperson to be able to change and adapt software for their own needs; for them to experience creating software not like a professional chef, but a home cook.
First, we need to address the double-edged sword that is scale. Scale, of course, can be a good thing. Economies of scale enable us to have cheap hosting, comprehensive web search, and many more luxuries we enjoy on the web today. However, the Silicon Valley mindset of always asking what the billion-dollar version of your idea is and how you can get everyone using it is slowly poisoning how we think about software.
Because realistically, when most of us want to create software, the intention isn’t to release something that the whole world will end up using. Yet, with all the knowledge you end up needing to be able to do it, it seems like everything we release into the world needs to be production ready!
For someone to make a web service today, they need to know
- How to pick and choose a hosting provider to put their service on the web
- Basics of DNS so they can use a custom domain
- Choosing a database, host it, and figure out how to safely talk to their database from their service
- How to talk to APIs without leaking secrets
- … and many more I’m not mentioning here (especially if they choose to make something peer-to-peer)
I spent a lot of time around university-aged students first learning software engineering and there is a really large gap between how easy it is to get a static website on the web and how difficult it is to add a database to it. This, for most people, is where they decide that software is too difficult and give up.
It has become so difficult to learn that it has almost killed software’s viability as a tool for expression. Imagine if, every time you cooked a meal for your friends or family, world-class critics came in to judge and prod at your food. Or if, every time you wanted to write a letter to your partner, the postal service would refuse to send it if it contained even a single grammatical error.
Learning how to store passwords or add OAuth2 to your toy web site is not fun. So much of programming today is busywork, or playing defense against a raging internet. You can do so much more, but the activation energy required to start writing fun collaborative software is so much higher you end up using some half-baked SaaS instead.
Writing a web service for use by your friends should not be a form of combat, where you spend your days worrying about XSS attacks or buffer overflows. You should be focused on creating something new and wonderful in a place without bad people hounding you.
(David Crawshaw, Remembering the LAN)
It wasn’t always like this. In fact, the internet used to be pretty flexible. In the days when we still had plenty of IPv4 addresses to hand out to computers, when CORS and NAT hadn’t made the web peer-to-peer hostile, LANs meant it was easy to learn about computers and experiment with things. I could just run something on my machine and open the port to my computer from my router and anyone in the world could see it.
Unfortunately, we can’t just naively revert back to this. It is no secret that our modern internet is peer-to-peer hostile. Almost all of the communication we do on the web is fully client-server because that was the easiest way to make things secure and work.
Part of this comes down to the entrenched nature of how the web is structured. Our browsers and home computers can only speak and request from services, but we’ve lost the ability to listen for others and serve services of our own. Security is a hard problem to solve and there are a lot of malicious people on the web. But going down this path closes many doors for what we could be doing with the internet.
How do we make making on the web easy and fun again?
From the blogpost introducing CoCo
It’s true that networks are fundamentally sloppy and all sorts of broken. But broken does not mean unmendable.
This latter point is one that Chia talks about in her articulation for a future of the internet. To declare it unmendable or unfixable is to abandon the many people that still need these deeply broken technologies.
Starting a new system from scratch with a grand vision is not the way to do this either. History has shown us that trying to purge everything and build out a totalizing vision can have terrible implications, regardless of whether they succeeded or not.
To reform the web is not to wipe everything and start over tabula rasa, but rather to move through the adjacent possible, figuring out how we can improve the existing condition of those trapped by these systems without uprooting them.
The internet is based on Postel’s Law: work the world as it already is, not as you wish it were. In fact, this is how the Internet today evolved. It was bootstrapped on top of existing telephone networks, exapting existing phone hardware to get it off the ground. It didn’t need to deploy expensive new hardware or lay down new cables, it just conformed to existing infrastructure.
Just as the early internet was built on top of telephone networks, we can build a new set of cozier, smaller networks on top of an internet that is showing its age.
Maybe we bring back the philosophy of LANs, but rather than networks based around closeness in physical distance bounded by routers, we created networks based around closeness in social and trust space1? What about Communal Computing Networks?
We could have:
- Countless local networks, many overlapping with each other.
- A larger network of networks to allow for cross-network collaboration.
This is a design pattern we have seen work well in the past with email and Matrix. These platforms often function as networks of networks, allowing communities within them to have control over their own smaller networks but still allowing users on different providers to interact with each other seamlessly.
With this infrastructure in place, we can also think about what community owned applications may look like. Perhaps this is infrastructure that will allow us to not necessarily decentralize but rather decenter servers, moving them from the source of truth to a supporting role.
Perhaps this looks like people having ownership of their own data. They could use servers to help make it available to their peers when they are offline but they are never essential to people accessing their own data.
Your peers, friends, and colleagues could help replicate, host, and process indexes for data they are also interested in. A big community corkboard of all the things the group may be interested in. In this magic world, anyone could write applications that pull in data from these indexes, making it easy to experiment and just make things that work on the web.
As we spend more time on the web, it’s clear what may have worked for a smaller web no longer works today. In today’s web, the powerful become more powerful, the rich become richer. The day-to-day users have no say over the terms of service we are served. We live in a feudal web.
It used to be the case that you needed to train to become a scribe to write words for any reason. But just as pens were taken out of the hands of the scribe during the Reformation of Europe, we must take the code out of the hands of software engineers and share it with the masses.
Writing software shouldn’t take a degree and many years of training, it should be as simple as making a meal at home or writing a letter to a friend. Doing so will lead to a more diverse and resilient internet, with a greater variety of voices and perspectives represented so we may build an internet that works for us.
I dream of a future where we have this LAN-like experience back again with all the best parts of the 21st century internet. A safe small space of people we trust, where we can go, rest, and look out for each other. A harbour from the multi-billion-person internet for when we want to feel cozy and safe.
Let’s make the web feel agentic again.
Hello stranger! If you’re still reading by this point, then you’ve probably been thinking about similar things for a while. I want to extend an open invite to you to lend your thoughts too.
Join us as we write about what it would be like to make these fictions become reality because the way these ideas become powerful and revolutionary is to have more people contribute to them.
In a magic world where IPv6 was adopted by everyone, every computer and device would have a unique address to send and receive things from. It would enable people to host things again, to have their own little home dinner parties instead of always going out to the restaurant. Unfortunately, IPv6 adoption has been really slow and we’re stuck in a world where IPv6 isn’t widespread enough to assume that most users have an IPv6 address as of yet. ↩