If you're a button, you have one job
236 points
8 hours ago
| 30 comments
| unsung.aresluna.org
| HN
arendtio
16 minutes ago
[-]
Reminds me of the time I built a BabyButton, which was built in a way so that a baby could use it. Instead of the normal click behaviour, it was using the touchdown event, because that way the kid saw that something happened, and there was no problem with holding the button too long or moving the finger while still holding the button.

Whether you should build systems for that age group is an entirely different topic, but I found it a good challenge to design something that fits the user's needs.

reply
bloak
3 hours ago
[-]
I used to have a device with a physical button which, when you pressed it, would beep and add 30 seconds to the time. However, sometimes it would beep and not add 30 seconds, and sometimes it would add 30 seconds without beeping, so you always had to squint at the dim display to discover whether it had worked or not. I thought this must be a peculiarly bad design ... but since then I have lost count of the number of purely software buttons that somehow seem to replicate this broken behaviour: whether the button changes colour on the screen is somehow only loosely correlated with whether the action requested will take place. Why? How, even, have they implemented this?
reply
csande17
2 hours ago
[-]
> Why? How, even, have they implemented this?

This is really common because of two design features that most UI frameworks share:

- The code that changes the color of the button is an internal part of the "button" component, so that people don't have to individually implement it on every button. But this means that it's kind of disconnected from the code that actually performs the action. If the "on click" handler has some last-ditch check that aborts the action, like the "don't rotate the image if it's in the middle of the rotate animation" check from the article, often there's no way for it to tell the button to cancel the color change. (And conversely sometimes the "on click" handler can fire even if the color change animation doesn't play correctly.)

- Buttons usually change color when you press down the mouse button, but only perform the action when you release the mouse button. Sometimes this is used to intentionally give you a chance to cancel the action at the very last minute by dragging your mouse off the button while it's still held down (or, on mobile, to e.g. reinterpret your interaction as scrolling instead of clicking), other times it just creates more opportunities for something to happen that prevents the action from working after the color change has already happened.

reply
rowyourboat
2 hours ago
[-]
> there's no way for it to tell the button to cancel the color change

No, but what should happen in cases like that is that the on-click handler disables the button while it is unresponsive. This will communicate the fact that the button is unresponsive visually to the user and also inhibit the button-was-pressed feedback.

reply
RugnirViking
2 hours ago
[-]
Of course, one can fix these problems. GP was merely saying why this kind of mistake is common; it is definitely a mistake, not an inevitability.
reply
RossBencina
25 minutes ago
[-]
> Sometimes this is used to intentionally give you a chance to cancel the action

EDIT: sometimes UI elements with mouse-held interaction allow you to use the escape key to cancel an in-progress interaction (ESC: abort, mouse-up: commit) however the reply button on this page doesn't work that way so I have to edit this message to add this. That escape-key behavior should be universal I think.

reply
tgsovlerkhgsel
1 hour ago
[-]
I notice this pretty consistently with elevators: If you press the button for a short amount of time, it visibly lights up while pressed but doesn't actually register the button-press.
reply
ZiiS
49 minutes ago
[-]
The color change of the button shows you succeeded in pushing it. If you don't do this instantly most people are conditioned to try again. This is especially valuable for people with reduced motor control. It is completely independent of whether that push is a useful input given the current state of the software. Obviously when well written software knows it can't accept the input it should have disabled the button, and even moderately well written software needs to provide a near instant feedback that the action is processing or has been cancelled.
reply
simonklitj
3 hours ago
[-]
I suppose a lack of testing and an assumption that the action will fail so rarely that it’s not worth accounting for? But yes, such patterns make it hard to trust and efficiently use an interface.
reply
markatto
1 hour ago
[-]
This is sometimes done intentionally to hide latency and make a UI feel faster - I certainly don’t like it though.
reply
atoav
2 hours ago
[-]
Bad programming. People who have experience with embedded programming knows that reading out a button usually means denouncing. At the speed a microcontroller can read out a button it will change it's state multiple times per press because of contact bounce. Meaning when a user presses a button the program sees off, on, off, off, on, on, off, on, on, on, on, on, on, etc.

Now if you just naively read out the current state of the button and do something with it elsewhere in the program looping may be off or on randomly.

It is not hard to imagine if there is some other logic (or e.g. a rate limit) on the 30 seconds and on the beep that these would see different slices in time of the button. Congrats you built a button-debounce based RNG.

Physical buttons can be surprisingly complex if you don't rely on someone else's driver. The correct solution is to debounce the button, that can be done either in hardware (too expensive, so rarely done) or in softeare, by e.g. averaging the last 50 reads and wait till the majority is either off or on.

