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-2a7992b4c797
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-goodnews-99f411e58ce4
Discussion with Alan Kay about HyperLook and NeWS:
https://medium.com/@donhopkins/alan-kay-on-should-web-browsers-have-stuck-to-being-document-viewers-and-a-discussion-of-news-5cb92c7b3445
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-transcript-17f627eab14a
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/TrmPS.cps
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-browsing-a-look-back-at-the-hyperties-workstation-browser-535eab3a3b3c
HyperTIES Discussions from Hacker News:
https://donhopkins.medium.com/hyperties-discussions-from-hacker-news-937d156f0330
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-october-1989-19e2dfa4d91e
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-goodnews-99f411e58ce4
Here's a comparison of X-Windows and NeWS:
https://donhopkins.medium.com/the-x-windows-disaster-128d398ebd47
With that being said, I firmly believe that all software (given that one is not already deeply familiar with the domain) is/can/should be written three times to end up with a good product:
1. Minimal prototype. You throw something together fast to see it can be done, taking shortcuts and leaving out features which you know you will want later(tm).
2. First naive real implementation. You build upon the prototype, oftentimes thinking that there is actually not that much missing to turn it into something useful. You make bad design decisions and cut corners because you haven't had a chance to fully grasp all the underlying intricacies of the domain and the more time you spend on it the more frustrating it becomes because you start seeing all the wrong turns you took.
3. Once you arrive at a point where you know exactly what you want, you throw it all away and rewrite the whole thing in an elegant way, also focusing on performance.
(1) and (3) are usually fun wereas (2) fast becomes a dread. The main problem is that in a work context you almost never are allowed to transition from (2) to (3) because for an outsider (2) seems good enough and nobody wants to pay for (3).
A software engineering book written decades before I was born- my college assigned us the 25th Anniversary Edition- and yet I re-read it every few years and find some new way to apply its lessons to my current problems.
https://moss.cs.iit.edu/cs100/Bentley_BumperSticker.pdf
I've worked in a lot of places where end to end testing is performed manually by a SIT team who absolutely do not like to re-run a test once it's been passed. These people hate the idea of (3) and will overestimate the costs to the PM in order to avoid having to do it.
Every feature every variant ever possible configuration and all future potential states. Don’t care about how it looks or how it feels just put it all there. Build out as much of it as possible, as fast as possible, knowing it will be thrown away.
Then, whittle away. Combine, drop, group, reorganize, hide, delete, add. About halfway through this step it becomes clear what I really should have been striving for the whole time—and invariably, it’s a mile away from what I started out to build.
One I have that, then I think step three stays about the same.
This isn’t really a critique of lean development, but after a decade of trying to do things leanly, I’ve just accepted that it’s not how my brain works
Those devs had spent weeks/months for this app, now they want to throw it all away ?, that means throwing money through windows. Also, the risk that the new app may not work like before, or missing deadline, etc. A safe bet would be reiterating (2)
I think of the three iterations in these terms:
1) You don’t know what you’re doing. So this iteration is all about figuring out the problem space.
2) You know that you’re doing, but you don’t know how to do it. This iteration is about figuring out the way to engineer/design the program.
3) You’ve figured out both what you’re doing and how to do it. So now, just build it.