The accidental tyranny of user interfaces
uxdesign.cc
uxdesign.cc
Then around the mid 2000's, things started to change. GUIs became facades behind which functions were hidden away. All of a sudden, there was no single, logical way (such as browsing through menus) to discover something. You had to keep using the interface until you stumbled onto new functions (or the product team had to breathlessly announce them). And the scripting capabilities, even simple drag-and-drop composable automations, went away.
I can only assume that this is due to the ad-driven nature of computing today. Ads depend on human eyeballs. Scriptable, automate-able UIs reduce eyeballs. Uniform UIs with text labels (like the good old Windows 9x interface) reduce eyeballs. Ability to quickly open up an app, get what you want and get out, reduces eyeballs.
Paying for software doesn't help either. The moment you pay, you signal advertisers that you have purchasing power, and they will pay your product/service provider even more to get at you and your data. I doubt there will be any change until advertising is regulated in some manner.
It seems much cheaper to build and maintain, due to a reduction in parts.
What's Orwellian about it is that a finger must touch a screen. They are not yet picking up biometric information as far as I know. When that day comes, it will indeed enhance security, but add to the surveillance creep.
Tall building are expensive. The taller, the more available floor space to rent. The taller, the more elevators you need. More elevators mean less floor space. People need to move between floors.
Buttons outside means that an algorithm can dispatch elevators most efficiently, combining people who want to go to the same floors, or follow up floors. So the throughput of people thru the building is maximized.
Its tyranny of capitalism. Or the tyranny of efficiency.
For them to build out a real-time feed that tells you the progress would perhaps require a complete change in how these microservices behave (so they can all feed real-time, ongoing data to the client), and not provide any real benefit. The only time I really pay attention to my Linux boot sequence is if something is stuck or an error appears, so I can handle it. Seeing what Google Sheets is doing may be “neat,” but I completely understand why that’s not a good reason to build it out, and it wouldn’t make anyone outside of Google employees more productive.
Well there's your problem, right there.
If you have to implement a pure function by splitting it across multiple services, there is something very, very wrong with your software architecture.
Now, you do need to consider expected timing and weigh it accordingly else you’ll run into the 1-99% takes 1 sec, and then stuck on 99% for 10 min issue… but otherwise.
And if you can’t report that level of progress, then you’ve got other issues (namely that you yourself have no idea what the hell the system(s) is up to and working on at a given moment)
you can have a progress bar that show the milestones + ETA. multiple progress bar + log messages box that shows what the background is doing, or you can just have single disconnected bar that's based on a timer based on what you estimated the task would take etc.
as user: - how do you know if the UI / process is stuck then or just taking ? - how much time is there left, you got other things to do after 5 more tasks like the current one and want to estimate a rough estimate when you'll be done with this.
This discussion is about UX, but your comment shocked me. Seriously, converting a spreadsheet would be a single process if you ran it from your command line. It’s hard for me to imagine why I would invoke several microservices to perform this on a back end server.
Surely a file conversion should not be affected too much by browser differences, it should be a pure function, pure calculation not requiring too many APIs and which doesn't have much to do with rendering.
I would perform each request in a single process: read in the metadata (mainly structure) and then either process each tab sequentially or more likely map the whole thing into memory and spawn a thread for each tab, then write the whole thing out in order.
No need for the overhead of microservices: locating, invoking, transferring data, and synchronizing responses, much less dealing with all the pain of lost connections, abnormal termination and so on.
The largest excel sheet I've worked on is only about 500 MB and (does a quick search of my local filesystem) almost all are less than one MB. So in the (rare) worst case the transmission doesn't justify spreading it around; in the common case there's no benefit.
In 2022, Google Workspace apparently had ~ 3 billion users (8 million of which paying) https://developers.googleblog.com/en/year-in-review-12-aweso... .
Not every solution needs microservices. But also, we have problems today that we did not have solutions for "in the old days".
This kind of task is typically suited to be made into a single thing, you don't want partial conversions hanging around in 'microservices' if something goes wrong.
As for scaling, I'd likely put this in a process definition and run it on the BEAM if I were to make such a product. That way millions of requests per hour can hit my cluster and those that fail somehow will just get cleaned up and the transaction rolled back, the clients get 'sorry, try again' or 'sorry, we're working on fixing it', and the rest happily chug along.
Buying decisions are made on looks, not analysis of UI. People will buy pretty, and most people will never be aware of bad UI - they just adjust to it.
This article by Don Norman and Bruce Tognazzini has been discussed on HN before: https://www.fastcompany.com/3053406/how-apple-is-giving-desi... I cannot find the post that got a lot of comments though.
The header line above your post has inert text (the "on:"), buttons (in-place action, like "flag") and links (takes you somewhere, like "parent"). They all look the same. You need to hover the mouse over them to see which areas are clickable, something which is not possible on touch interfaces at all.
When designing user interfaces, you need to think about all sorts of users. When less precise input methods (touchscreens) are involved, or when your users might have issues with precise use of a mouse (and YouTube targets people of all ages and abilities), making everything lead to the same place is much better than some parts of the row leading elsewhere and potentially confusing users. If you’re searching for a channel by name, it should get its own entry on the list.
> We were shopping for a card for a friend or relative, in the standard Library of Congress-sized card section in the store. Looking at the choices, comprehensively labelled 60th Birthday, 18th Birthday, Sister’s Wedding, Graduation, Bereavement, etc., he commented, Why do they have to define every possible occasion? Can’t they just make a selection of cards and I write that it’s for someone’s 60th birthday?
You can certainly find plain cards. You may need a more generic card if you’re targetting an unusual occasion (say, 31st birthday). But the _wedding_ card has wedding-related imagery and a pre-written cringy text, whereas the _bereavement_ card is less happy and more appropriate for that occasion. I can’t draw, but the card company can hire artists to draw something nice on the card for me.
> This is a list of the processes that the operating system has launched successfully. It runs through it every time you start up. I see more or less the same thing now, running the latest version of the same Linux. It’s a beautiful, ballsy thing, and if it ever changes I will be very sad.
You may be able to see that something went wrong — or not, because it scrolled off the screen too fast. You may be able to tell that it’s still working — but you can’t tell when it will finish. Measuring progress is not always easy. Google probably opted not to, since they expect this to only take a couple of seconds, so instead of inventing a way for the conversion service to report progress to the few users who may care, they just show an indeterminate animation.
Ideally UIs and services (APIs) would be separate, so you could choose the interface that's best for you. This is a pipe dream though.
Failing that, users paying for software directly is a step in the right direction. For example, Kagi and Linear are both excellent software (IMO).
For example, the URL/search bar in browsers. It's not a web address, so if you mistype an address or it doesn't exist, the text typed in it will be redirected to search. Another browser feature, the back button. It will go to the previous page in history, but only within the current tab and browsing session. Try explaining that to someone with almost no experience using a desktop browser.
Many designs are based on already knowing what to expect. For example, GMail does not separate fields on email composer. Body field does not have a border nor label, it is literally a blank space you have to know to click.
Yet at the same time, terminology is somewhat archaic: compose, carbon copy, forward, paste, and a few other words still remain.
As anachronistic as it may sometimes seem, the whole software development ecosystem runs on various flavours of (more or less) well-defined plain text formats, precisely because this allows interoperability between a wide array of diverse tools. Similarly in the sphere of sound production, we see widespread software interoperability in the form of MIDI and VST plugin standards. Hell, even in early office software we were able embed (functioning!) snippets of spreadsheets into other types of documents, and use templated mail merge against our contacts database to generate form letters.
And yet over on the consumer software side of things, we're increasingly lucky if we get working copy/paste...
https://www.youtube.com/watch?v=KdnGPQaICjk&list=PLlTLLSskDv...
I think it is a matter of degrees of freedom, not loss of freedom.
"All this matters because the interfaces in question do the job of the dictator and the censor, and we embrace it. More than being infuriating, they train us to accept gross restrictions in return for trifling or non-existent ease of use, or are a fig leaf covering what is actually going on."
Software: empowering you to do anything, on someone else's terms!