This should be common knowledge for embedded programmers, but every noe and then you will see someone who has never heard of it.

reply
mrob
1 hour ago
[-]
>averaging the last 50 reads and wait till the majority is either off or on.

This is a bad way to do it because it adds avoidable latency. A moving average is a low-pass filter. The switch bounce is better handled by hysteresis. Change state as soon as you see an edge, then ignore further edges until a timer expires, e.g. 5 ms, which should be enough for the bouncing to settle. A 5 ms timeout limits your repetition rate to 100 presses per second, which is beyond human capabilities.

You might want a tiny bit of hardware low-pass filtering too, for EMI resistance, but that's with microsecond-scale time constant, not milliseconds.

reply
inigyou
48 minutes ago
[-]
They didn't say how often the reads are - 50 reads could be only 5ms.
reply
crote
9 minutes ago
[-]
In practice switch bounce often lasts tens or even hundreds of milliseconds, and you need to space out the read process to cover the entire bouncing process if you want to avoid registering fake presses. Using basic averaging means your minimum input latency is going to be ~half your bounce time - which is often way too high for it to feel like real-time input.

If you want to achieve low-latency input, "act on first edge, then ignore for the switch bounce period" is a far better approach. It also conveniently solves the "press, then release within bounce period" problem where an averaging algorithm would completely ignore the button press.

reply
mrob
39 minutes ago
[-]
Latency is cumulative, so avoidable latency is never acceptable. Maybe the hardware will change. Maybe somebody will run your software in an emulator. That 5ms could be enough to push the total latency into the "annoying" level.

And even with no additional latency, 5ms is perceptible in some cases anyway. Microsoft Research has a video demonstration:

https://www.youtube.com/watch?v=vOvQCPLkPt4

reply
inigyou
22 minutes ago
[-]
Do you really think the people who programmed your microwave should have taken into consideration that someone might write a microwave emulator in the future? Dealing with that is not their job, it is the job of the emulator creators.
reply
crote
2 minutes ago
[-]
Who says the emulator is "unauthorized"?

For example, smartphone app developers routinely run their apps in emulators first to make the development process more convenient, only running it on a physical device for confirmation when the work is basically done.

Many embedded developers would kill for something similar, and we're already seeing the start of it with platforms like Wokwi. Being able to do integration tests without the physical device itself is an absolute game changer.

reply
birdsongs
42 minutes ago
[-]
> People who have experience with embedded programming knows that reading out a button usually means denouncing

I know you mean "debouncing" but I love the autocorrect. Like the button is some almighty authority that Denounces noisy signals.

reply
inigyou
23 minutes ago
[-]
It's interesting that old Windows apps would accidentally do this by blocking the main thread.

They'd even give visual feedback - the button remains looking pressed until the click handler returns when the operation is complete!

Maybe blocking the main thread isn't so bad after all?

reply
mproud
4 hours ago
[-]
How about when users accidentally click too much, or they believe the first click didn’t register?

I am still reminded of a keynote where Steve Jobs was demoing how much faster PDF documents would display on the newer macOS. So he had engineers put a button in for him to click that would scroll through the PDF on the screen, and he accidentally clicked it more than once. Steve wondered aloud if it would scroll all the way through twice… and sure enough, it buffered the process! He had to wait for it go all the way back up and scroll through a second time!

Steve saved grace by telling the audience that, even with moving through the document a second time, altogether it was still faster than PDFs had been in the last version of the OS.

reply
lucumo
1 hour ago
[-]
> How about when users accidentally click too much, or they believe the first click didn’t register?

I was really confused at their mention of accessibility, because my mind jumped to people with hand tremors who would double press when they intended only one press.

And then, of course, there are the people that double-click every button. To handle that, disabling a submit button in the onclick is very common.

reply
mcv
1 hour ago
[-]
Debouncing exists for a reason. Sometimes when a button is clicked twice, you want it executed twice, sometimes you don't. Distinguishing which is better in which situation is not trivial.

At the very least, you should consider which is appropriate for which situation, what if, in your UI, for some buttons one is the obvious choice, for others it's the other, but for some it's not so clear, and both behaviours are defensible? Now you've got an inconsistent UI.

I have no good solution for this.

reply
kccqzy
19 minutes ago
[-]
It’s really common for people to accidentally click a button twice. Yeah that’s what denouncing is for.

My favorite example of doing it wrong is a log in form: if the login button is clicked twice, the server would reject the login because the first click has already used up the one-time token so the user gets an error page.

But I think the biggest problem is that people either apply denouncing to all buttons in a UI (like turning it on within the framework they are using) or apply denouncing to nothing. So there really isn’t a culture for carefully considering which situations warrant which.

