Handmade Network»Fishbowls»How to design flexible software

How to design flexible software

We previously held a fishbowl about how to design to avoid configuration. But when you can't avoid configuration, how do you do it well? And if we want our software to be flexible, what other options do we have besides configuration? What other ways are there to make software flexible?

This is a fishbowl: a panel conversation held on the Handmade Network Discord where a select few participants discuss a topic in depth. We host them on a regular basis, so if you want to catch the next one, join the Discord!
Avatar
Avatar
bvisness
Topic: How to design flexible software
bvisness Dec 16, 2021 11:06 AM
We all want software to be flexible. We want it to work for lots of different users, we want it to adapt to different workflows. We had a fishbowl about how to design to avoid configuration, and you should read it. But when you can't avoid configuration, how do you do it well? And furthermore, if we want our software to be flexible, for users to be able to adapt it to their needs, what options do we have besides configuration? What other ways are there to make software flexible? And what about extending software? Flexibility is one thing, but some software can be customized so far that it's practically a new program. To what extent is this desirable? And how do we design these extension systems well?
11:06
There's lot of topics we could potentially discuss. But let me start by introducing our participants today:
11:07
@Allen4th, creator of 4coder and member of the Dion team working on future programming systems
11:08
@demetrispanos, esteemed community member, PhD, wise person and key contributor to our last fishbowl about config
11:08
@nakst, creator of the Essence operating system and many lovely tools
11:08
and @rxi, general wizard and creator of the Lite editor, microui, and many other tools
πŸ₯³ 2
11:10
To give a quick summary of what we discussed at the config fishbowl, we had a couple key insights:
11:11
First of all, Demetri laid out some definitions of config so that we could identify it in our designs - for example, config is usually changed infrequently, it's not the primary kind of data that the program works with, etc.
11:12
But most importantly we discussed the importance of having a strong design for your software that communicates how it is meant to be used. There are many cases where flexibility is pointless and just adds a burden for your users.
11:12
But there are places where options matter, where users should be able to customize things, and we want to do that well too.
11:13
@Allen4th do you mind if I kick things off with some questions for you?
11:14
actually let me perhaps start with a more general question
11:14
sorry πŸ˜›
πŸ‘ 1
11:14
For anyone here - what are some examples of programs that you think do customization well? Or do customization poorly?
11:15
(btw, audience, please do chat in #fishbowl-audience if you have any thoughts - we'll be paying attention to that throughout)
Avatar
demetrispanos Dec 16, 2021 11:15 AM
at the risk of raising some eyebrows, I think it's hard to argue against the success of wordpress
πŸ”₯ 2
Avatar
bvisness Dec 16, 2021 11:16 AM
spicy right off the bat
Avatar
demetrispanos Dec 16, 2021 11:16 AM
empirically it has allowed an enormous population of people without especially technical skills to create a wide variety of experiences
11:17
though, of course, you have to distinguish the wordpress plugin authors (developers) from the wordpress administrators (often non-developers who just mix and match plugins)
Avatar
bvisness Dec 16, 2021 11:17 AM
that is an important distinction that I want to make as we go along
11:17
definitely something that came up as I was prepping
11:18
what about wordpress do you think makes it more successful than its competitors?
Avatar
demetrispanos Dec 16, 2021 11:18 AM
well it's been around so long that it's hard to know what competitors to use as a comparison :P
11:19
as background, I think we can probably agree that the wordpress plugin universe is seen by many as a wild west situation, where many things are done in questionable ways
11:20
I think that's likely also a source of its strength
11:20
certainly I've been hearing about how unprincipled/disorganized/etc. WP is for ... 15 years?
11:20
but the people who make those criticisms don't seem to have a principled/organized thing that is anywhere close to matching WP's success
11:21
so maybe I'll summarize this point by saying that if you plan to be broadly extensible for a large audience, you may have to accept that your software will begin to resemble the full spectrum of humanity, from the least to most appealing :)
11:22
or to put it more concretely, I think if you have strong opinions about what extensions can and can't do then you are necessarily also picking your audience in the process
Avatar
bvisness Dec 16, 2021 11:22 AM
sure
11:23
I think plugins are just one aspect of WordPress's success too...the fundamental structure is pretty flexible. Like it appears to be just for simple blogs and websites, and yet the same basic structure can be turned into all kinds of websites with only minimal themeing.
Avatar
demetrispanos Dec 16, 2021 11:23 AM
yeah definitely
Avatar
bvisness Dec 16, 2021 11:24 AM
a few years ago we wanted to build a new help center at work, and we evaluated many (like 20+) turnkey help center / support site products
11:24
and ultimately just settled on wordpress with a custom theme
11:24
and it's been great
11:25
so thank you for bringing up this example, it's a good one to keep in mind
Avatar
demetrispanos Dec 16, 2021 11:25 AM
I'll throw in two others with similar levels of empirical success, if in narrower ways: photoshop, and digital audio workstations (DAWs) like Reason, Ableton, etc.
Avatar
nakst Dec 16, 2021 11:28 AM
Plugins in DAWs are pretty interesting in that the DAW treats them a lot like a black box. Take a synthesizer plugin: as input, it gets a feed of MIDI events, and a HWND to attach its user interface to, and as output it produces a stream of samples. And as long as it supports that interface, the plugin can do pretty much anything it wants! And it often leads plugins to feel like their own little environment separate from the DAW itself. (edited)
11:29
So much so, that some of the more complex plugins end up recreating features of the DAW within the plugin itself. For example, it's common to see some synthesizers now incorporating step sequencers or piano rolls to provide MIDI data for themselves, rather than relying on the DAW to provide it.
Avatar
bvisness Dec 16, 2021 11:30 AM
interesting, so the DAW is a little application platform unto itself
11:30
@demetrispanos is that the aspect that you were thinking about when you mentioned DAWs?
11:30
or is there another aspect of flexibility that you were thinking of
Avatar
demetrispanos Dec 16, 2021 11:30 AM
I'd say that plus the composition capabilities
11:31
composition in the putting-modules-together sense, not the putting notes on a sheet sense
Avatar
bvisness Dec 16, 2021 11:31 AM
right, different modules compose with each other
11:31
I know that composition is a thing that @Allen4th has talked about oh yep he's typing now πŸ™‚
Avatar
Allen4th Dec 16, 2021 11:32 AM
Mhm. So something I learned from 4coder is to think about "customization" systems on a spectrum based on the amount of control handed to the customizer.
11:33
The reason to think about that spectrum is to learn the pros and cons associated with moving more towards control on the plugin/custom code side vs control on the centralized side, so that if you're not getting something that feels like what you want you can figure out which direction you probably want to be moving.
11:34
In 4coder the customization was pushing towards the message to the customizer being "you can do anything you want you have complete control" - in fact I took that to such an extreme that I didn't even have a plugin system. There's just one customization at a time.
11:34
The advantage to that is the obvious one - your system can now be more things to more people (if they're willing to write the customizations).
11:35
The disadvantage is it reduces the ability of things to compose together. Composition is made possible by the centralized side making key decisions first.
Avatar
nakst Dec 16, 2021 11:37 AM
It surprised me the extent to which Ryan's custom layer almost became the de-facto standard for a lot of people's customizations. Although 4coder provides a reasonably minimal starting off point, allowing the user to develop there own customizations in whatever way they want, most people just ended up someone else's custom layer that makes a bunch of decisions for them.
Avatar
bvisness Dec 16, 2021 11:38 AM
Yeah - @Allen4th would you say that 4coder's customization design achieved the goals you had for it? If you were to design it again, is there anything you would do differently? (edited)
Avatar
Allen4th Dec 16, 2021 11:39 AM
It definitely did achieve the goal, which was that 4coder could operate as a starting off point for an editor which could then be made into just about anything. But I would do it quite differently, because I'm not convinced that's a very useful goal anymore.
11:42
If a customization system is "you can do anything the C language could do" then yes they can make it into whatever it is they need, but if they can program C, they can already make whatever they need. Shipping something to someone should probably be about saying "I've gone and done a lot of the exploration through the things you could do, and I think this is a pretty good set of decisions". I would probably focus a lot more on a restricted customization system where you can piece together pre-fabbed bits if that's all you need, which is currently not an option in 4coder really.
Avatar
bvisness Dec 16, 2021 11:43 AM
Sure, that makes sense - and in fact I think that falls in line with what we discussed in our config fishbowl
11:43
it's "powerful" in some sense to be able to do anything, but the software needs to actually solve some problems for the user too and make it easier for them to achieve their goals
Avatar
Allen4th Dec 16, 2021 11:44 AM
Right. I think as another point we're assuming "software" here means end user software. But really if you want to leave all the power in the user's hands, I think a library is more of an appropriate structure.
11:46
This was one of the big Data Desk -> Metadesk changes Ryan and I did. Data Desk was modeled after 4coder's one-customization approach. But the same thing as a library turns out to make a lot more sense.
Avatar
bvisness Dec 16, 2021 11:46 AM
Mm, I see. Since it's explicitly designed to give all the power to a programmer, you allow their code to have primary control.
11:46
Makes sense!
11:48
But as @nakst mentioned, it seems that not many people have really gone to that extent with 4coder. It seems like a most users aren't actually interested in doing that much work. So I'm curious how we start to shift toward the centralized control side in a way that works well.
11:48
if @rxi is around, lite's plugin system could be an interesting counterpoint
11:48
otherwise we could start to discuss wordpress plugins in more detail since @Rudy was bringing up aspects of that in #fishbowl-audience
11:50
(plugins in general are a pretty rich vein)
Avatar
Rudy Dec 16, 2021 11:50 AM
I was mostly providing supporting arguments for the point Demetri had initially made
11:50
As it pertains to WordPress specifically since I have a looooooong history with the software
Avatar
demetrispanos Dec 16, 2021 11:51 AM
pulling in the point from the audience channel, I think the spectrum of contributors (core developers, plugin creators, people who arrange plugins) seems an important architectural feature
Avatar
bvisness Dec 16, 2021 11:51 AM
(context: Rudy works for Automattic, the creators of WordPress - and perhaps has history with WordPress before that?)
Avatar
Rudy Dec 16, 2021 11:51 AM
not in core development but as a freelance developer
11:52
sort of the community i was thinking about in that point
11:52
because there are multiple target audiences in that software
11:52
there is the development community: making WordPress for developers to use there are the site admins: making WordPress easy for them to use (the non programming aspects) then the end end users, or people that visit WordPress sites
11:53
and there are levels in between all that, for example theme shops
Avatar
demetrispanos Dec 16, 2021 11:54 AM
another common theme I note here among WP, DAW, Photoshop: these are all content systems of one form or another I was trying to figure out an example of similar extensibility success that wasn't itself a content system and the first thing that came to mind was web servers (starting with apache's mod_foo architecture)
11:55
I consider the web server example much more limited compared to the others but I wonder if others have better examples
Avatar
Rudy Dec 16, 2021 11:55 AM
@Voran mentions game modding
πŸ‘‹ 1
Avatar
Avatar
bvisness
But as @nakst mentioned, it seems that not many people have really gone to that extent with 4coder. It seems like a most users aren't actually interested in doing that much work. So I'm curious how we start to shift toward the centralized control side in a way that works well.
nakst Dec 16, 2021 11:57 AM
This is something I've been thinking about with Essence: how much of the system internals should be exposed by the API for applications to customize on behalf of the user? Should it be possible to say, install an application that changes how the native GUI textbox works? There seem to be a lot of disadvantages to doing so. Firstly, there is the concern of how inter-plugin interactions will behave, and what will happen when the system internals are changed, that you can see examples of discussed on The Old New Thing blog, and I recall were also discussed in Allen's HmN podcast wrt 4coder. Secondly, the experience of using a plugin will often be inferior to if the functionality it provides were integrated directly in the core system; and since Essence is open source, if there were a really good plugin that replaced some functionality for the better -- surely it would be better to just make those features part of the operating system in the first place! And finally, there is the matter discussed just above, that a lot of people don't really want to customize their applications or system; they just want it to work!
Avatar
nakst Dec 16, 2021 11:59 AM
But on the contrary, purposefully restricting the capabilities of applications seems almost antithetical to the philosophy of an operating system, in that it is meant to assist the creation of, and expand the possibilities of applications!
Avatar
Avatar
nakst
This is something I've been thinking about with Essence: how much of the system internals should be exposed by the API for applications to customize on behalf of the user? Should it be possible to say, install an application that changes how the native GUI textbox works? There seem to be a lot of disadvantages to doing so. Firstly, there is the concern of how inter-plugin interactions will behave, and what will happen when the system internals are changed, that you can see examples of discussed on The Old New Thing blog, and I recall were also discussed in Allen's HmN podcast wrt 4coder. Secondly, the experience of using a plugin will often be inferior to if the functionality it provides were integrated directly in the core system; and since Essence is open source, if there were a really good plugin that replaced some functionality for the better -- surely it would be better to just make those features part of the operating system in the first place! And finally, there is the matter discussed just above, that a lot of people don't really want to customize their applications or system; they just want it to work!
Rudy Dec 16, 2021 11:57 AM
this is precisely where i think WordPress is a good model to follow
11:58
you never modify core directly but you allow actions or filters to change the behavior after the fact
11:58
in really any way they please
11:59
so in Essence's case when you make OS Updates it never breaks their system
11:59
it might just break their plugins but not the core OS
Avatar
Avatar
Rudy
you never modify core directly but you allow actions or filters to change the behavior after the fact
nakst Dec 16, 2021 12:00 PM
Could you explain how this works in more detail? I have not used WordPress before at all
Avatar
Rudy Dec 16, 2021 12:00 PM
If there’s one cardinal rule in WordPress development, it’s this: Don’t touch WordPress core. This means that you don’t edit core WordPress files to add functionality to your site. This is because WordPress overwrites core files with each update. Any functionality you want to add or modify should be done using plugins.
12:01
Plugins allow you to greatly extend the functionality of WordPress without touching WordPress core itself.
12:01
one important thing to note here is you can touch core, as in there is not restricted access....
12:01
which is something that would be nice to see in an OS
12:02
but important to let folks know at every turn that they modify core at their own peril
Avatar
Allen4th Dec 16, 2021 12:02 PM
I'd also love an elaboration on the idea of WordPress actions/filters changing behavior, and the "don't modify the core" philosophy. I am a terrible web programmer, and was quite young, but I worked in WordPress for a time and my feeling was always that I had a lot of confusion resulting from the order of plugin installation & precedence. To me it's exactly the text box problem that @nakst described. How do you deal with it when two plugins both have something to say about a systemic thing, and who goes first/gets control makes a big difference?
Avatar
Rudy Dec 16, 2021 12:03 PM
@Allen4th without turning this discussion too WordPress specific I would encourage anyone interested in these questions to take a look at the developer / plugin handbook it is not too involved of a read https://developer.wordpress.org/plugins/intro/
Avatar
bvisness Dec 16, 2021 12:04 PM
At a high level it's certainly the case that WordPress provides a lot of "hooks" where people can register callbacks and such
12:04
plus various APIs for saving and loading data, checking user permissions, tons of general stuff for accessing content in the system
12:04
I wouldn't say plugins are particularly "sandboxed"
12:05
I know that some hooks do have priority, where you specify a number to help WP sort out what goes first...it can definitely be a pain point.
12:05
Although most plugins work independently from each other.
Avatar
demetrispanos Dec 16, 2021 12:07 PM
I like to think of systems like WP's as "board game rules" where there's a fixed sequence of operations that everyone can know. This means that non-developers can say "ok step 4 is rendering the page header, after that happens we need to do auth verification before step 5 which is rendering the navigation bar"
12:07
and then WP actions/filters etc. provide ways for plugins to interpose on those "board game rules"
πŸ‘ 1
Avatar
Avatar
bvisness
Although most plugins work independently from each other.
Rudy Dec 16, 2021 12:08 PM
plugin conflicts are very much a thing, unfortunately
12:08
especially when you have millions of developers and many of them not thinking about how theirs might interact with anothers
Avatar
Avatar
Rudy
@Voran mentions game modding
Voran Dec 16, 2021 12:14 PM
So, about modding, I guess what I'm most curious about is how a game creator who wants to allow modding should approach it. I've seen a lot of approaches. Minecraft, as the biggest example, started out without mod support, but was easily able to be modded because it was made in java and the jar file was easily modified. In recent years, another method of user-side configuration which is extremely similar to mods is that of Datapacks, which allows you to change the input data to the game (but not add additional functionality in the way that mods do). Other games actively support modding, with examples such as Starbound using Lua or Space Engineers using C#. So there seem to be a lot of ways that people have approached mods. But while the desire for players to add to the game seems to be there, from both developers and their communities, I've noticed that a lot of games which are designed to be modded fall short of the mark. It's certainly difficult to mod compiled games in languages like C++, especially without the source code, but it also opens up avenues of modding that typical modding apis don't actually present, because they effectively modify the game that's running rather than just providing a bunch of input. So the best situations for modding end up being those like minecraft, where nobody put any effort into making the game extensible, but the game is easy enough to modify due to the structure of how it was built. So I'm wondering what ways people would approach the problem of trying to make a game which is compiled in a language like C++, but also able to be modified in ways which are mutually compatible between different mods, and powerful enough to support game-changing behaviors that don't require the game author to anticipate everything that people might want to do.
Avatar
bvisness Dec 16, 2021 12:16 PM
nobody put any effort into making the game extensible, but the game is easy enough to modify due to the structure of how it was built
this is the most interesting thing to me, and perhaps it's just another symptom of actually needing to design something
12:17
I think the idea of modding is probably outside of the scope of this conversation to an extent, because what you describe as being most effective is something that you wouldn't expect most people to do.
Avatar
Voran Dec 16, 2021 12:18 PM
Right, I suppose it's a bit of a different challenge there
Avatar
bvisness Dec 16, 2021 12:18 PM
But it's weird that the most effective thing is so difficult. (edited)
Avatar
Voran Dec 16, 2021 12:19 PM
It's really strange to me too, and it's what I think a lot about when it comes to mods. Java isn't good, in my opinion, but because it's easy to open it up and just slot something in place of an existing piece of code, modding just works (more or less; it took a lot of work for minecraft mods to get to where they are today).
Avatar
bvisness Dec 16, 2021 12:20 PM
One of the things I was thinking about as I prepped for this fishbowl is what "interfaces" or "surfaces" your software has for customization. And I think we've listed many over the course of this conversation so far, each pertaining to different users:
12:21
- Extremely low-level, modifying the executable itself with no explicit interface (e.g. minecraft mods, hardcore developers only)
12:21
- A library with which you can do nearly anything (e.g. 4coder, experienced developers) (edited)
12:22
- A plugin system with "hooks" where you can modify aspects of an established experience (e.g. WordPress plugins, developers only, but open to more casual use)
12:23
- A flexible system that you use without extension (e.g. WordPress posts and pages, any user) (edited)
12:23
Many highly customizable programs seem to have multiple of these, and they target different types of users. (edited)
Avatar
Allen4th Dec 16, 2021 12:25 PM
I think that expresses pretty well the spectrum I tried to point out earlier. I think a key idea I would want to pass on is that just because the higher level things can be built from the lower level things in theory, that doesn't mean that only providing the low level things is good enough. The design work you put into higher level things pays off separately even if you leave room open for those lower level customization routes.
Avatar
Voran Dec 16, 2021 12:27 PM
That's a good point. Having greater customization capabilities like in 4coder increases what you can do, and having higher level abstractions that non-programmers can use increases who can do things, and with both paths open, you kind of get both things.
Avatar
bvisness Dec 16, 2021 12:28 PM
An interesting distinction though is that in something like WordPress, developers are primarily making tools for end users. Whereas with something like 4coder there isn't really any end user beyond the developer.
12:29
This is not unique to 4coder either; I see it in a lot of programming tools (edited)
Avatar
Allen4th Dec 16, 2021 12:29 PM
I also think it pays off in the compositional side. If all customization is low level you don't get composition of independent modules. So even a really skilled programmer can't do anything about it, if the centralized side didn't do any high level designs to enable composition.
Avatar
Avatar
bvisness
An interesting distinction though is that in something like WordPress, developers are primarily making tools for end users. Whereas with something like 4coder there isn't really any end user beyond the developer.
Rudy Dec 16, 2021 12:31 PM
Not sure id agree with that, depending on the definition of end user
Avatar
bvisness Dec 16, 2021 12:33 PM
well, people downstream of the developers
12:33
It's interesting to me how different examples we've seen here today handle composition differently
12:34
Allen, you discussed 4coder, and Rudy brought up WordPress, and they both seem to have conflict situations
12:34
Demetri brought up DAWs, which seem to naturally compose plugins because each just produces an audio track (?)
12:34
and the whole point of a DAW is to compose audio
Avatar
demetrispanos Dec 16, 2021 12:34 PM
you can still get conflicts with poorly written plugins but less so, yeah
Avatar
Allen4th Dec 16, 2021 12:38 PM
I think an interesting dimension of this problem is how much work to prevent conflicts is worth it. There's at least three levels: 1. I didn't even do work in the core that would make it possible to avoid this conflict 2. I made it possible to avoid the conflict if the plugin behaves, but an "antagonistic" plugin can cause conflicts 3. I have defended against bad plugins so that it's not possible for a bad plugin to bring down the system
Avatar
bvisness Dec 16, 2021 12:39 PM
yeah
Avatar
Voran Dec 16, 2021 12:39 PM
And by definition, each of those constrains what you can actually do a little bit more than the last (edited)
Avatar
bvisness Dec 16, 2021 12:40 PM
definitely seems like if you're going to add plugins or "extensions" to your software, you should be considering conflicts from the start
12:40
and probably considering ways of designing things to avoid conflicts in the first place
12:41
That's all assuming you want to do that kind of customization though. And I'm not even completely convinced that that should be our focus.
12:41
Maybe as programmers it's natural for us to gravitate toward making these platforms for plugins and customization, but how important is that actually?
12:41
Maybe it's very important; Demetri opened with WordPress and it's fair to say that its success is largely due to extensibility
12:41
but is that the primary factor?
Avatar
demetrispanos Dec 16, 2021 12:41 PM
I think this connects back to the observation that most of these systems are in some way linked to making content
πŸ‘ 1
☝️ 1
12:42
and naturally, there will be an enormous variety in what people will want that content to be ... too much variety for a developer to anticipate and plan for
Avatar
bvisness Dec 16, 2021 12:43 PM
can you think of an example of a system that isn't for "making content"? seems like most software is about "making content" in some way
Avatar
demetrispanos Dec 16, 2021 12:44 PM
a highly extensible system? the best example I have is things like web servers or programmable routers
Avatar
bvisness Dec 16, 2021 12:44 PM
I'm interested in both extensibility and general flexibility
Avatar
Voran Dec 16, 2021 12:44 PM
Making content that other people can use creates a market, which I think Demitri mentioned earlier in #fishbowl-audience .
Avatar
bvisness Dec 16, 2021 12:44 PM
extensibility seems to be a good way to ensure flexibility long into the future, as long as there are people willing to extend it
12:46
I'm just not sure that we should all be thinking about plugin systems all the time
Avatar
demetrispanos Dec 16, 2021 12:47 PM
I'm open to the idea for sure, but I'm not sure I have a good example?
Avatar
bvisness Dec 16, 2021 12:48 PM
One fun thing that nakst mentioned before the fishbowl is how even simple things like resizing a window can be considered "customizing" the user's experience to some extent
Avatar
bvisness Dec 16, 2021 12:48 PM
and there is some real truth to that because I can't open this thread in a separate window to view it alongside the audience conversation 😠
Avatar
bvisness Dec 16, 2021 12:49 PM
we wouldn't typically consider that "programming", but it is providing some affordances to the user that allow them to adapt the program to their own workflows
12:49
this is perhaps the end-end-user use case (edited)
12:49
but it's also something that is generally far more in the author's control, even in software that might have plugins and high levels of extensibility
Avatar
nakst Dec 16, 2021 12:48 PM
Aha, perfect time to bring up this screenshot
Avatar
nakst Dec 16, 2021 12:48 PM
How ironic it is that a dialog box designed for customization of the system cannot be customized in such a simple way -- making the window bigger
Avatar
Allen4th Dec 16, 2021 12:51 PM
The window size thing is in fact interesting. We discussed earlier how some games seem to do a really good job at something like plugins (mods in the case of games) but something common among games is very restricted screen resolutions.
12:51
The constraint of design where the canvas width/height are variables sometimes works and sometimes doesn't.
12:52
Not sure what the lesson is, it's just interesting that something can be highly customizable along a fairly rich axis and then totally locked down along such a simple axis.
Avatar
nakst Dec 16, 2021 12:52 PM
I think discussing user interfaces of software is quite relevant to all this. One thing that is commonly brought up as an argument in favour of command line tools is that it is often very simple to compose ("pipe") applications to achieve a greater purpose. But with graphical user interfaces the axis of flexibility is quite different: instead the user is treated to things like customizable keyboard shortcuts, or customizable toolbars, menus, etc. (edited)
12:53
There is a lot more flexibility within a single application, rather than flexibility in the connections between applications.
Avatar
bvisness Dec 16, 2021 12:54 PM
The ability for an application's data to connect with other applications is pretty big as well though - it makes the application much more flexible in terms of workflows that use it
12:54
in GUI software you see it more with copy-paste
Avatar
nakst Dec 16, 2021 12:54 PM
I was also interested in this utility: https://www.nirsoft.net/utils/sysexp.html, which lets you extract out the data from a standard Win32 list view and save it as a XML.
Avatar
Avatar
nakst
I was also interested in this utility: https://www.nirsoft.net/utils/sysexp.html, which lets you extract out the data from a standard Win32 list view and save it as a XML.
bvisness Dec 16, 2021 12:55 PM
That's interesting, and I was actually pondering browser extensions as I prepped for this too. That's a world where lots of things are possible because applications use a common document structure.
12:55
Seems like a similar thing.
Avatar
Avatar
bvisness
The ability for an application's data to connect with other applications is pretty big as well though - it makes the application much more flexible in terms of workflows that use it
Allen4th Dec 16, 2021 12:55 PM
This is why data formats are key - deeply flexible software is made possible by having input/output data that is well defined and commonly used.
dion 1
Avatar
Avatar
nakst
I think discussing user interfaces of software is quite relevant to all this. One thing that is commonly brought up as an argument in favour of command line tools is that it is often very simple to compose ("pipe") applications to achieve a greater purpose. But with graphical user interfaces the axis of flexibility is quite different: instead the user is treated to things like customizable keyboard shortcuts, or customizable toolbars, menus, etc. (edited)
bvisness Dec 16, 2021 12:56 PM
You mention customizable keyboard shortcuts, toolbars, menus, but those are actually quite rare these days
Avatar
nakst Dec 16, 2021 12:57 PM
I plan to make those standard features for all native Essence applications :)
Avatar
bvisness Dec 16, 2021 12:57 PM
it seems like it used to be the expectation, and to some extent the norm, that you could customize those things (edited)
Avatar
nakst Dec 16, 2021 12:59 PM
Another idea I had was: imagine if you could drag a Lua script into the toolbar of an application, and when you click it, it is able to automate the UI of that application through a standard interface. But then I realized that this is basically what browser bookmarklets are!
13:01
This is similar, but different to browser extensions; browser extensions are expected to sit in the background silently changing some aspect of the web experience, but bookmarklets are like a button that the user owns and can call upon to perform a specific custom action as needed.
Avatar
bvisness Dec 16, 2021 01:01 PM
Well and what makes the bookmarklet possible is that the presented structure of the UI is actually another "interface" for things to connect with
13:02
people are gonna be mad when the takeaway from this fishbowl is "use retained-mode guis" 😈
Avatar
nakst Dec 16, 2021 01:02 PM
there should be a key on everyone's keyboard that is dedicated to calling up a little program that you maintain yourself
Likes
106
13:03
I really like the concept of the user having their own buttons in a toolbar, or their own keys on a keyboard.
13:04
It's a much more richer way of the user expanding their software and their workflow, than enabling plugins that run in the background.
13:04
(Sorry for going on a bit of a UX tangent, there πŸ˜… )
Avatar
bvisness Dec 16, 2021 01:04 PM
that's the whole reason we do these fishbowls
Avatar
demetrispanos Dec 16, 2021 01:04 PM
I like the "scriptlet-as-primitive" idea a lot
13:05
so then each Essence app would expose some data structure (including functions) to the OS as scriptable
13:05
and you just drag a lua script onto the application window, the OS does the rest
πŸ‘ 1
Avatar
Avatar
demetrispanos
so then each Essence app would expose some data structure (including functions) to the OS as scriptable
bvisness Dec 16, 2021 01:06 PM
it seems though like much of the power of that comes from ambient things about the app, and not extra work on the developer's part
13:06
Apple has had their Automator thing forever and it never seems to get much use or support
☝️ 1
13:06
they have Shortcuts on iOS now with seemingly similar results, although they made the smart decision to hook into the share sheet system
Avatar
Avatar
nakst
I really like the concept of the user having their own buttons in a toolbar, or their own keys on a keyboard.
Rudy Dec 16, 2021 01:05 PM
how would you consider this to be different from apple's touchbar?
Avatar
Rudy Dec 16, 2021 01:06 PM
and 90% of people disliked the touchbar
Avatar
Avatar
Rudy
how would you consider this to be different from apple's touchbar?
nakst Dec 16, 2021 01:07 PM
I was under the impression that the contents of the touchbar were primarily restricted by the application developer?
Avatar
demetrispanos Dec 16, 2021 01:07 PM
that was my understanding as well
Avatar
Avatar
nakst
I was under the impression that the contents of the touchbar were primarily restricted by the application developer?
Rudy Dec 16, 2021 01:30 PM
i believe there were tools available to customize the bars to run any application or macro of your choosing
13:30
i had a co-worker i saw do this
Avatar
bvisness Dec 16, 2021 01:10 PM
it seems to me like you need some kind of standard structure that the application already uses, that people can hook into and use for themselves
13:10
for browser extensions it would be the DOM, for windows I guess it's something something XML
13:11
what's interesting to me is that a lot of these user-facing things like toolbars and whatnot seem pretty orthogonal to other aspects of customization
13:12
like an app can have a plugin system, but if the platform provides custom toolbars, then that's just another way for the app (and any plugins) to present themselves
Avatar
Avatar
Allen4th
This is why data formats are key - deeply flexible software is made possible by having input/output data that is well defined and commonly used.
nakst Dec 16, 2021 01:13 PM
Since you're working on Dion, could you explain some of the reasons why it can be important to have a common data format to share across different domains?
Avatar
bvisness Dec 16, 2021 01:13 PM
going back to those layers / interfaces I was talking about before, apps and platforms provide interfaces at all levels - toolbars and windows for the end-est users, options and config for power users, plugin systems for developers
13:13
maybe if you want to make really flexible software, you just need to think about providing specific affordances at all levels
13:16
(did we lose allen for now)
Avatar
Voran Dec 16, 2021 01:18 PM
(I think so)
Avatar
Avatar
bvisness
maybe if you want to make really flexible software, you just need to think about providing specific affordances at all levels
nakst Dec 16, 2021 01:19 PM
Kind of like how Windows has the control panel for the end-user settings, and then the registry for more power user stuff.
13:20
But once you get to levels like the registry, you then start having to share the space with applications storing internal persistent state, which were never intended to be modified by a human.
13:21
Which is a little different to the Unix philosophy, where everything in /etc is theoretically up for the user to configure.
Avatar
bvisness Dec 16, 2021 01:21 PM
yeah, and that certainly gets weird
13:22
and none of that is probably what people would consider a good design practice these days, as we move toward applications being less trusted
13:22
although obviously apps could have their own isolated "registries" and still have the same problems, I suppose
13:23
Since this has been going for nearly 2.5 hours now, I feel we should start considering some more concrete takeaways
13:23
we've certainly covered a lot and if possible I'd like to try and synthesize a few points
13:24
are there any main points that jump out to any of you? otherwise I have some ideas for how we might go ahead
Avatar
nakst Dec 16, 2021 01:25 PM
You can go ahead!
Avatar
bvisness Dec 16, 2021 01:25 PM
There are obviously lots of ways you can make your software "flexible" - from resizing windows all the way down to heavy modification of the system
13:26
I don't know that we can prescribe any of them; it seems like that will depend heavily on the specific program (edited)
13:26
but assuming you want to provide flexibility for a certain type of user - what are some specific things we can consider?
13:26
like for example if I want to provide a platform for developers to extend my software in the future
13:26
what should I be thinking about?
Avatar
Allen4th Dec 16, 2021 01:27 PM
Okay, sorry for the blip there I can try to answer that question if you'd still like to go down that road.
Avatar
bvisness Dec 16, 2021 01:27 PM
by all means go down that road
Avatar
Allen4th Dec 16, 2021 01:30 PM
It's a bit of a hard topic to unpack in a short way. One angle is that I think looking at things in terms of data formats/types and the arrows that transform data or transport that data is a more first-principles approach. And there's plenty of flexibility to software viewed from the lens without ever having to talk about plugins or customizations.
Avatar
Allen4th Dec 16, 2021 01:31 PM
Another angle is to take a look at how a "plugin" interacts with the core, or how they interact with other plugins, and see that really what they're doing is bringing in new "arrows" to the program. The reason they can't just be separate programs is because the cost of serializing and communicating data would be prohibitive.
13:32
So a plugin is what you get when you want to take an arrow that already exists, and compose it with another arrow, but also need to optimize the flow of arranging that composition.
Avatar
bvisness Dec 16, 2021 01:32 PM
...we might need a drawing for this πŸ˜›
Avatar
Allen4th Dec 16, 2021 01:33 PM
I think it's worth bringing up because it can sometimes be tempting to overcomplicate things. For instance does an image editor need a plugin that could actually just be a different image editor? If they can both load and save the same file what's the difference?
13:33
In that case the difference is that the standard formats for images generally are too underpowered. If you want to preserve layers, the issue is each editor has it's own format for that feature.
13:34
If a format existed for images with named RGBA layers, could you get closer to composing all the capabilities of two different image editors without them needing to "plug together" at all?
13:35
Like I said, hard to unpack, maybe that did the trick, maybe it didn't but I think that's the best version of that idea that I have in me right now.
Avatar
bvisness Dec 16, 2021 01:37 PM
Sure, so in the case of programs that work with images, the lack of a common acceptable format makes it difficult for these programs to exist separately, and instead you're incentivized to make one a "plugin" for the other?
Avatar
Allen4th Dec 16, 2021 01:38 PM
Right. Basically a plugin "is" a program. I think @nakst could chime in to tell me if this perspective really makes sense. But I tend to see an OS as: a program that knows how hardware works and has a strong plugin system - those plugins are the userspace applications.
πŸ‘ 1
Avatar
Rudy Dec 16, 2021 01:40 PM
i could see that as an effectual metaphor πŸ€”
Avatar
Allen4th Dec 16, 2021 01:41 PM
In the same way a plugin to Paint .NET is like a "program" of the flavor defined by Paint .NET. Those programs get invoked when I hit a button in the toolbar, and they have access to the API provided by Paint .NET. By exchanging data through an API instead of through a format, Paint .NET gets an extra layer of abstraction. They can change their internal data structures as long as the APIs still work in equivalent ways. But the downside is now the only programs that can work with their layer format are the ones written to their API. If you make a really robust data format definition, then the user space applications can cooperate just through the standard APIs of an OS.
Avatar
rxi Dec 16, 2021 01:46 PM
Have we touched on the idea that flexibility in software tends to be a shift of the burden of correctly designing the software from the developer onto the user? (sorry, got here a bit late)
Avatar
Voran Dec 16, 2021 01:47 PM
I don't think we really have
Avatar
bvisness Dec 16, 2021 01:47 PM
To some extent that was one of the takeaways of the config fishbowl, but we haven't touched on it much here today
13:47
and I'm curious how you apply that idea to your own work
Avatar
Avatar
rxi
Have we touched on the idea that flexibility in software tends to be a shift of the burden of correctly designing the software from the developer onto the user? (sorry, got here a bit late)
demetrispanos Dec 16, 2021 01:50 PM
this was indeed my original thesis on the previous fishbowl about "configuration", that it is usually an excuse to avoid design responsibility
Avatar
rxi Dec 16, 2021 01:51 PM
ah. I started typing some stuff but it sounds like it might have all been covered in that discussion in that case πŸ˜„ I don't want to end up rehashing it all
Avatar
demetrispanos Dec 16, 2021 01:51 PM
no we haven't touched this much yet
13:52
except in discussing how extensibility in DAWs etc. is essential because of the sheer range of things people might want to do, which is impossible for a single design to cover
13:52
so in some sense it's a question of whether it is possible/good for the designer to take the responsibility or not
Avatar
bvisness Dec 16, 2021 01:53 PM
to pick one specific project of yours - how would you say that idea shows up in the design of lite?
Avatar
rxi Dec 16, 2021 02:00 PM
interestingly not so much in lite, such that it relinquishes almost all the responsibility of choice onto the user (though does try to enforce a deliberate philosophy) but in this context the user would typically be a software developer so it's a little different to if it was something like a piece of photo editing software. I view lite as something akin to a large python script; it's meant to be something you modify quickly and without too much concern and if things break hopefully the whole thing is small enough that you'd have a good understanding of why -- the plugin system is based around simply monkey patching lua functions of which the editor's core is built from (with exception of the lower-level rendering and I/O stuff)
14:02
this would be at the end of the spectrum closer to complete flexibility which at its most extreme would be a C compiler paired with a text editor, where you'd have flexibility to the point of being able to write any software. I think it's important to consider the faults of this freedom when considering flexibility at all, as presumably the faults of the extremity would apply to anything though to a much lesser extent
Avatar
demetrispanos Dec 16, 2021 02:03 PM
I think, perhaps, there's a difference here between neglecting design responsibility vs it being out of scope
πŸ‘ 1
14:03
for example if I make a spreadsheet program for you, whether or not you make good financial decisions with it is out of scope
14:04
I'm not leaving a "hole" in my design for you to fill, I'm just filling a portion of the space
14:04
whereas if I make an application UI with a bunch of widgets and I don't try to reason about how those widgets should be laid out, then I am leaving a "hole" in my design
14:05
I enclosed the space of "there are widgets laid out somehow" but refused to put order into that space
14:05
possibly because I thought "the user will configure it as they see fit"
Avatar
bvisness Dec 16, 2021 02:07 PM
Sure; one is clearly the domain of the program and one is not
14:07
What value is it to a user to decide how widgets are laid out? That’s not the point
Avatar
demetrispanos Dec 16, 2021 02:09 PM
to flip this framing around, you could then think about extensibility as how the designer sets the stage for downstream design decisions
14:09
I did A and B, which means you can do C and D (that build on, but don't overlap A and B)
Avatar
Avatar
demetrispanos
whereas if I make an application UI with a bunch of widgets and I don't try to reason about how those widgets should be laid out, then I am leaving a "hole" in my design
rxi Dec 16, 2021 02:11 PM
can't it be unclear where that line is? Even with this example it is a user choice in a lot of software -- eg. being able to rearrange the panels in photoshop, or re-order the columns on the list view of the task manager. Should I be allowing the user to change the UI to that degree?
Avatar
demetrispanos Dec 16, 2021 02:12 PM
the user can re-arrange photoshop, but photoshop has a set of initial opinions
Avatar
Voran Dec 16, 2021 02:14 PM
You're allowing users to make design decisions, but these are design decisions that you've already made and implemented a default for. Because the premise of Photoshop is not rearranging the panes, but editing images, the ability to edit positions of things is not the thing that you should be delegating purely to the user.
Avatar
Voran Dec 16, 2021 02:15 PM
So my line would be where the purpose of what you're providing is the ability to change something, it is not important to make a default decision, but for something which is an addition to the thing you're providing, you need to provide a default decision even if you allow people to make their own decision in that space
Avatar
Avatar
demetrispanos
the user can re-arrange photoshop, but photoshop has a set of initial opinions
rxi Dec 16, 2021 02:15 PM
that it can be changed from the default changes the default itself, though. How much thought and time and research was put into the default configuration? If I open photoshop and move a panel somewhere because it's what I was used to in paint.net, though this was an initial convenience this could end up being detrimental in the long term to the general workflow. This feels in general an issue with flexibility; in that the user might be too eager to change things rather than getting used to the defaults, and presumably there was a good reason those defaults were picked
Avatar
Avatar
rxi
that it can be changed from the default changes the default itself, though. How much thought and time and research was put into the default configuration? If I open photoshop and move a panel somewhere because it's what I was used to in paint.net, though this was an initial convenience this could end up being detrimental in the long term to the general workflow. This feels in general an issue with flexibility; in that the user might be too eager to change things rather than getting used to the defaults, and presumably there was a good reason those defaults were picked
demetrispanos Dec 16, 2021 02:16 PM
I agree that when you add flexibility you add the temptation to do "noise" edits
14:16
pointless micro-changes that make your setup non-standard but not any more useful to you
14:16
with great power, great responsibility etc.
Avatar
Voran Dec 16, 2021 02:21 PM
As a counterpoint to the users shooting themselves in the foot, sometimes the user knows better than the developer what is most effective for them; to use the aforementioned comparison of user-space programs as 'plugins' for an OS, it's very unlikely that the OS is going to provide defaults that are perfect for everyone. (edited)
Avatar
Avatar
demetrispanos
pointless micro-changes that make your setup non-standard but not any more useful to you
bvisness Dec 16, 2021 02:21 PM
I feel there are ways you can constrain this with e.g window docking, tabs, that kind of thing. I’ve seen some apps that seem to have a full internal window system for no reason, but there’s a middle ground.
14:22
But at the same time it may just be noise.
Avatar
demetrispanos Dec 16, 2021 02:22 PM
yeah, you may have heard me talk about a design being "floppy" before
14:22
that is, there is too much granularity of choice relative to granularity of utility
14:23
my common example, which related to flexibility, is web page layout
14:23
it makes 100% sense to have accommodation for widescreen, common desktop width, common tablet width, common phone width, and then some extreme fallback
14:23
it makes (IMO) 0 sense to have continuously-variable adaptation
14:24
similarly, moving your UI panes around makes a lot of sense, but having pixel-level precision of where you place them does not
14:24
there's no plausible reason to have something almost docked but still 1-2px off being docked
14:25
so I think there's a lot of value in reducing the complexity of the input space down until it resembles the granularity of the utility you get out of changes
πŸ‘ 1
Avatar
bvisness Dec 16, 2021 02:26 PM
for sure
14:26
I do want to highlight a point rxi mentioned, which is that users may just want to change things right away instead of learning
14:27
Which is at least a strong factor to keep in mind when designing stuff, because I know that impulse
14:29
and actually we could apply this lesson about "floppiness" back to lower levels of the software too
14:29
for example, if designing a plugin interface, how granular does your interface need to be
14:30
allowing things to be too granular may just be poor utility for users
14:31
that may apply to what Allen was saying about 4coder, and how 4coder being an "editor template" is just not that useful a goal.
Avatar
demetrispanos Dec 16, 2021 02:32 PM
yeah 4coder gives you extreme/unlimited granularity in what you can do, which is both a strength and a barrier to entry
14:33
the more granular a decision you require from your user, the fewer people will be able to even express that input never mind make the choice wisely
Avatar
bvisness Dec 16, 2021 02:33 PM
well, as long as you're aware of that tradeoff, hopefully you can make a smart decision about what is best for your software
14:34
in keeping with the advice from the config fishbowl though, maybe it's best to start more opinionated and relax it later.
Avatar
demetrispanos Dec 16, 2021 02:34 PM
yes this connects to what I was saying earlier about "board game rules"
14:34
a common reference point that, maybe, nobody actually uses in practice ... but it is the reference point from which everything else is expressed
14:34
"I use XYZ but instead of rule R I use rule Q"
Avatar
bvisness Dec 16, 2021 02:35 PM
as opposed to a blank board, a marker, and a bunch of generic pawns? πŸ˜›
Avatar
demetrispanos Dec 16, 2021 02:35 PM
right exactly, as opposed to a complete vacuum
Avatar
Voran Dec 16, 2021 02:35 PM
"You can invent millions of games with this!"
Avatar
bvisness Dec 16, 2021 02:36 PM
that makes a lot of sense, and I always like to have more analogies πŸ™‚
Avatar
demetrispanos Dec 16, 2021 02:36 PM
I know it sounds like a stretch, but really the soren johnson talk about board games I posted in -audience channel is relevant
Avatar
bvisness Dec 16, 2021 02:36 PM
actually could connect to the points about modding too, oh boy
Avatar
demetrispanos Dec 16, 2021 02:36 PM
and we all know the concept of "house rules" for board/card games
14:36
"in this house, we play monopoly with free parking money"
14:37
not actually a rule, but a very widely used modification
Avatar
bvisness Dec 16, 2021 02:37 PM
we do see lots of great game ideas starting as mods instead of stuff from scratch... thonking
14:38
now I'm getting way off track
Avatar
demetrispanos Dec 16, 2021 02:38 PM
I don't know if it's really that far off track
14:38
WP never set out to make a help desk system, and yet you made it one
Avatar
bvisness Dec 16, 2021 02:39 PM
and a better one than the turnkey ones in fact
14:39
well Boy Is That Interesting
14:40
I guess WP did start out with a heavier emphasis on blogs and then morphed into the more general system it is today, without losing that core idea of a blog (edited)
☝️ 1
Avatar
Voran Dec 16, 2021 02:43 PM
I think mods start to turn into games when the author no longer associates the mod with the base game it was originally associated with; I've usually seen this happen in cases where the base game isn't able to live up to what the mod's idea can deliver, and when the mod author has enough support to their idea to make the move to separate it. Which I think makes the point that it can be pretty important what you deliver as a baseline in an extensible program
Avatar
bvisness Dec 16, 2021 02:44 PM
yeah, but the game still serves as an important starting point even if it was never really intended to be modded
14:45
maybe we can dig into this more elsewhere but we are nearly at the 4-hour mark (!) and I think we should try to respect everyone's time and wrap up
14:45
so - what do we think are some takeaways from all this?
14:46
For one, I think we have a re-affirmation that design is important and you should consider what flexibility is valuable to your users.
14:47
I like Demetri's analogy of "holes" in the design - what space do we expect users to fill, and what is reasonable to expect
Avatar
Allen4th Dec 16, 2021 02:50 PM
I think the idea of the spectrum I brought up initially ended up even more reinforced by several of the other ideas we discussed. The low level vs high level interfaces, & the issues regarding handling conflicts between plugins both looked to me like they also correlate to this vague notion of a gradient I already had.
Avatar
bvisness Dec 16, 2021 02:50 PM
Yeah, for sure.
14:53
I think some concrete points of advice I might choose are: - You will likely have many different kinds of users, from developers to complete normies - consider building ways for each of them can customize their experience (and for developer systems to feed into normie systems) - If you want to make your software extensible, strongly consider how to handle conflicts (and maybe see if you can constrain plugins to avoid conflicts) - Don't make your software "floppy" - for any interface you build at any level, try to make decisions for those users that benefit them.
14:55
Is there anything you would add?
14:56
(surely I missed an important point from these four hours of conversation)
Avatar
demetrispanos Dec 16, 2021 02:59 PM
overlapping a bit with your points, I'd say - keeping in mind the ecosystem/"food-chain" of extenders, as seen with WP, DAWs, Photoshop - keeping in mind scope of responsibility, and making sure you don't leave holes within your responsibilities - thinking about granularity of modification, from "change anything at any granularity" to "slap together some plugins"
Avatar
bvisness Dec 16, 2021 03:00 PM
yeah for sure
15:01
well we have precisely nailed the 4-hour mark now so I think that is as good a time as any to call it!
15:01
Thanks so much to all the participants for another wonderful conversation! I always love being able to point back at these and find useful insights for later.
15:02
I would give my usual shtick about looking at the pinned messages, but if you're reading this, you already know how that works :)
15:02
Thanks all for following along, and if you want to continue the conversation, please continue in #fishbowl-audience or any of the other channels!
Avatar
bvisness May 24, 2022 02:48 PM