A tight iteration loop is the only solution I've seen for building high quality UI/UX. Embrace that it's going to be terrible the first few times and plan for this.
We could save on cost per iteration by avoiding the layout and styling pass until the very end. These interfaces are about communicating information. Plain text and basic form submissions work just as well as anything else when you're still trying to design site map and purpose of each page.
There's a direct correlation between the customer-developer distance and the number of iterations required to achieve an acceptable result. You can dramatically reduce the churn by requiring daily builds or screenshots to the customer. If your development process can't support the idea of iterating like this, you need to find one that can. If the actual customer can't handle that amount of traffic, create internal proxies or advocates.
The best functional specs for a UI have come from business people building their own in excel. At a minimum they will have some idea of layout and what information should be displayed on which screens.
This also lets them focus on the core information, not the styling. Building GUIs on the web, there are infinite ways to style every UI element and more attention goes to that then the actual interaction.
I'd disagree with that. People build wild shit in Excel that only they can understand. It makes sense to them because they built it. Nobody else can use it.
Not all spreadsheets are like this but there are absolutely no guardrails to prevent it.
Building a good GUI takes thoughtful design by someone who understands what makes a good GUI and what the goals of the interface are from the user's perspective. Someone who can make it look like what the user is already used to, even if that isn't "beautiful" UI or doesn't follow the latest trends in whitespace and widget appearance.
>I'd disagree with that. People build wild shit in Excel that only they can understand. It makes sense to them because they built it. Nobody else can use it.
I think the parent comment is talking about using excel as a grid based layout tool to show how they want the app to look, not implying that you should build GUIs based upon the convoluted stuff people build in excel to avoid having a dedicated app.
>thoughtful design by someone who understands what makes a good GUI and what the goals of the interface are from the user's perspective.
This is critically overlooked too many times.
>People build wild shit in Excel that only they can understand.
I resemble that remark ;)
In one respect, that's what excel is really helpful for.
With no other GUI, the default of a mouse on an electronic spreadsheet is one of the oldest and most familiar to those who need wild math to be accomplished immediately without delay, in spite of its drawbacks. And quite popular, most likely by "default".
Remember before they had a gooey all they had was an ooie.
Should have seen what it was like before people had a mouse ;)
How about back when almost all prospective users wanted computerized calculation abilities, but computers were so uncommon none of them had ever used a computer (other than a first-generation game console), yet. They were of course well aware of what computers could do but wouldn't be actually touching one until sometime in the (very near) future.
They were looking forward to it which was a good sign, but when you handed one to them, the ideal situation was if they could simply be directed to the power button on the device. Everything else needs to logically follow and be completely intuitive to those familiar with the domain, with no further guidance or support from the author. Budding operators who were absolutely computer illiterate must be able to get it right the first time. Would you settle for anything less when it's somewhat confusing industrial high-stakes computation under the hood?
That's just text but when you think about it, even the most complex logic & code might benefit from first making sure it can be well-navigated from a text-based UI, before adding the desktop & mouse to complete the "picture".
Remember, a text-based UI must ask the right questions, or there will be no correct response.
Any other UI which doesn't ask the same questions in one way or another, is unlikely to provide the same correct response.
> People build wild shit in Excel that only they can understand.
If these people are the customer, then a wild shit xlsx file is perhaps one of the better possible scenarios for requirements gathering.
I've been in this exact situation. Client provides their current workflow, implemented in a spreadsheet.
The problem is they make significant concessions in their design to fit the tabular model of spreadsheets. It can be really warping, not only to GUI but also the underlying data model. Then you show them what a relational data model is capable of, and (hopefully) blow their mind.
When you get to relational models, the amount of UI you can quickly build around the django admin is staggering... if you stay in the guardrails.
> Building GUIs on the web, there are infinite ways to style every UI element and more attention goes to that then the actual interaction.
AKA bike-shedding, or "Law of triviality", just to put a name on this pretty common occurrence.
It’s way easier to build a GUI for one user than it is for millions of users.
It is also my experience that this is the way to go, and it also matches my theoretical view aka prejudices.
It seems to me that one of the things making this approach difficult is that we lack (design) tools that support iteration between design and development.
Modern tools make going from design to development easier, but it is still largely a one-way street. And one that's been made worse by recent trends towards building the UI in code, rather than from data. There are good local reasons for doing this, but it does seem to push even more strongly towards a waterfall-y development process (design does pretty mockups, throws over wall)
For a long while now, what seems to me a reasonably simple project (re-creating the UI of a drawing program and making it straight-forward to re-create program state with annotations/highlighting) has been stalled because I can't find a design tool which works better than just placing the screen grabs in a vector drawing program and annotating by hand....
I'm about at the point where I'm going to just code everything up in METAPOST....
Makes me wish for Display PostScript again....
What made display postscript so great? I have only seen it mentioned in frothy marketing terms, not an in depth discussion of its approach, why it worked well, and how that compares to other alternatives.
You have to understand or have experienced how fragile the early graphics programs were --- basically a .eps file would be a black box of PostScript code, and would have a pixel image preview used on-screen (a classic gag was to use a resource editor to change the pixel preview) --- whether or no it would actually print/image correctly was something one wasn't certain of until holding the actual output in hand, and even then, it only held for a specific PostScript rasterizer/job setting. Sure, it was okay 99.99% of the time, but that 0.01% could be disastrous.
Display PostScript meant that the system used for on-screen display was the same as for actual printed output --- I _never_ had a job on my NeXT Cube fail to print to match the on-screen version. Moreover, one could do cool DPS programming such as custom strokes and fills in Altsys Virtuoso.
These days, PDF and Quartz (née Display PDF) mostly address the reliability (and presumably it's gotten even better since I left the industry), but I miss the programmability. Hopefully, using METAPOST will let me get some of that back.
Thanks, I'm starting to understand. So Display Postscript was useful because it let you know that what you put on the screen as a programmer would be what's printed?
And it allowed for cool graphics effects like custom strokes and fills.
So that primarily matters for stuff you want to print. It wouldn't matter as much for assembling a UI.
How does windows handle this stuff?
As a graphic designer/compositor/typesetter.
Windows uses (used?) WMF and pixels for on-screen display which would then either be used for printout via some conversion process, or a parallel construction would be maintained for output and the need to keep that in synch would often result in slight differences in output --- maybe there were other approaches.
One of the neat things in Display PostScript was one could use Interface Builder to add a print button to any window to get the underlying PS code.
In theory, you could also capture screenshots as high-quality vector graphics.
In practice that's what you could do with HyperLook on NeWS:
SimCity, Cellular Automata, and Happy Tool for HyperLook (nee HyperNeWS (nee GoodNeWS))
HyperLook was like HyperCard for NeWS, with PostScript graphics and scripting plus networking. Here are three unique and wacky examples that plug together to show what HyperNeWS was all about, and where we could go in the future!
https://donhopkins.medium.com/hyperlook-nee-hypernews-nee-go...
HyperLook SimCity Demo Transcript
This is a transcript of a video taped demonstration of SimCity on HyperLook in NeWS.
https://donhopkins.medium.com/hyperlook-simcity-demo-transcr...
Discussion with Alan Kay about HyperLook and NeWS:
Alan Kay on “Should web browsers have stuck to being document viewers?” and a discussion of Smalltalk, HyperCard, NeWS, and HyperLook
https://donhopkins.medium.com/alan-kay-on-should-web-browser...
Absolutely, since NeWS was largely the same concept, though with more intelligence on the PostScript side.
PostScript is great for user interfaces!
I've written lots and lots of user interfaces in PostScript. Just not Display PostScript. NeWS was a lot better for making interactive user interfaces than Display PostScript, and it came out a lot earlier.
https://en.wikipedia.org/wiki/NeWS
The Story of Sun Microsystems PizzaTool (entirely written in PostScript):
https://donhopkins.medium.com/the-story-of-sun-microsystems-...
PizzaTool PostScript Source code:
https://www.donhopkins.com/home/archive/NeWS/pizzatool.txt
I also worked on HyperLook, which was like HyperCard for NeWS with colorful PostScript instead of black and white pixels, plus networking:
https://medium.com/@donhopkins/hyperlook-nee-hypernews-nee-g...
Discussion with Alan Kay about HyperLook and NeWS:
https://medium.com/@donhopkins/alan-kay-on-should-web-browse...
Then I used HyperLook to implemented the user interface for SimCity, programming the entire interactive user interface in NeWS PostScript -- Display PostScript couldn't do anything like that:
https://donhopkins.medium.com/hyperlook-simcity-demo-transcr...
Several years before that, I worked on the NeWS version of Gosling Emacs at UniPress, with multiple tabbed windows and pie menus. (Gosling also wrote NeWS, and much later Java.):
HCIL Demo - HyperTIES Authoring with UniPress Emacs on NeWS:
https://www.youtube.com/watch?v=hhmU2B79EDU
The source code for UniPress Emacs 2.20 recently surfaced! (We called the NeWS version of Emacs "NeMACS" of course.):
https://github.com/SimHacker/NeMACS
Here's the PostScript code of the NeWS Emacs display driver:
https://github.com/SimHacker/NeMACS/blob/main/src/D.term/Trm...
And lots of other fun interactive PostScript user interface code we shipped with NeMACS:
https://github.com/SimHacker/NeMACS/tree/main/ps
Pie menus:
https://donhopkins.com/home/archive/NeWS/win/pie.ps
Tabbed windows:
https://donhopkins.com/home/archive/NeWS/win/tab.ps
I used UniPress Emacs to develop an authoring tool for the NeWS version of HyperTIES, an early hypermedia browser, which we developed at the University of Maryland Human Computer Interaction Lab.
Designing to Facilitate Browsing: A Look Back at the Hyperties Workstation Browser:
https://donhopkins.medium.com/designing-to-facilitate-browsi...
HyperTIES Discussions from Hacker News:
https://donhopkins.medium.com/hyperties-discussions-from-hac...
I also worked on the Gnu Emacs 18 NeWS driver for The NeWS Toolkit:
https://donhopkins.com/home/code/emacs18/src/tnt.ps
A visual PostScript programming and debugging environment: The Shape of PSIBER Space: PostScript Interactive Bug Eradication Routines — October 1989:
https://donhopkins.medium.com/the-shape-of-psiber-space-octo...
PSIBER source code:
https://www.donhopkins.com/home/pub/NeWS/litecyber/
NeWS was architecturally similar to what is now called AJAX, except that NeWS more coherently:
1) Used PostScript CODE instead of JavaScript for PROGRAMMING.
2) Used PostScript GRAPHICS instead of DHTML and CSS for RENDERING.
3) Used PostScript DATA instead of XML and JSON for DATA REPRESENTATION.
More on that:
SimCity, Cellular Automata, and Happy Tool for HyperLook (nee HyperNeWS (nee GoodNeWS)):
https://donhopkins.medium.com/hyperlook-nee-hypernews-nee-go...
Here's a comparison of X-Windows and NeWS:
https://donhopkins.medium.com/the-x-windows-disaster-128d398...
Are there any available implementations of this?
I've long wanted to experiment w/ HyperLook (or a successor to it).
You'll need a SparcStation emulator to run it, if not a real SparcStation. I've resisted the temptation because there's so much new code to write that I don't have much time to run old code. ;) Although it would be fun to run it in an emulator 1000 times faster than it ever ran on real hardware!
Here are some links I've found:
Unix & Linux: How to emulate the NeWS window system?
https://www.youtube.com/watch?v=9ZhZqfC8sC4
Sun OpenWindows 3.0 (NeWS!)
https://www.youtube.com/watch?v=Kl08TvO0Bgw
Looks like this is running on a real Sun workstation, not an emulator. He shows RasterRap and The NeWS Toolkit demos, but not PizzaTool.
Good luck! Let me know if you get something working.
Not quite willing to dig out my Sparcstation 5 and find the mouse and matching metal mousepad...
Was more hopeful that someone had created a new implementation of that environment.
Let's turn this around --- for vector-graphic oriented development work what current environment would you recommend trying?
People you should be paying careful attention to this. You could be living 40 years in the future. Instead, we're were we are and rapidly ossifying.
I'd like to find a nicer development environment which made use of such options.
Apple killed off HyperCard, Runtime Revolution became LiveCode which when opensource, then closed source and now is only available for monthly license fees.
PythonCard never got to 1.0 and hasn't been updated in almost two decades...
I'm currently doing all my development in:
(Python-enabled version of OpenSCAD) but the only user-facing options are the Customizer which is quite limited, and a repository of files which users can access --- unfortunately, trying to bring up a canvas or UI window crashes the app.
Since you already seem to be a fan of Python, how about CardStock? https://cardstock.run
There's also Decker, which by default is tightly sandboxed but has opt-in APIs for filesystem IO, invoking external processes, etc: http://beyondloom.com/decker/
Is there any place where one could look up screenshots of this? I'd want to see what is capable with this technology
This has been my experience as well.
Something about the human brain just makes it very bad at observing a mocked-up screen layout and understanding how well it works in practice. Apply that to an entire application with multiple functions and the problem increases exponentially.
Experience helps speed things up. But rapid iteration with a fast feedback loop is the best practice. Design is not doing the start of the loop, it’s doing the entire loop. Repeatedly.
Predicting video from a still image is a fraught task. Predicting interaction from a linear video is another fraught task.
It would be surprising if someone had the ability to do this.
The fact frequent, repeated contact with the customer isn't the norm is why so many interfaces suck and so many engineers could't design a decent one with a gun to their head (although, frankly, that level of stress might not induce thoughtful design patterns).
Instead engineers get hit with micro view after micro view, and they build it using test flows that don't mimic the real world, and then they all tie it in to create a tangled macro view that's a shit show for the user.
I've been working to bring recurring Shadow Sessions here at my workplace by creating a basic scheduler (which is really the pain point at scale) that just sends you and somebody working in the tooling you're building (we're internal tooling) every three weeks and the feedback is overwhelmingly positive and we're working to expand the functionality a bit.
So, all you out there who want a nice win, set up a little scheduler and get your Product, Design, Engineers, Managers, and TPMs in rotating sessions with actual customers at a lightweight pace with minimal asks to create greater empathy which translates to all of us potentially ending up with better software in the world as a whole.
A fella can dream.
When I do GUI work, it's usually for hobbyist or internal projects. I value quality UI/UX extremely highly. I often get 'analysis-by-paralysis' here because I try to do the design and development in a synchronous single pass. Your comment about tight and rapid iteration being the only solution resonates with me.
One 'trick' I discovered recently was to completely ignore UI design and focus on _formatting_ instead -- the placement of elements in a proper and useable way. Saving the visual aspects of design (widget design, margins, padding, color, animations, etc.) until the very very last step.
My hypothesis is that "good UI" = "good page formatting" + "pretty UI elements".
Any thoughts on this approach?
>GUIs are built at least 2.5 times
Unfortunately what is more often needed is 3.0+ and far too many fall short :\
>"good UI" = "good page formatting" + "pretty UI elements".
Nice to have, icing on the cake, but what I need if it was to be mission-critical is at least 10x better workflow than average these days.
As a child, before I had any concept of software, I just wanted to get something worthwhile out of electronics itself.
I'm so old that most adults didn't have a concept of software either in those days. "Software awareness", that it even exists as an entity of its own has by now proliferated by many orders of magnitude like most other things do not.
One thing that's stood the test of time, if you can make the electronics do something it wasn't doing before, well that might just be remarkable. Maybe even game-changing. Maybe even like never before.
Sometimes you program, sometimes you don't.
In the right balance it can end up quite a system.
Decades ago for my own purposes I separated the UI from the rest of the code, and this was of course a monolith with line numbers. The equivalent of punch cards, but when you think about it the UI could be in the final 25% of the deck of cards, and quite easily physically replaceable in that media form factor. Plus, if you're transparent about it, it can really come in handy sometimes to deal from the bottom on the deck. GOTO can easily be your friend if you know how to accommodate each other ;)
But code also doesn't necessarily have to have any electronics involved.
Software alone can be considered more independent of constraint by a "system", because it can be so abstract.
Doesn't have to be so abstract, but that is a serious option sometimes.
The ultimate would be pure software which is not part of any other "system" at all.
I'm so out-of-date I'll probably just stick with the electronics ;)
>Any thoughts on this approach?
Sorry, my head's a blank ;)
Yes, this is part of Information Architecture
I agree. Layout and styling should be completely decoupled and be made orthogonal to another. Basically, by default styling should exclusively be theming.
> A tight iteration loop is the only solution I've seen for building high quality UI/UX. Embrace that it's going to be terrible the first few times and plan for this.
The problem I have seen is that all the GUI toolkits weld themselves way too hard to the code.
Consequently, when you want to adjust the UI, you always have to rewrite big chunks of the code.
Very interested to hear about a high quality UI as I have never encountered one
CAD Software. There is CAD vs CAD esports. https://www.youtube.com/live/C1CqIcfDKbQ?t=1987s It seems dominated by solidworks but other programs (NX, Fusion 360...?) are allowed.
The bloomberg terminal UI.
Some emacs setups. (much more variability than VIM)
Some VIM setups.
The thing that all of these have in common is that they are designed for experts, not for every user. Also each one of those is a custom full platform app (or primarily text based) vs web app.
Conflating beginner tools and expert tools (user-friendliness) is usually where everything go wrong. For most people, Wordpad was enough, Microsoft Word was for when you need a bit more control. But an expert tool is Adobe InDesign where you have the maximum control. And the UI is quite different.
Same when learning to code, a basic text editor like Gnome's Text Editor or Nano is all you need. But an expert will reach out to Intellij's for his project because his needs are more complex.
Another common conflation is graphic design vs application design. Fusion 360 has strong graphic design and meh application design.
Apple used to be very good at this, especially in the pre-iPhone OS X era.
iTunes: https://discussions.apple.com/content/attachment/192853040
Preview: https://www.intego.com/mac-security-blog/wp-content/uploads/...
Garage Band: https://inside.wooster.edu/technology/wp-content/uploads/sit...
Is that last one actually Garage Band? I used to use it a very long time ago and I don't remember it ever looking like that. It does, however, look basically the same as Logic does today. I'm not sure if I'd consider it a good GUI or not.
I would argue Windows Forms somewhere between 3.1 and 95 more or less nailed it.
It's boring, but it's clear.
You got downvoted for the snark, but damned if it ain't a reasonable opinion.
If you read the seminal "Design of Everyday Things" by Norman Rockwell you'll come away annoyed at half the physical _doors_ you walk through... here in 2025.
I've been pushing these terms to help us talk about and design better interfaces at work...
Static Interfaces - Your supermarket's pretty much a static interface. The frame of whatever website you're looking at. These are static. They've very powerful and were pretty much all you had before digital interfaces became ubiquitous. There's an initial learning curve where you figure out navigation, and then for the most part it's fairly smooth sailing from there provided the controls are exposed well.
Adaptive Interfaces - These interfaces attempt to "adapt" to your needs. Google is probably one of the most successful adaptive interfaces out there. A query for "Shoes" will show a series of shopping results, while a query for "Chinese food" will show a map of the restaurants nearby. The interface adapts to you.
I call this narrow adaptive because the query triggers how the UI adapts. I think "wide area" adaptive interfaces where the interface attempts to meet your needs before you've had a chance to interact with the static interface around it are tremendously difficult and can't think of examples of them being done well.
Adaptable Interfaces - This last interface bucket includes controls which allow a user to adapt the interface to their own needs. This may include dragging icons into a particular order, pinning certain view styles or filters, or customizing the look or behavior of the applications you're working with.
Finder, the iPhone's basic UI, terminal, basic music catalog management (e.g. iTunes)... these are interfaces which are created once with an initial curve of varying difficulty to learn and then live on for decades without much change.
Conclusion - The best interfaces combine an intuitive static frame, with queried adaptive elements, and adaptable features to efficiently meet the needs of a diverse group of user flows instead of attempting the one size fits all approach (which leaves 2/3rds of people annoyed).
Another category, searchable interfaces, may fit into one of these or may be it’s own separate category. But tools like MacOS Spotlight or the command palette in some editors are very useful for power users. Having every command available through a minimal set of fuzzy keyboard strokes is a significant productivity boost, while also allowing some degree of discoverability.
As an aside, if anyone at Adobe is reading this, this sort of tool would be an excellent addition to Illustrator, Photoshop, etc. InDesign already has something like it, although that implementation leaves a little to be desired.
Or you can focus on a single class and produce the best UI for that class.
Static Interfaces for the common actions that everyone does. Best as basic utilities in the operating system (Notepad, The calculator)
Adaptive Interfaces where you have a few advanced layouts for people that wants a bit more. (Wordpad, Notepad++, Kate,...)
The expert tools (Blender, matlab, Adobe Illustrator,...) You will have a small userbase, but they're often willing to pay for a good tool that will solve their needs.
Small nitpick, "Design of Everyday Things" is written by Don Norman.
Outside in development helps here too.