A Pattern Language for Interfaces

System → Programs → Apps

Is this a design language?

No. Silicon Valley “design languages” are languages exclusively for the designer to speak to the user. The user is not given an equivalently expressive language to speak back with: the Silicon valley designer believes that the user has nothing valuable to say beyond affirmations and grunts. A "design language" is a language of sermons: preachers do not tolerate interruption of their mass with questions and commentary. The language I want to build is a language for conversation amongst equals.

Notes

Patterns

Performance**

https://www.inkandswitch.com/slow-software.html

See also Lightweight Processes

Full-screen any element

https://www.notion.so/Computing-Spaces-Log-bb7cf95d8f9b48a2a8994d8f33676cc9#eb841c0a01fd4ae2b9ac924bec4a0e12

For people to realize their goals, they often need to narrow their focus on a single element.

Full-screen controls let people expand a single element of an interface to occupy their whole screen, letting them ignore the visual clutter of unnecessary UI. But a designer cannot hope to anticipate every possible thing the user would like to view in a full-screen.

Therefore:

Provide a mechanism for every widget to be full-screened.

Notes:

Even as I write these patterns, I feel the need to rapidly full-screen a single pattern page to narrow my focus on it, knowing I'm inside of a whole. I must implement this in

Hide/Collapse any element**

But provide an obvious way to find it again via Visible Structure or Version Control.

Ubiquitous, scopeable search

When navigating deeply nested information hierarchies, we often need to

Therefore:

Allow any string to be searchable in the system. Make it scopeable over a particular portion of the graph to control the results. Allow results to be shown in-context.

Search should apply over the available actions/commands too(with a means to filter them(this suggestts a need to be able to quickly point to just the actions of a card-object)):

Notes:

Scopeable Actions

Reflection

Elements should expose the commands they have available.

Draw everywhere

https://szymonkaliski.com/projects/hhann/

Version Control*

https://szymonkaliski.com/notes/handling-history-in-software/

Appropriate Contrast Ratios*

Unlimited Undo**

Access Controls*

Links

Combine with deep addressability.

Links create connections, connections create resilience. New elements can be softly absorbed into the system and made continuous with it via linking. Like Alexander's basket, the load of new information, tasks, and external events can be distributed throughout the network structure, rather than concenttrating them inside of a todo list, where they will cause uneven point-wise force(think of a needle) on your digital fabric.

Deep Addressibility**

Zooming User Interface*

Ubiquitous Embedding**

See: Notes Anywhere

Naming everything is exhausting. Sometimes we just need to point to things.

Provenance Trails**

Small Code**

Plain and Friendly Language**

Blameless Error Notifications**

Dynamic Arrangements**

People develop ideas through connections. When solving problems, they need to see multiple things at once.

Notes: Unflattening simultaneity, comics

Therefore:

Allow any element of the system to be placed next to another element.

This can be accomplished via Ubiquitous Embedding, or any of the window managers: a Tiling Window Manager, a Scrolling Window Manager

Instant Publishing**

Multiplayer Mode**

Extremely Late Binding**

Disjoint Versions Living Harmoniously**

https://gist.github.com/pvh/6dd6f66c17f89e2a686f5b3026b7784f

Customizeable Spelling Dictionaries

Collapsable Elements

Consistent Drag and Drop

Also make sure to visualize the drag and drop.

Multiple Composable Window Managers*

Tiling Elements

Scrolling Elements

Visible Structure**

Use with Multiple Representations

Direct Manipulation*

Notes Anywhere*

Make sure they're searchable with search anywhere.

Multiple Representations**

Can use backlinks to point back to where they came from.

Can use sidelinks if we consider the representations to be part of a List of representations of the original Object.

Customizable Keyboard Shortcuts*

Streaming Pipes**

I ought to be able to stream the contents of a Notion node into Figma.

"I've now realized that the software tweak I want is for Twitter to give me a little export of all the responses in this thread, so I can catalog them better"

https://github.com/mawww/kakoune/blob/master/doc/design.asciidoc#composability

Made visible by: Visible Structure, Multiple Representations

Command Palette*

Use Reflection to find the commands available: https://github.com/p-e-w/plotinus

Backlinks**

Live Programming**

Potential Patterns

Breadcrumbs

Force: forgetting/losing context vs. the need to know where you are.

Batch Actions

Any action you can apply to a single item should be possible to do on multiple items. If the set is disjoint, group the actions first by the actions that are common to all items, and then show each group of actions next to a representative preview of the group.

Replace/Map/Filter

Consider Kakoune's approach to find and replace: rather than having a special "find and replace" command, we are given a "find" command, that given a string creates a list of selections, and a "replace" command, that given a list of selections, mutates them in place. Can we do something similar in this system, where users are given these generic tools to use? And scoping: is this a kind of selection?

https://twitter.com/yoshikischmitz/status/1309648874257039360

Workspaces

Continuous Chain of Action

Interruptions disrupt us, removing us from

Local Copies

To prevent link rot.

Going back

Ctrl+O in VIM. See also my tweets about Notion vs. Bear.

Multiple Devices

What are the forces a work here?

Provide many views of objects so they can be seen on your mobile device.

See: Embedding, Multiple Representations

Fast Search

Notes:

Ubiquitous Mentions

A kind of sub-pattern of Ubiquitous Embedding or Transclusions. Mentions are transclusions of names.

See also

Visible Modifiers inside of Modes and Quasimodes

If I'm dragging a window, and there are keyboard commands avail. to me, show me those.

https://twitter.com/yoshikischmitz/status/1311115683640438785

https://twitter.com/jackrusher/status/1311207824635105280

Gradually Fading Training Wheels

Lightweight Processes

I should be able to create so many more Notion windows than I can - but I can't, because each one takes up hundreds of MB of memory. My computer only has 16GB of memory - most only have perhaps 4-8GB. It's impossible to have our thoughts flow freely if we are simultaneously being our computer's task manager.

Note:

Visible Performance Indicators

Give people fine-grained visualizations of performance issues. Have an escape hatch for when a process is taking up more than it should.

Inbox of Changes

Make sure they can Hide Any Element so they

Version Control For Settings Pages

A specific combination of ubiquitous version control and backlinks that feels worth calling out.

https://www.goldfiglabs.com/

Detailed Activity Logs

See version control

Screentime Control

Kanban boards

There's something wonderful about these.

https://twitter.com/NanoRaptor/status/1281790133507780608

Objects shouldn't suddenly move

At first tycho-epoch was the 4th item, until I clicked play, when it immediately jumped to the top of the list. That felt weird, I felt no anticipation of what will happen when I clicked play. Maybe hovering over play should show me what's about to happen? Maybe it should react more slowly?

Prior Art

http://www.maplefish.com/todd/papers/Experiences.html#Garden of Windows

Modals like this shouldn’t exist

They create discontinuities of flow