Personal computing was conceived to be personal. Personal, as in experiencing computation the way it fits you. Your context should come first and dictate what is interesting. The experience should follow.
1/
For example, consider where you are reading this tweet. Or where you are writing a reply to it. It's not unlikely that you are doing it exactly in the same way many other millions of people are doing it: using the generic interface that Twitter offers.
2/
Of course, this is convenient. At the same time, it might not match your actual needs. For example, say you like writing longer threads. Longer threads imply more consideration and possibly longer time to write. And, you may want to handle multiple drafts in parallel.
3/
Also, when you compose, you might want to do it in an isolated environment where you do not get exposed to the immediacy of the new 10 notifications that just appeared.
4/
The default UI incentivises the opposite behavior. It wants you to act now. If you want a thread, it's one thread. And the writing experience is secondary to the rest of the UI.
This does not necessarily make the UI bad. It just makes it not suitable for your needs.
5/
The needs I described are still generic. Actual needs are much more contextual. You want the tool to match those needs. Not the other way around.
Think of this: if you have an idea, why do you go to a service to deposit it? Why is the experience not coming to where you are?
6/
In a beautiful #TEDTalk from 2013, Iwan Baan talked about how people both adapt to their environment and adapt the environment to their own needs and perspectives.
One example is how people adapted to living in an unfinished 45-story office building and how they transformed it into a small city.
He goes on to show many pictures of how people "essentially create a home that's completely adapted to the conditions of the site".
8/
When people are provided with a building skeleton, they fill with with beautiful contextual experiences. This stands in contrast with generic "cookie-cutter housing solutions".
9/
The main message is delivered at the very end as a quote by Zita Cobb:
"There's this plague of sameness which is killing the human joy"
This is in line with the lessons from Chrisopher Alexander who distilled a language of architecture patterns. The goal: create buildings that make use feel a quality that can only be felt but cannot be named.
11/
A pattern is a building block that can take many shapes. He defined it as a three-party rule: problem, solution and ... context. Context is essential because beauty is always contextual.
12/
Interestingly, context plays a central role in programming, too.
Consider this experiment. Take screenshots of development environments opened on two different systems, ideally from different domains. Stay at an arms length so that you cannot quite read the text...
13/
Can you say which is which? If you are using a typical development environment, you cannot (light theme vs dark theme does not count).
"There's this plague of sameness which is killing the human joy"
14/
A development environment is the gateway to the inside of a system. At the same time, we can also observe a lack of joy associated with working with legacy systems.
"There's this plague of sameness which is killing the human joy"
15/
In 1996, Richard Gabriel put forward the idea of software habitability. Indeed, as developers spend a good deal of their active life inside software systems, it only makes sense to make the inside of those systems suitable for human inhabitance. A beautiful perspective.
16/
Software is an enormously exciting medium.
Yet, software does not look like anything. The editor that you use to type code in might make you believe software is that text. That's deeply misleading.
Software is shapeless.
17/
For software to be habitable, we need a suitable shape. That's what the environment does: it provides the interface through which we experience the inside of systems.
This interface can be powerful, but not any interface would do.
18/
Before we go further, let's take a closer look at Richard Gabriel's words:
"Habitability is the characteristic of code that enables ... people ... to understand its construction and intentions and to change it comfortably and confidently."
He goes on to describe habitability by relating it to Christopher Alexander's "organic order". "Software needs to be habitable because it always has to change," he says. Therefore, it needs to grow together with the people inside (and likely the other way around).
20/
Now, the main argument revolves around code. Indeed, that matches the perspective taken for so long in our field. This perspective led to different languages, paradigms, patterns. A much needed perspective, indeed. Just not sufficient.
21/
Yet, somewhere towards the end of the essay we find this intriguing paranthesis:
"What is important is that it be easy ... to come up to speed with the code ... A language (and an accompanying environment) is poorly designed that doesn’t recognize this fact"
22/
The environment!
We strived for a long time to make code habitable by reshaping code, only for the results to be remain elusive. It's time to revisit our assumptions.
The environment is not an optional paranthesis. It is essential.
23/
The environment is, to this day, perceived as an interchangeable commodity: a glorified editor surrounded by an index of resources and few other bells and whistles. All software is presented in the same way, the only variance being what we read. The how never really changes.
24/
Just like with Alexander's building patterns, context is key when it comes to software environments, too, albeit for a slightly different reason. On the one hand, indeed, software is highly contextual. On the other hand, software is typically larger than fits in our brain.
25/
Presenting a system generically, as it was typed and as it runs might work in the small, but it fails in the large simply because it is too much for us to grasp more than a few screens at a time. When that happens, it feels uncomfortable. Unhabitable.
26/
To make systems habitable we need to compress their inner workings in a way that's comfortable for us. As software is highly contextual, we need presentations that match that context. But, to make it comfortable, we need presentations that match our context, too.
27/
Habitability is born when the experience matches our perspective exactly in that moment. That perspective might change in time and the environment should accompany us, as if with empathy. The environment must become our own.
28/
The environment is not an app.
"Apps are an old, old, bad idea" Alan Kay
29/
The environment must be a langauge. A language made out of operators that can be combined in many ways to match our context as we wish it. We should never have to adapt to the environment. The environment should adapt to us.
30/
• • •
Missing some Tweet in this thread? You can try to
force a refresh
@swardley I find that the most exciting part, which might also be the most difficult to explain, is that conclusions seem to emerge before people agreeing with each other, or even before any of the participants having the conclusion formed a priori.
I think that's extraordinary.
2/
@swardley Perhaps an example might shed some light.
In one of the groups, we build 3 maps. Each of them started with a certain assumption, and in each case mapping further sentences eventually turned the assumption upside down. Literally. In all three cases. With the same people.
3/
It's written for a first time reader. It's not quite short, but it's not that long either (~4000 words). It has concrete examples, but also a little broader theory.
It starts from the reading problem: reading accounts for the single largest expense in software development today, but it's just a strategy to gather information from the system. We can automate much of it, but we should do it through custom tools.
2/
To give a hint as to why this is relevant, I describe of an experiment in which we gave student teams the same requirements and a constrained tech. They produced very different structures which suggests that a system's inside emerges over time and that we need to react to it.
A beautiful example of #MoldableDevelopment. The view itself is not the most interesting part. The fact that you can write it with a screen of code is. That code is the legend of the tool.
While the tool is generic, we can easily imagine customizing it for specific contexts. For example, highlight specific files that are important for a specific investigation, like those from a special folder. When every view is an extension, you enable a rich experience.
2/
In the not too distant future, we’ll look back to this age and find the present default tools rather quaint.
Lepiter is the latest significant step in our journey to making systems explainable. Here is a behind the scene peak of how we got here.
1/
Our guiding north star @feenkcom is making the inside of systems explainable. We spent a great deal of energy rethinking how we can figure systems out, and this led to #MoldableDevelopment and #GToolkit.
#GToolkit proposes a new development experience. We see the environment as a language made out of visual and interactive operators that can be combined in many ways while working with the environment.
3/