reply
Timwi
1 hour ago
[-]
It seems somewhat clear to me. You want it executed twice if and only if the operation isn't idempotent. Can you give an example where you think both behaviors are equally defensible?
reply
embedding-shape
3 hours ago
[-]
I'm no longer the Apple/Mac/Jobs fan-boy I once was in my earlier days, but I do miss the Apple presentations that felt like they were run by a human being wanting to show off cool stuff.

I couldn't even finish the last Apple presentations as it all feels so stiff, inhuman and run by suits, they all seem like robots scared of diverging from the holy script who will get fired if they display emotions and humanity.

Off-topic perhaps, but got reminded how delightful even the somewhat messy ad-hoc presentations from Jobs were.

reply
vishnugupta
3 minutes ago
[-]
I agree 100%. I stopped watching after iPhone 15 event or maybe M2.

Absolutely everything seems scripted including hand movements, shifting of postures, smiles..the whole works.

Now I just wait for the press release and that’s that.

reply
port11
1 hour ago
[-]
The scripted talks in front of fancy backgrounds do make it unpalatable, it’s just a fancier version of corporate slideshows. I suppose trillion-dollar companies aren’t as willing to take risks.
reply
atoav
2 hours ago
[-]
Button ≠ Button. People like to believe they should all be the same, but they really should not be.

On physical keyboards we already have three different kinds: normal buttons, modifier keys (shift, etc) and toggle keys (caps lock).

High stakes rare actions can require special button designs. E.g. on a black magic cinema camera the button that formats the memory card needs to be held for three second while it visually counts down. This gives a small delay during which the user can decide: "Fuck this is the wrong memory card!" and cancle.

The downside is that some imaginary power user that uses the camera only to format a stack of SSDs will get burdened. You have to decide which is more common and make a decision.

reply
hypfer
3 hours ago
[-]
People often forget that animations serve purely a supportive role and do not exist for the purpose of having animations.

They are there to mask loading times and ease from one state into the other. That's why we have them.

This knowledge eventually got lost (figuratively speaking) and now we have code that needs to wait on the animation to finish.

Another amazing example of cargo culting.

reply
alexdbird
1 hour ago
[-]
> to mask loading times and ease from one state into the other

I'd expand on this: used well, they show the user than a state change is happening directly because of a particular action of theirs, and hint at how they might reverse or modify it.

In fact I'd disagree with masking. If something appeared instantly with no hint as to why, that is a distinct anti-pattern on a touch screen.

reply
antihero
2 hours ago
[-]
They aren’t purely for that, they also contribute to how an application feels to use in a creative manner.
reply
hypfer
2 hours ago
[-]
I don't want my image editor to feel like something in a creative manner though.

I want it to rotate an image by 90° when I tap the button that does that.

See, this is exactly my point when I say that animations are no end in themselves. They serve a supporting role to better get the actual job done.

The actual job is not "feel" it is "do". For vibes, there are movies, Art, and AI hallucinations.

Of course, "feel" can greatly enhance the "do", but only if it takes the back seat, which is exactly what I just said.

__

The age-old debate "form follows function" vs "form over function", essentially.

One of them is correct tho, because in the real non-ZIRP world, correctness is defined as "achieves a tangible goal".

Which is not to say that stuff optimizing for other goals would be "incorrect" or "worthless", but it exists in a different category from "software". More like "software-adjacent Art".

The distinction being made based on "what is the primary goal we want to achieve here"

____

Related:

Also caused by ZIRP but differently, we have that problem that software trying to invoke feelings usually does so because it wants to sell you something or has any other style of goal that might not be aligned with yours.

So that adds yet another layer.

Pure utility cannot scam people into stuff they actually didn't want to do.

reply
hadrien01
1 hour ago
[-]
I disable all animations everywhere (Android, Windows, Gnome) because I hate that they make me feel like I'm losing time waiting for something that could be instant, and they sometimes make me dizzy. I'm particularly exasperated that iOS doesn't offer that possibility.

But rotating an image is one of the rare use cases where I do want the animation. It makes me see what action happened, with which rotation angle, without having to think twice.

reply
hypfer
1 hour ago
[-]
Huh, good point. True.

The motion itself indeed gets picked up intuitively by the brain.

Okay, I'm convinced that picture rotation should be animated to the exact degree that achieves this.

reply
Topfi
4 hours ago
[-]
Looking at the first comparison, I will admit, I thought the issue was with the iPhones example. The button and slider below the image disappear, then fade back in after each press of the rotate button, a behaviour I have seen on iOS across many applications that irks me to no end. The Screenshot app being a particular bug bear of mine.

If you have a UX element that I will be able to interact with before and after an interaction, then keep it visible during the transformation, process, whatever. What UX gain is there in hiding these buttons during the rotation on the iPhone? It doesn't even look better, though appearance has been the altar that recent Apple software has sacrificed actual UX gains.

Will agree with the author though that these taps need to be processed independent of animation.

reply
Taek
4 hours ago
[-]
I wish software apps had "tape-out rules" the way that computer chips do. Basically, when you design a computer chip, a program reviews the design and compares it against something like 300 pages of rules with stuff like "wires of X metal and Y metal can't be within Z distance of each other".

We could make something similar for UX. Just a bunch of design pattern constraints that throw flags if you try to ship something with well established UX warts.

reply
Retric
4 hours ago
[-]
There’s effectively no universal list of UX warts people agree with.

The Flat UX fad was objectively terrible on just about every metric I was taught, but people were actively pushing for such designs.

reply
selestify
3 hours ago
[-]
Why was that? What causes such fads? Why did everyone go along with it?
reply
hypfer
3 hours ago
[-]
Speaking entirely out of my ass here:

FOMO for sure is one of the driving factors.

"We cannot risk looking outdated". So weak management, probably.

But also talent availability I suppose. If there's a new trend, the pool of people you can hire include many that are in on that trend.

UI frameworks too, probably. The modern thing™ does the modern thing™ and you do want to be on the modern thing, because you fear that only that receives security fixes or whatever.

reply
darkwater
2 hours ago
[-]
If UIs today still looked exactly the same as Windows 2.0 or System 7 or CDE people will be bored to death. Aesthetics come and go and come back, it's part of how humanity worked for a few centuries already.
reply
hypfer
1 hour ago
[-]
Do I need to be entertained by my butter knife, mop or screwdriver?

I really don't think that "keeping people entertained" is a sensible goal within the context of building software as tools and not software-adjacent Art.

Which is not to say that I would not want a great and polished experience, but that is not equivalent to "being entertained".

___

It would be nice if not everything one interacts with would try to get some sort of emotion out of me. Bring back being bored.

reply
zuminator
2 hours ago
[-]
Make-work. Managers needing to justify their promotions with a new way of doing things. Whole teams are given a reason to stay employed. OS and device obsolescence is achieved. A win all around, save for the consumer.
reply
xigoi
3 hours ago
[-]
What’s wrong with flat UIs? Skeuomorphic designs have served their purpose of helping people get used to computers, but now that is no longer necessary.
reply
sakjur
2 hours ago
[-]
If you introduce flatness without also adjusting the colors (or worse, making many backgrounds translucent) you end up with really poor contrast.
reply
Telaneo
1 hour ago
[-]
New people are born every day.
reply
xigoi
1 hour ago
[-]
The newly born people grow up in a world where computers are already commonplace, so they don’t need to get used to them.
reply
Telaneo
1 hour ago
[-]
That fact that they are common doesn't mean they don't need to get used to them.
reply
dutchCourage
1 hour ago
[-]
This is a somewhat unpopular opinion here, however I do think flat UI can be done right and is well fitted to digital UIs.

It's possible to have a flat style but have buttons that look clearly like buttons, and elements that have shadows and colors.

reply
hypfer
2 hours ago
[-]
That's a good engagement bait if I've ever seen one
reply
xigoi
2 hours ago
[-]
I’m being serious. I find skeuomorphic UIs to be too visually overwhelming compared to flat UIs.
reply
hypfer
2 hours ago
[-]
That is a valid opinion to hold, however, the question of "what is wrong with X? Y is outdated and over" is

a) a different statement from "I prefer X"

and

b) pretty low effort, trivially to Google (or ask AI) and generally a bit on the ignorant side

A better reply would not just have said what it said but contained actual wonder about the topic. Like this, it's just indistinguishable from engagement bait.

reply
xigoi
2 hours ago
[-]
> pretty low effort, trivially to Google (or ask AI) and generally a bit on the ignorant side

I know the most common reason why people prefer skeuomorphic design (the visual metaphor), which is why my original reply directly addressed this complaint by saying that it’s no longer relevant. Some other complaints I’ve found online are about specific bad instances of flat design rather than flat designs in general. Therefore, I am asking about reasons that don’t fall under these two categories, which I haven’t been able to find.

reply
benj111
2 hours ago
[-]
I think you're being overly hostile.

The parents question seems reasonable to my non designy mind.

reply
hypfer
1 hour ago
[-]
Yes in a vacuum.

No on the Internet.

Especially not on the sea-lion infested HR-world Internet, in which trolling has evolved to exploit good faith directly.

___

In fact, "being overly hostile" is exactly how you probe to see whether your suspicions are correct.

Sea lioning exploits the gap between what would be a real human thing to do and what still passes as what a real human would do.

So to get useful data, you need to modulate parameters so that people end up outside of that gap window.

Essentially you're probing for genuine Human-ness by creating a context in which the bad faith action space is no longer overlapping with the genuine human action space.

This works, because genuine humans have this amazing ability to reconcile and actually genuinely resolve misunderstandings. Something that is fundamentally impossible for bad faith actors.

(This should not be understood as "just be overly hostile" because simply being a dick doesn't provide any data at all.)

reply
chopin
3 hours ago
[-]
But there are things like consistency which one can check for. And should.
reply
odyssey7
2 hours ago
[-]
Are there times when, during a call, pressing an iPhone’s screen-on/off button will end the call, but other times when it will just turn the screen off?

I still do not know the pattern, but I have on occasion inadvertently ended a call by using that button prior to placing my iPhone in my pocket.

reply
gobdovan
2 hours ago
[-]
When on Speaker/hands-free mode, it just closes screen. They assume you wouldn't press lock button while against your ear, because it closes the screen automatically. The problem is that there's some bugs that keep the screen open sometimes, or you may use it in a quiet room as if it were on hands-free.
reply
Sophira
17 minutes ago
[-]
I assumed that issues like "tap eight times for a no-op" not working was because of software patents not allowing the developer to do the obvious thing. Is that not the case?
reply
aerzen
9 minutes ago
[-]
Software patents? Care to elaborate?
reply
jan_Sate
1 hour ago
[-]
There's a problem with buffering tho. If the device's slow and unresponsive, and the user tapped the rotation button several times, it would be confusing if the rotation action happens 10 seconds after the user tapping the button. The user'd be left confused like "alright. So, has my input been taken?"

Now that I'm wondering. How does iphone mitigate this problem?

reply
Timwi
1 hour ago
[-]
It shouldn't buffer them like the author describes. It should execute the button’s function immediately when pressed. This might mean to cancel the current animation and jump ahead, or it might mean to speed it up by the appropriate factor so it takes the same amount of time as it does for one button press. Either way is massively preferable to a button that swallows my input.
reply
crewindream
17 minutes ago
[-]
One way to deal with it could be “guaranteed interrupt” action (something like sigkill, just for UI action queue).

Other way could be to actually visually indicate action queue depth.

reply
ksec
1 hour ago
[-]
We ( including myself ) like to shit on Apple's regression of UX and software. Which is true, on all of their OS. But every time we look into alternatives, the others are so far off that even Apple has regressed 10 - 20% they will still be so far ahead of others.

Google, Microsoft, Amazon, Netflix, Meta. Is there even one software company that does software UX well but not on Apple's platform?

reply
crewindream
22 minutes ago
[-]
I have only iphone, but from my experience, apple ui quality is just a huge myth nothing to do with reality.

On average it is has same amount of crappy UI experience, just in different places.

reply
socalgal2
1 hour ago
[-]
That's a great example. But, it's not always so clear cut.

Following the exact "best practice" in the article, the iPhone lock screen has this issue. Say your password is 1234 but you accidentally type 11234. What the iPhone will do is see 1123, the pause to tell you you failed, then enter 4. Now you, having muscle memory, will type 1234 (your password). But iPhone kept that 4 so it sees 4123 then pauses to tell you entered the wrong password, then adds the 4, and you type 1234 again, which again it sees 4123.

Finally, frustrated, you pause and press delete or take some other action to reset the lock screen and this time it works.

This has happened to me countless times since iPhone had a lock screen.

The better UX would be to clear the that after the error which is effectively what the Nothing Phone is doing with the photo rotation

I agree 100% with the article that for photo rotation it should do what the iPhone is doing. Conversely, it's wrong thing to do on the lock screen.

reply
crewindream
29 minutes ago
[-]
In summary:

Record actions until interrupt.

Animation should not be considered interrupt.

An Error message should be treated as interrupt.

reply
OneLessThing
5 hours ago
[-]
It's not so simple. There are times where you intend to tap one thing and something else appears underneath your finger instantaneously. So sometimes while rendering a layout you want to stop accepting input.
reply
Taek
4 hours ago
[-]
That's a different bad UX pattern. If a button has already rendered in a certain location, a new button shouldn't replace it without first giving the user ample warning that a material change is about to happen.
reply
Topfi
4 hours ago
[-]
Isn't that a different issue from what the blog post described and easily solved by holding everyone who allows their UX elements to get pushed around, for whatever reason, to the fire?
reply
ludicrousdispla
3 hours ago
[-]
Yeah, that is an issue in Apple Maps.

If you tap for directions and then tap to change the mode of transportation as it's loading the routes then it thinks you've picked the first route because it bumps the transport mode panel up in order to show the first route in the list.

Very annoying as they could just account for the height of the first route from the start.

reply
tapland
4 hours ago
[-]
Then don't give UI and haltic feedback.
reply
mvdtnz
4 hours ago
[-]
Sorry how is this relevant to the example?
reply
sockbot
6 hours ago
[-]
The real article getting to the point the author is trying to make is this one https://aresluna.org/show-your-hands-honor/
reply
egeozcan
3 hours ago
[-]
iPhones had their share of animations interfering with functionality, one instance being calculator app showing false results when tapped quickly: https://robservatory.com/the-calculator-bug-persists-in-ios-...
reply
padolsey
3 hours ago
[-]
The author suggests they want three clicks at any pace to always == the same functionality, so they can whiz through their photos and rotate each predictably. Fair.

> And it would be so much more predictable and pleasant if you could just tap the button three times at any pace you wanted without thinking, without paying attention, without getting your UI blocked by an animation that no longer helps you.

They cite accessibility.

The thing is, I can imagine the complete opposite side of the argument, where someone with motor impairments or parkinson's, for example, ideally liking if their over-clicks were ignored if they'd already locked-in their intention.

It's tricky to get this stuff right.

reply
csande17
3 hours ago
[-]
iOS has an accessibility option called "Ignore Repeats", which seems like a better approach because it's system-wide. So people who need that kind of accommodation can have it in places like the on-screen keyboard too, without needing everyone else to slow down their typing.
reply
padolsey
3 hours ago
[-]
That's good. I wonder if it should be opt-in instead of opt-out. Disabled people are arguably less able to find random configuration options than non-disabled counterparts. I get a bit bothered with how undiscoverable these options are. But power-users by their nature don't mind going to the extra mile to get perf out of their experiences.
reply
karlmedley
1 hour ago
[-]
There are many types of disabilities. If "power user" means "someone who doesn't use defaults", then people with disabilities are actually more likely to be power users.

Being fast does not make you a power user. "The button works when I push it twice" is a reasonable expectation of a device by default. If that weren't the default, then most people would have a worse experience with their phone.

reply
nananana9
3 hours ago
[-]
I don't think this is something every UI widget ever should have to think about.

It could probably be done as a global device setting - e.g. ignore taps within 100ms if they're within 50px of each other or whatever.

reply
kevin_thibedeau
3 hours ago
[-]
There is a more general Android problem where it registers a single tap sufficiently to show a button press animation and vibrate and then ignores it because the tap wasn't held long enough.
reply
projektfu
6 hours ago
[-]
In the Google photos app (Pixel 10) there is no animation, the rotation just happens immediately and there's no button press to buffer.
reply
doginasuit
5 hours ago
[-]
My rule of thumb is that animations need a purpose, otherwise you are just showing off and it gets tedious. This animation carries more purpose than most, conceptually you might understand which orientation will be next but it takes your brain a second to validate, and it is much simpler if you can see the path that it took.
reply
epistasis
4 hours ago
[-]
Eliminating these animations is indeed a massive win.

Overuse of animations is a terrible thing that has made iOS far worse over the years. I long for the days of yore, when the loading screenshot had a chance of being accurate.

These days, when loading something like the health app I get a series of three different screens, rather than just landing at the destination it knew o wanted to start at. It is idiocy of the highest order. Why show some series of random screen transitions while starting the app? Somebody who has no clue about UX programmed that piece of crap, and then an entire team put up with this behavior. I dearsay that if this shipped under jobs there would be a director level firing to stop it.

Same BS happens with Apple Maps. If you launch the app and it remembers that an hour, day, or two weeks ago you had your phone in a particular orientation forever ago, it slowly rotates the view pane over 1000-2000ms from you ancient view pane as if you've been waiting patiently over two weeks so that Maps doesn't suddenly disrupt your view...

Animation can be helpful but at some point a half-wit VP shoved it into everything Ruth disastrous results and Apple is still recovering. Liquid Glass is a similar disaster of incompetence being promoted far beyond capability.

reply
ivanjermakov
1 hour ago
[-]
When I had my last Android phone (KitKat 4.4), best tip for increasing UI snappiness was reducing (or disabling) system animations. I still miss this option on most modern OSes, shells, apps, and websites.

It's very rare that animation is not blocking further user actions. No surprise animations are tricky to program - they're very async in nature. Designing animation system that doesn't leak into the rest of application logic code is a no simple feat.

reply
crewindream
10 minutes ago
[-]
Tangentially related, games added various menu transition animations on purpose, to disable user input while loading resources (from hdd or network).

Idea being that for user it is less frustrating to wait for animation to end, than to see some hourglass/waiting indication.

reply
nbobko
1 hour ago
[-]
This still exists on modern Androids (thanks God!)

Even better: they moved it from developer options to accessibility options, which means that they treat it as a normal use case now

What is bad is that it still disables the animations for progress bars (the only place where the animation makes sense)

reply
Cockbrand
2 hours ago
[-]
A different UX issue I have with these buttons is that the designers seen to have chosen the wrong rotation direction.

I almost always need to rotate photos 90⁰ to the right, so I have to tap that button three times. Apart from that, if I have only one way to rotate my photo, clockwise seems more intuitive to me anyway.

reply
bouke
2 hours ago
[-]
Or another bug seen in the wild: the image rotates opposite to the button’s icon label.
reply
kazinator
6 hours ago
[-]
We like buffering of keystrokes or gestures when the system is completely reliable, exhibits reasonable latency and low jitter in its latency.
reply
sph
5 hours ago
[-]
Even in unstable or high latency I like the buffering. I’m thinking of a remote shell, where you want to type a command blindly, and see it appear seconds later, because keys got buffered in the Internet pipes. Without buffering it would feel awful, having to wait a full roundtrip per keystroke
reply
Gabrys1
2 hours ago
[-]
please, use mosh, if this is available for you
reply
kazinator
6 hours ago
[-]
If you're a button, you have one job: to transmit Morse code from the finger to the machine, Morse code representing a complicated POSIX shell command. And also to power down this entire one-button terminal with a 3 second press, power it up on any button press, with a firmware reset if powered up by a 30 second press.
reply
Joker_vD
6 hours ago
[-]
Now I am imagining a typewriter with just two huge round buttons, next to each other horizontally, and a spacebar bellow them:

     *-----*      *-----*
    |       |    |       |
    |   ●   |    |   Ω   |
    |       |    |       |
     *-----*      *-----*
     
      [================]
A press of each round button rotates the typing ball accordingly, pressing the space prints the chosen letter and resets the ball to the neutral state. This whole thing should probably be electric lest you'd have to press the space bar by smashing it with both fists.
reply
kevindamm
6 hours ago
[-]
Now remove the spacebar, combine the two buttons into a single one for "tone" and adapt it to morse code. All the buttons still do only one thing and now there's only one button!

And, you don't have to worry about what to do in the case that someone hits the "rotate ball" button while it's still rotating.

reply
Joker_vD
5 hours ago
[-]
> And, you don't have to worry about what to do in the case that someone hits the "rotate ball" button while it's still rotating.

Eh, it's a pretty trivial problem, comptometers have it figured out more than a hundred years ago.

reply
bitwize
2 hours ago
[-]
reply
Gualdrapo
5 hours ago
[-]
The power button of my pc also has the job to tell wether the PC is turned on. So do bulb switch buttons that have a pilot light, and so on
reply
QuercusMax
6 hours ago
[-]
This is literally the type of thing that caused the THERAC-25 disaster (https://en.wikipedia.org/wiki/Therac-25). Experienced users hitting keys faster than the app could process them, resulting in safety features being inadvertantly bypassed.
reply
userbinator
4 hours ago
[-]
That's a great example of bugs in overcomplexity. The requirements were relatively simple, but they went for a full-on multitasking OS with all the complexity that entails.
reply
rkagerer
4 hours ago
[-]
This isn't unique to touchscreen interfaces. I have the same frustration when performing a sequence of keyboard commands and the OS can't keep up (or some other application or unwanted notification pop-up steals the focus).
reply
CTDOCodebases
2 hours ago
[-]
It's Android stop expecting it to make sense. You have to learn some intricacy of some tool so you can forget it and have to learn it again three months later.

iOS is no better. Sure everything is intuitive but it's going to get a redesign so next year you are going to have to learn everything from scratch or a feature you use often will just break.

reply
k4rli
2 hours ago
[-]
Using AOSP-based Android roms, I haven't noticed any big changes in years. In current "android 16" and my old "android 10" device one couldn't really tell a difference. Very simple UX, no bloatware apps, no hidden drawers coming out from sides.

I've tried the vendor ones by Samsung, OnePlus etc with fresh devices and this Android experience really is awful.

reply
CTDOCodebases
1 hour ago
[-]
I wish there was more love for more vanilla forms of Android. I would trade more simplicity out of the box and regular software updates over the current situation.

Personally I'm blown away by Motorola options in the budget range. For raw value alone there offerings are hard to beat.

reply
UrbanNorminal
2 hours ago
[-]
I identify as a button.
reply
notpushkin
5 hours ago
[-]
The author says: “Now, I’m going to exaggerate the problem a bit and tap 90-degree rotation quickly eight times.” I was wondering why the Nothing one stuck upside down after that, and expected a rant about Android not registering all taps or something. But the article got ahead with explaining how the Nothing’s solution was better. Huh?

The iPhone was eight taps. The Nothing was six. (Yeah, I could have noticed it while watching, but I was situationally incapacitated; namely, I’ve just waken up.)

---

Edit: I’ve rewatched it at 0.5× and the Nothing was eight taps after all, too. Author’s point was, indeed, that all taps should register regardless of what animation state is, and Nothing doesn’t do that. Sorry for the confusion!

---

Regardless! I still find the iPhone one more pleasant to look at, because the animation doesn’t stop. But if you press quickly enough, I guess what they could do is animate until the taps stop, then:

• if the image will arrive to the desired state: finish up the current 90°;

• if it’ll still be 90° away: finish up then show one more 90°;

• if it’ll be 180° away: flip it upside down, then finish up the current 90°;

• if it’ll be 270° away: flip it upside down, finish up, and show one more 90°.

But that’s not a very practical thing to implement I suppose.

reply
Retr0id
5 hours ago
[-]
> But the article got ahead with explaining how the Nothing’s solution was better.

No? It makes the opposite argument.

reply
notpushkin
5 hours ago
[-]
Then I definitely need to get some caffeine I guess *yawns*

> And it would be so much more predictable and pleasant if you could just tap the button three times at any pace you wanted without thinking, without paying attention, without getting your UI blocked by an animation that no longer helps you.

Am I misreading this?

reply
furyofantares
5 hours ago
[-]
I'm not sure exactly how you're misreading it, but you are.

The Nothing isn't executing all the taps, some are blocked by the animation. It is responding visually and haptically to all of the taps, but some are blocked from doing any work by the animation.

You also said the Nothing was 6 taps but I'm not seeing anywhere the article says that. I believe it was 8 taps on both.

reply
Retr0id
5 hours ago
[-]
Both animate, but Nothing blocks further inputs while it's animating (even though the haptics still fire).
reply
notpushkin
4 hours ago
[-]
Okay, that one is on me indeed. I’ve re-watched it at 0.5× and he does make 8 taps indeed. Apparently, only the first and the last are registered then. Sorry for the confusion!
reply
shevy-java
1 hour ago
[-]
Click me?
reply
jimjimjim
2 hours ago
[-]
I'm sure it just my personal preference but I hate animations. Most often they do little other than slow an application down i.e. the code of the application could finish the task almost instantaneously but for the sake of appearance, they make it take longer to finish. I would much prefer no animations in applications. If the animation is there to disguise some actual slow response, just let me wait, give me jarring screen changes. please. Maybe app designers could still include all the animations for "smoothness", "premium look" or "sizzle" but please include an "expert" mode that just turns everything off.
reply
anilgulecha
5 hours ago
[-]
Camera app should negate the need. most pictures are of people and scenary, and 99.99% of the time the intent is to take the photo in the right order.

Simple totally offline ONNX models exist, whcih should make it trivial to categorize the right orientation. Acceleometer/magnetometer can feed this, but should not be the default.

Just do this and avoid the hassle of rotating at all!

reply
Cockbrand
2 hours ago
[-]
Similarly, why don't photos get auto-straightened, maybe with an option to revert to original? I spend too much time aligning the horizon properly on snapshots that I took while cycling. The phone even has the data from the rotation sensor, so this should be fairly easy to implement.
reply
Gabrys1
2 hours ago
[-]
This is so true. Sorry you got downvoted.
reply
nilirl
3 hours ago
[-]
I understand the design principle but I would argue it's a bad implementation principle.

Engineering attention is finite. Why would you spend time thinking about 8 clicks when most people will only need ~3?

Not all user-action possibilities are equally important, and if they are, then you better have infinite resources to spend on engineering.

reply
csande17
3 hours ago
[-]
It's not really a question of how many taps they support, but how fast.

This same issue also seems like it would prevent you from quickly double-tapping the button to turn an image upside-down, a much more common use case.

reply
nilirl
2 hours ago
[-]
Not prevent, just not provide very responsive feedback, right?

I don't know, I understand the principle, but I don't see how you can determine the value of a principle outside of a specific context.

Even for accessibility, we can't target every context in the name of being accessible. We still have to pick which contexts of inaccessibility we'll need to support with more attention.

reply
csande17
2 hours ago
[-]
Maybe I misread the article, but I think the Nothing photos app is literally ignoring the second tap, not just failing to provide feedback
reply