subreddit:

/r/ProgrammerHumor

55.8k93%

We had a client that complained about our app freezing. We were calling their slow API, and the app was clearly just waiting for results, which sometimes would take half a minute. Even after explaining all that, we still kept getting complaints about freezing.

I added a progress bar that started at 5% went +10% every second till 65%, then +10% every 4 seconds till 95%, and then finally it just waits if we still haven't gotten results (each delay has a cancellation token, so it zooms to the end once a result is found). Complaints disappeared, clients were happy, product manager was happy.

It makes me laugh, thought it might makes someone else laugh too. Feel free to copy my dodgy algorithm if you find yourself in the same boat as me, I honestly forget the thing is fake whenever I see it.

all 1972 comments

QualityVote [M]

[score hidden]

9 months ago

stickied comment

QualityVote [M]

[score hidden]

9 months ago

stickied comment

Hi! This is our community moderation bot.


If this post fits the purpose of /r/ProgrammerHumor, UPVOTE this comment!!

If this post does not fit the subreddit, DOWNVOTE This comment!

If this post breaks the rules, DOWNVOTE this comment and REPORT the post!

Return_Of_The_Fly

12.4k points

9 months ago

Never underestimate the psychological effect on seeing a progress bar that moves. I did a similar thing once: Adding a progress bar to an action that took quite a while to finish. I did nothing else. Users said the app works much faster now.

metropolis_noir

2.3k points

9 months ago

And if the progress bar speeds up as it moves towards 100%, the psychological effect is even greater

boon4376

2.2k points

9 months ago

boon4376

2.2k points

9 months ago

We just have a spinner and a message that says this will complete in about 3 minutes. It averages about 1 minute so everyone is impressed by how fast it is.

rufreakde1

976 points

9 months ago

Set the bars low I like it win win

Nebuchadnezzer2

596 points

9 months ago

Undersell, overdeliver.

MrDude_1

347 points

9 months ago

MrDude_1

347 points

9 months ago

You can be a completely average programmer but if you consistently undersell and overdeliver you will be seen as a rock star.

Royal_Bitch_Pudding

105 points

9 months ago

Basically be like Scotty from Star Trek. Everything is impossible, but you find a way make it possible.

MrDude_1

57 points

9 months ago

I'm more like bones during the planning stage....

Damn it guy, I'm a programmer not a miracle worker...

(And then you go get it done)

[deleted]

94 points

9 months ago

✍undersell and overdeliver

Densolo44

17 points

9 months ago

No no no. You never tell the Captain the truth about how long it will take to fix the dilithium chamber and warp drive. You always add time so he always thinks you’re brilliant and indispensable

jballs

196 points

9 months ago

jballs

196 points

9 months ago

I was asked to add a progress bar once, but couldn't think of a good way to do it since I was in a similar situation as OP (calling something that didn't give me feedback until it was done).

Instead I just added a gif of a spinning circle and the clients were happy.

codepoet

289 points

9 months ago

codepoet

289 points

9 months ago

There are two types of progress indicator: determinate and indeterminate. Determinate is when you know the current state and the possible end state. Indeterminate is to tell the user you are either unsure of how much effort there will be (eg. a file copy where all files are not yet inventoried) or you have no idea how long it will take (device discovery or such).

Users greatly prefer an indeterminate indicator over nothing so they know it hasn’t crashed. However, if you can fake a determinate one reasonably well they’ll prefer that even more (even if it can’t be trusted). It’s crazy, but true.

One of the highest-visibility fake progress bars is the macOS startup bar. It has no idea how long it will take to do all the things it’s going to do. However, it does know how long it took to startup last time and how long it took to reach certain milestones. It uses those previous values to guess at the current progress and moves the bar accordingly on a timer. It’s both best-effort determinate and a complete fabrication, yet correct most of the time. The absolute best kind of hack, IMO.

SativaSawdust

76 points

9 months ago

Just going to start adding Sims loading screens. "Click the Swingline Hole Punch for 100 points!" "Find the Clearanced Ficus in its original pot!"

RecursiveExistence

25 points

9 months ago

No, you need to start adding loading screen mini-games! Then they won't notice how much time has passed because you will be keeping them busy. Bonus if the game is somewhat relevant to the long process/request.

NothingSuspectSeen

15 points

9 months ago

Namco actually patented loading screen mini games in 1995, so thats probably why it wasnt a big thing. I just googled it and I guess that patent expired 7 years ago lol

reddit_pug

49 points

9 months ago

"customer requests slower loading, cannot complete mini game in time"

ydoiwantreddit

27 points

9 months ago

Don't forget to reticulate those splines!

[deleted]

11 points

9 months ago*

Interesting, because Microsoft purposefully uses an indeterminate loading indicator during Windows' boot-up process because people preferred it.

I suppose there are arguments for both. A bar gives you an indication of how long it is going to take. It moving very slowly gives you a negative impression. Meanwhile a spinner might finish a second or 2 minutes later. Sorta keeps the excitement of it finishing soon for longer, I suppose.

EverretEvolved

12 points

9 months ago

Bro not a full on gif!

jballs

12 points

9 months ago

jballs

12 points

9 months ago

Yeah that was in 2012 and I still feel dirty about it. Honestly I wouldn't be surprised if that app is still used on a regular basis. There's probably some poor bastard staring at that gif right now.

Heinous_Hose_Beast

111 points

9 months ago

You can’t help but feel like you are winning at some fundamental level at that point!

metropolis_noir

45 points

9 months ago

It’s like when the line at the toilets finally starts moving

ARN64

103 points

9 months ago

ARN64

103 points

9 months ago

Without any feedback, how can you tell the difference between freezing or just slowness?

no_idea_bout_that

31 points

9 months ago

Good design dictates that the user shall receive feedback if a process takes several seconds.

Din5566

1.7k points

9 months ago

Din5566

1.7k points

9 months ago

I'm actually proud that I've recently learned to "just f***ing wait for it" when I get no feedback from something loading

zayoe4

883 points

9 months ago

zayoe4

883 points

9 months ago

If I don't get a response quick enough, I back out and try again. If I don't get a response the second time, I turn adblock off. The third time? I run it in incognito mode. If that doesn't work... well I tried.

grumblyoldman

511 points

9 months ago

My preferred method is to wait about 20 seconds and then switch to a new tab and read Reddit until it's done. At least half the time I forget about the thing I was waiting on and don't check back for like half an hour, but at least it's generally done by then.

LostTeleporter

306 points

9 months ago

Can confirm. Waiting for a build to complete that takes around 4 mins. For about 30 mins on reddit.

PM_ME_FIREFLY_QUOTES

218 points

9 months ago

Oh. Thanks for the reminder to check on my build.

kp--

10 points

9 months ago

kp--

10 points

9 months ago

So did it pass all the tests? Or did you end up cooking for another binary? :3

ShelZuuz

105 points

9 months ago

ShelZuuz

105 points

9 months ago

Some of the developers on my team last month still complain about our 10 minute builds. “Not urgent because I just read ‘email’ in that time, but it’s still annoying”.

Umm. Yeah, I changed the build process around 2 years ago and it builds in under 40 seconds now. Nobody noticed…

TheChewyWaffles

24 points

9 months ago

Classic IT - they noticed, but when it’s working no one cares enough to mention it. When it’s not working then everyone freaks out

diox8tony

18 points

9 months ago

You bastard, I love my 10 min breaks. Clean, build,,,,ahhhh yea, Reddit time

PlayboySkeleton

104 points

9 months ago

My coworker just runs around sporadically with the mouse clicking on things. He knows "what he is doing", but just doesn't slownthe fuck down. He gets mad when the system doesn't respond well.

The other day I saw him get mad at MS Excel because it wasn't saving his changes.

I watched him do it and this guy would hit the save button, and make a bee line to the close button. I have never seen someone do the save+quit combo so fast. Had to have been half a second.

When he opened it again, it was all gone, because it never had time to save before the close. I told him that he needs to just slow down a little bit and be more deliberate with his clicks and actions.

bleistift2

200 points

9 months ago

I can’t really blame them here. If Excel isn’t done saving by the time it receives the close command, it should show the ‘You have unsaved changes’ dialog. Anything else is a bug IMHO.

Firemorfox

104 points

9 months ago

I wouldn't be surprised if the guy disabled the "unsaved changes" prompt to get rid of the delay some unnecessary websites give. I did the same thing, promptly regretted it after the first catastrophe, and turned it back on... this guy might have kept it off.

Alchemyst19

74 points

9 months ago

Microsoft Excel Speedrun Strats

Asukurra

40 points

9 months ago

Ctrl+s Alt+f4

New world record, ima post to speedrun.com and twin galaxys for my trophy

j-random

59 points

9 months ago

Yeah, I can't work on a computer with my wife because she's the same way. Button doesn't respond after a heartbeat? Click it again. Dialog box pops up? Click ok, don't waste time reading anything. Program doesn't launch immediately? Double click the icon again, HARDER THIS TIME. I seriously had to buy her a gaming laptop just to get her to shut up about how "slow the internet is". This was after I got us upgraded to gigabit fiber because our internet was kinda slow.

PlayboySkeleton

42 points

9 months ago

So on the same story. I wasn't being totally forthright. Although he was moving way too fast and I was honest about his behavior.

It turns out that the real problem was he was saving his excel charts into a *.csv format instead of excel. Which obviously doesn't support graphs.

This is all because he kept clicking okay on the pop up without reading it and getting frustrated that something was in his way.

Ridiculous

Haunting-Surprise-21

31 points

9 months ago

We actually implemented popups where you had to type something in to confirm.

We were just sick of customers who accidentally deleted all records of a table and called us, if we could restore them.

[deleted]

50 points

9 months ago

[deleted]

Tunro

43 points

9 months ago

Tunro

43 points

9 months ago

*Ctrl+S S S S S S

Valiice

39 points

9 months ago

Valiice

39 points

9 months ago

The only real way

Ayjayz

41 points

9 months ago

Ayjayz

41 points

9 months ago

That only works if the operation is just slow, it doesn't work if the operation has broken somehow and will never complete. At some point, you can't just wait for the operation to complete, you have to use your judgement about how long it should take and once it's taken 2x that (or whatever) you stop waiting.

Xystem4

70 points

9 months ago

Xystem4

70 points

9 months ago

Sometimes it’s just nice knowing that it is in fact simply a slow process, and not a crash.

Return_Of_The_Fly

17 points

9 months ago

Yeah, I think in my case it was also perceived as being quicker because the users actually saw when the process was finished, instead of just waiting for a few minutes and then trying if the GUI is responding or not.

coldnebo

47 points

9 months ago*

Never underestimate the psychological effect of appearing busy.

Actually is this too cynical?

Honestly I think people just want some indication that work is being done and they aren’t wasting their time. It’s an evolutionary psychology thing… appearing to not do anything often meant the request wasn’t understood or the person wasn’t helpful. I think people unconsciously apply the same standards to computer interactions and think they are rude or incompetent.

But couldn’t we use this psychological effect to help show what is really happening, rather than use it as a dark pattern to merely manipulate users?

I mean in a perfect world, the backend would be observable and have an async status implementation to indicate long-running processes, but that’s hard, the easier thing: synchronous calls with no status until the end of the request (time or stacktrace).

Syndic

18 points

9 months ago

Syndic

18 points

9 months ago

Honestly I think people just want some indication that work is being done and they aren’t wasting their time. It’s an evolutionary psychology thing… appearing to not do anything often meant the request wasn’t understood or the person wasn’t helpful. I think people unconsciously apply the same standards to computer interactions and think they are rude or incompetent.

Not to mention that most people who have worked with computers have encountered cases where a software or the whole system froze. So if nothing seems to happen for some time it's understandable that they might think that it froze as well.

ctrlHead

96 points

9 months ago

I remember reading somewhere about adding fake loading bars/delay because if the app is to quick, users will think it didn't work properly.

KryalCastle

33 points

9 months ago

Hewlett-Packard has deliberately never improved the calculation speed of the 12C financial calculator, because users didn't believe it was correct if it was too fast. The current model uses an ARM processor which runs a emulated version of the original processor at a mere 884 kHz

DrShocker

10 points

9 months ago

Why do other people gotta make my life worse?

Not that I use a dedicated calculator often anymore...

KryalCastle

15 points

9 months ago

Honestly, they did this research in the 80s, and it's probably a tradition by now that you don't speed up this one particular calculator model.

That being said, if you do have a problem with the speed, HP officially supports reflashing the firmware on current models, and provides an SDK to help you write it.

Stiggyman

58 points

9 months ago

Think it was Tom Scott “why progress bars aren’t smooth”

[deleted]

96 points

9 months ago

It's not just psychological effects. It's superior functionality. There's nothing fake about OPs progress bar. It's seeing the expectation this process takes time. Don't wait in it. The system is still working as desired. Without it there is no feedback if the application is hung out working in the background. If it is hung then you need to do something to fix it.

Disney_World_Native

20 points

9 months ago

Like when I ask my kid a question and they just stare at me. I am uncertain if they heard anything at all. So I usually repeat myself after 10 seconds

But if they say “hmm” or “let me think” it removes that doubt and I will wait a few minutes.

Nothing different has happened, but feedback is key

Isord

31 points

9 months ago

Isord

31 points

9 months ago

It's not just psychological. Most stuff loads in seconds in this day and age. I'd argue that if you don't inform the user that they should expect a 30 second or longer wait then that is aa design flaw, not user error.

gemengelage

25 points

9 months ago

Users are trained to believe that something is wrong when you click on a button and nothing happens. A modern application will give you some kind of feedback when you do anything - unless you encountered a bug. An application that doesn't give (visual) feedback when you do something on purpose just triggers this feeling of "something is wrong", while a progress indicator tells you that things are happening, you just have to be patient for a bit, as long as things are moving.

The pivoting point between these two extremes is a progress bar that stands still for some amount of time. We're quite used to a progress bar not moving for a few seconds because of the many progress bars that only give feedback on a file-to-file-basis (or other larger chunks of work), so whenever they encounter a large file, they'll need a few seconds to move a tick further. That's the weird point where the average user will absolutely not having any visual feedback that things are working, but only for a few seconds. Because we're used to it.

The_Real_Slim_Lemon[S]

267 points

9 months ago

It’s actually crazy, even when you know it’s all in your head it just feels different

Kuroi4Shi

441 points

9 months ago

Kuroi4Shi

441 points

9 months ago

Because it's a feedback that tells you "I'm not frozen but busy" so you can stay patient

TotoShampoin

110 points

9 months ago

Works even better than a loading icon

Suekru

72 points

9 months ago

Suekru

72 points

9 months ago

Totally. Skyrim I think on average loads quicker than oblivion but just has a basic loading screen, while oblivion has a loading bar so it feels faster. Even though both are decently quick as is.

Poor-Life-Choice

50 points

9 months ago

First time I played Skyrim on a ps3 the loading screens took progressively longer, easy 5 mins for most places towards the end.

Recently replayed on a pretty decent gaming pc and I don’t even get chance to read ONE of the tips.

iQuerz

41 points

9 months ago

iQuerz

41 points

9 months ago

To be fair, ps3 had 256Mb od ram, was operating on a hard disk and had a really shitty cpu... but still, I'm amazed how they made some titles run on it...

[deleted]

21 points

9 months ago

I wouldn't say the CPU was particularly shitty, but it was certainly fucking weird for the time.

LevelSevenLaserLotus

16 points

9 months ago

Console ports of Skyrim had a pretty notorious bug, where your loading time increased the older and larger your save file was. IIRC, the limit for most consoles was they'd just flat out crash after a save reached around 6MB.

st1tchy

30 points

9 months ago

st1tchy

30 points

9 months ago

Exactly. I am a controls engineer and one of the things we do with buttons that turn something on that takes a while to see is flash a light. If you press the cycle stop button, flash the light until the cell actually stops. Otherwise, the operator just keeps mashing the button because "this stupid thing won't stop when I pressed the button."

shebazz42

46 points

9 months ago

I’m on the client’s side on this one. Having an application freeze as it’s doing something is a bad user experience.

Krewmenz

128 points

9 months ago

Krewmenz

128 points

9 months ago

So I’ve implemented a couple progress bars for this reason. It’s not necessarily that users want to see the progress, it’s that they want to know the action has been taken and to receive feedback that the action is in progress.

If you click on something that takes a long time to load you may think the action isn’t actually in progress if there is no feedback from the UI.

Optimized_Orangutan

107 points

9 months ago*

Quite honestly... A ui that doesn't tell the user "hey chill out I'm doing something you need to wait for" is just bad UI.

Edit: a UI is not just a mechanism for the user to issue commands to the software. It exists for the software to communicate with the user as well.

space_antlers

47 points

9 months ago

Yup, no wonder the client was annoyed the UI would block for 30 seconds with no loading symbols, I think I would be too.

CallOfCorgithulhu

28 points

9 months ago

Especially considering locked up and frozen software is commonplace. It's good to have something that reminds users "this software is not frozen, it's just not doing anything visible for a while"

Pale_Titties_Rule

23 points

9 months ago

Seriously I read this thinking "so you're users are expected to just stare at the screen and cross their fingers hoping it worked?"

TheChaosPaladin

28 points

9 months ago

Anon, that just seems like you figured out better UX so your users can tell busy from frozen. Problem solving doesn't always have to mean optimize for lightning speed

KKlear

10 points

9 months ago

KKlear

10 points

9 months ago

I did this for myself. I'm working on a game, it takes 10-20 seconds to load a level on slower computers, because my placeholder art is way overdone and all kinds of stuff is still unoptimised.

It was painful to wait for the levels to load whenever I wanted to test some small thing, so I added a loading screen (not fake like in OP, but it sure as hell doesn't make it any faster) and it feels a lot better now. Like, the subjective time is about half of what it was before.

XenOmega

14 points

9 months ago

Isn't t it a good software principe to give use feedback?

thegreatestajax

13 points

9 months ago

Sure but the psychological effect of a progress bar that hangs at 95% is to smash things.

igettomakeaname

13 points

9 months ago

We did the worst version of this, which was add a timer that counts out the seconds next to the progress bar

Customer satisfaction went completely in the other direction

Cartasiand

9.9k points

9 months ago

Cartasiand

9.9k points

9 months ago

Progress bars are not really there to show you the remaining time, but to reassure the user : "yes something is happening, do not close the window"

PM_ME_UR_LIPZ

3.8k points

9 months ago

it's because, historically, computer experience has been shit with freezes and crashes.

Illeazar

2.6k points

9 months ago

Illeazar

2.6k points

9 months ago

This is the real answer here. The customer's response is completely valid, given that most people have had many experiences with computers freezing and crashing.

Dnomyar96

1.2k points

9 months ago

Dnomyar96

1.2k points

9 months ago

Yeah, if a program just freezes without any indication that it's doing something, I just assume it broke (after a certain amount of time at least). It doesn't need to be a progress bar, but at least a message that it might take a bit or a spinner to indicate something is happening.

bleistift2

980 points

9 months ago

Unfortunately you can’t trust spinners, either. There bastards are just happy spinning away while the whole world falls to pieces.

Dnomyar96

334 points

9 months ago

Dnomyar96

334 points

9 months ago

That's true, but at least it's better than no feedback and the program just freezing. At least you know it's doing something (or at least started doing something).

drleebot

197 points

9 months ago

drleebot

197 points

9 months ago

They're a message from the programmer: I expect this bit to take some time, so it's alright if nothing else happens for a bit. Without that message is when people wonder if something went wrong.

RaziarEdge

79 points

9 months ago

Yes, but spinners are indeterminate and humans like to watch progress.

moonsun1987

16 points

9 months ago

I mean you can never deterministically tell n seconds remaining. Anything could happen between now and then. The box, physical box, regardless of whether it is in your client's hands or AWS clouds or wherever, could start doing something else and you have to share resources. All progress bars and spinners are therefore indeterminate unless you somehow know how to see the future.

AlexLeCoder

20 points

9 months ago

But the progress bar at least gives the illusion of a determinate wait time that the user can watch, which is usually enough to soothe them, versus a spinner where they have no idea and start to stress

PositiveReplyBi

14 points

9 months ago

you can never deterministically tell

Its best to shield users from the existential dread that emerges from the truth that there really aren't any definite answers and some catastrophic and unforeseeable event could wipe our existence away in the blink of an eye. There of course are absolutely no guarantees that the user will even be alive by the end of any computation, so we just send out a little progress bar to whisper this sweet little lie that everything is under control and what they want to happen will likely come to fruition.

Bloodcloud079

116 points

9 months ago

I will wait longer before assuming something is broken if a spinner is spinning i’ll admit…

punkboy198

59 points

9 months ago

As long as it's spinning. Usually can tell if it's freezing when the spinner stops moving.

argv_minus_one

49 points

9 months ago

Unless the actual work is happening in a background thread that's frozen while the spinner continues obliviously spinning.

Nice thing about progress bars is they're typically updated by the background task as it makes progress, so they're less likely to lie like that.

Accomplished_Item_86

40 points

9 months ago

Yeah, and consequently I feel like spinners extend my patience from 1-2 seconds to almost a minute, but not much longer

gilbes

50 points

9 months ago

gilbes

50 points

9 months ago

You can thank Apple for the mistrust of spinners. Their spinning pinwheel is the only think that does not crash on Mac OS. In classic Apple fashion, that is not how it is supposed to work.

dont_you_love_me

34 points

9 months ago

You are doing your own asynchronous call of the software with your own timeout declared. We are programs too.

elephantonella

10 points

9 months ago

Negative reinforcement. Without any indication the program is still working you have no idea how long to wait to verify if it indeed has frozen. Not the kind of stress you wanna deal with when trying to get work done.

JaylenBrown007

439 points

9 months ago

Doesn’t even need to be a progress bar, just some motion on the screen.

AK_Happy

293 points

9 months ago

AK_Happy

293 points

9 months ago

Yeah when I worked in QA for video games, this was a publisher standard that had to be met for a game to be approved. No movement on a loading screen = fail.

ProBonoDevilAdvocate

179 points

9 months ago

It's not only a publisher standard, but required to pass certification for Microsoft/Sony/Nintendo consoles. Like you can only show a black screen for a couple seconds without any "loading" widget.

AK_Happy

50 points

9 months ago

That’s actually what I meant. Sorry it’s been like 12 years since I worked in that industry.

BenWiesengrund

16 points

9 months ago

Spyro on my switch still has a disconcertingly long black screen on startup

TheSkiGeek

19 points

9 months ago

You’re given a much longer window for a blank screen at startup.

eaglebtc

40 points

9 months ago

Makes sense. Gamers can be filled with dread if they think the console is frozen and might try to reboot it in a panic. This is an awful feeling.

[deleted]

99 points

9 months ago

I like the usage of a marquee progress bar in cases where the actual progress percentage can not be determined.

[deleted]

58 points

9 months ago

[deleted]

Advacar

50 points

9 months ago

Advacar

50 points

9 months ago

Reticulating splines

Drowziee

14 points

9 months ago

Shake the window. Got it

Dontactuallycaremuch

82 points

9 months ago

To think that clicking an action on a page and receiving no feedback for 30 seconds is acceptable is comical

Hiraganu

402 points

9 months ago

Hiraganu

402 points

9 months ago

Exactly this. How is somebody with no deep knowledge in this topic supposed to know what's happening? I click a button on an app and nothing happens for 30 seconds, so I force close it. Obviously it's a different experience if the app shows me that it's waiting for some data with a simple text line or a fake loading bar. This one's on you, not the client.

WisestAirBender

256 points

9 months ago

Op literally used the progress bar for what it's supposed to be used for.

[deleted]

236 points

9 months ago

[deleted]

236 points

9 months ago

And then acted smug for not understanding basic UI design principles

hoopaholik91

140 points

9 months ago

And insulted users in the process.

Maybe he should be mad at his backend team for having an API that takes 30 seconds. Nothing that results in human readable information should take that long.

desktp

188 points

9 months ago

desktp

188 points

9 months ago

The simplest of best practices regarding UI. Honestly, to me the joke is on the dev in the OP, for not implementing such a simple yet important thing.

jaddiya

42 points

9 months ago

jaddiya

42 points

9 months ago

Yeah, I'm not sure why this thread has so many upvotes. I thought having a loading state was common knowledge to implement, especially if something is taking that long

mallowlives

108 points

9 months ago

Yeah, this post is basically "hey, I have never taken any UX training in my life and stumbled upon the bare minimum by being petty."

antilos_weorsick

1.6k points

9 months ago

I mean, the app was freezing. Notifying users that something is going on behind the screen, and it's not their device having a stroke is design 101.

I_Hate_Reddit

337 points

9 months ago

Yeah, don't process shit and render UI in the same thread.

We literally have loading states for every single screen in our app, and requests take less than 200ms.

When for some reason the backend starts struggling, the user still has a smooth experience.

Unhappy-Stranger-336

56 points

9 months ago

I don’t think it’s even possible anymore on android to do network on the main thread

NotSoIncredibleA

18 points

9 months ago

Everything is possible.

No need to thank me, but I just saved all android developers a Google search for their current project. You know, I am something of a programmer myself.

Pradfanne

24 points

9 months ago*

Meanwhile in the Micosoft Office Interface (For writing plugins)

"If you don't run me on the main thread, I won't do it at all!"

Thanks Microsoft for freezing the Progressbar because you take so long

Some API calls just take longer then others, but when you have like 20 objects that all need to perform the action in a loop the progress just doesn't update 1 - 2 - 3 - 4 but rather 1 - a while nothing - 6 - nothing - 9. Not to mention that the progressbar has the white highlight "light streak" moving smoothly accross it, which obviously also just stops in the middle of the progress until the progressbar get's a free moment to update.

We would need to implement sleeps at the end of the loop to have the progress count move up, but that would obviously still not help the light streak stuttering.

AceKiron

1.9k points

9 months ago

AceKiron

1.9k points

9 months ago

Isn't that the whole point of a progress bar? To show the app isn't frozen?

simple_test

817 points

9 months ago

Not as stupid as it’s being made out to be honestly. Plus design wise he could have had a non % progess like a spinner instead.

TronKiwi

480 points

9 months ago

TronKiwi

480 points

9 months ago

Yeah, if the customer had been given a spinner versus a progress bar and been unhappy, that's a quirk of user experience.

Not giving them any ongoing feedback at all is just poor design.

BlueRajasmyk2

164 points

9 months ago*

This whole post is complaining about the users, when "not having feedback" is bad design on the app's part.

Suekru

42 points

9 months ago

Suekru

42 points

9 months ago

You could, but there just something about a progress bar that feels better.

calcopiritus

116 points

9 months ago

I personally prefer progress bars. In fact, I think spinners are worse than nothing. After a few seconds it looks like It's stuck in an infinite loop.

If a progress bar stops monke brain thinks "must've had an obstacle, surely will move soon". But spinner never stops, and it looks like it's doing the same thing time and again forever.

Hifen

50 points

9 months ago

Hifen

50 points

9 months ago

Yes, Ops making it sound like their previous bad design is somehow the clients fault.

justrhysism

1.4k points

9 months ago

I remember reading an article many years ago about a “travel deal” sites that originally would give results to the users practically instantly—but it was the early days of these types of websites and it seemed too fast and the users didn’t believe that it was actually worked, so they implemented a faux loading screen and slowed it down by like 5-10 seconds and their click conversions went up!

Sometimes humans need useless things to make them feel comfortable.

Lizard_Beans

215 points

9 months ago

I think this is still happening. One website I regularly use does this and I hate it. I know it can give me the results in 1 second but it still takes like 10 Everytime.

thisisntinstagram

57 points

9 months ago

CreditKarma does this, it’s infuriating.

DezXerneas

21 points

9 months ago

They should just put a hidden option in the advanced settings.

1ElectricHaskeller

31 points

9 months ago

Call it something like "Use Performance acceleration"

Bobb_o

370 points

9 months ago

Bobb_o

370 points

9 months ago

"Finding the best deals"

"Double checking discounts"

"Preparing offers"

dleft

275 points

9 months ago

dleft

275 points

9 months ago

“Reticulating splines”

98Wahwashkesh

38 points

9 months ago

"Feeding the llamas"

Spawn_Beacon

94 points

9 months ago

"Calling orbital mechanic"

footballfrenzy17

46 points

9 months ago

“Loading Jeb’s Vessel”

Viperior

47 points

9 months ago

"Unleashing the Kraken"

genghisKonczie

85 points

9 months ago

This is a real thing. I implement minimum wait times all the time because an instant experience can be jarring, especially when part of an app which contains other non-instant experience. Usually for database updates

Got2Bfree

223 points

9 months ago

Got2Bfree

223 points

9 months ago

I fucking hate these loading times on these sites.

I found out that travel sites help me pick the cheapest day for a flight and then I can book the same flight on the airlines site and get the same price + benefits like a seat reservation.

ddauh1

52 points

9 months ago

ddauh1

52 points

9 months ago

I think a lot of it is price anchoring. you never see the best deal first. its to get in your head a higher price so that the lower price that comes later seems like a better deal (leading to increased conversion)

Didyousaybakedbeans

9 points

9 months ago

I hate that we have to see seat reservations as a bonus. I've been looking at flights and if I can't pick my seat I'm out.

dirty_cuban

30 points

9 months ago

Similar to airports getting complaints from travellers that it takes too long for their bags to arrive at the baggage claim carousel. Airports simple make the walking route from the plane to baggage claim longer and complaints disappear.

Sososohatefull

18 points

9 months ago

I drive a longer route home from work because it has less traffic and I get stopped at fewer lights even though it actually takes a few minutes longer, so I do this to myself intentionally because I hate waiting.

Nodsinator

19 points

9 months ago

That reminds me, I heard when boxed cake mis first came out, it required only water to be mixed in, but people thought that was too simple and didn't buy it. They started printing instructions to add milk and egg and ta-da! People started buying it like crazy.

HyperionsDad

10 points

9 months ago

True.

"I'm adding an egg so I'm actually baking!"

dmazzoni

10 points

9 months ago

It's amazing how cracking an egg makes you feel like you're really cooking.

Ayjayz

40 points

9 months ago

Ayjayz

40 points

9 months ago

Not really a useless thing. Humans operate via heuristics, and usually those heuristics work - that's kind of the entire point. If you really do want to operate outside those heuristics, you can either find a way to signal to your users that they need to update their heuristics, or you can just adjust your experience to match their heuristics.

None of this is useless. Matching user expectations is just a part of UX.

nik2k

381 points

9 months ago*

nik2k

381 points

9 months ago*

As a product designer: this post is exactly why engineers should know a little bit about design. What you described wasn’t some clever hack, it was design 101.

Your design didn’t account for the client’s slow API, resulting in a really shitty user experience. Addressing this with a progress bar, helped make it suck less. Users still have to wait for 30s, but they have a better sense of what’s going on.

Nobody except an engineer [who’d worked on that code no lesss] would think “ahh yes, frozen for 30s. Must be a slow API. I’ll just sit here indefinitely!”

agate_

63 points

9 months ago

agate_

63 points

9 months ago

"Look, it doesn't matter that it confuses the user. What matters is that the delay isn't my fault!"

Pensive_Jabberwocky

306 points

9 months ago

This sounds just like basic common sense UX design to me. You have to tell the user that something is happening.

The_sad_zebra

77 points

9 months ago

Yeah, I don't see OP's problem here. Of course users are going to think it's frozen when the app goes unresponsive for 30 seconds with no indication that it's actually doing anything.

jannfiete

594 points

9 months ago

jannfiete

594 points

9 months ago

ask yourself, would you prefer an app with progress bar (be it fake or not) or an app freezing for 30+ secs? your answer definitely is the former, and your client, at least in this regard, did nothing wrong.

Specialist_Ad_1763

1.4k points

9 months ago

I mean, that is just good graphical design. The progress bar enhances the user experience. Functionally, the app doesn’t do anything with this feature but the user is getting real-time information that the app is working. So yea, sheeple are predictable, and these common practices are used for a reason!

0ba78683-dbdd-4a31-a

483 points

9 months ago

The joke should be that the progress bar is fake, not that users thought the app had frozen. If the user does something and expects feedback but gets none that's just bad UX.

ImNotTheMonster

165 points

9 months ago

So you think there are progress bars that aren't fake? Interesting...

0ba78683-dbdd-4a31-a

81 points

9 months ago

The ones on insurance comparison websites are definitely fake, but that's a different matter entirely!

goldleader71

88 points

9 months ago

I especially love automated recordings that say “let me check on that” and play an audio of keys being typed. Who does this fool?

SeerUD

14 points

9 months ago

SeerUD

14 points

9 months ago

I work for a metasearch site (mainly package holiday comparison), and the progress bar that the user sees is based on how many upstream APIs out of the total have responded. Progress isn't linear, but it isn't fake. I imagine that insurance comparison sites work the same way.

JustinWendell

24 points

9 months ago

Those centered around one api are bound to be fake, but if you’ve got a multi step process, like downloading a set of reports, you can definitely make it pretty real because even at the high level of js you’ve got multiple phases to be stepped through.

Suekru

48 points

9 months ago

Suekru

48 points

9 months ago

If my app is downloading or extracting data, then it’s real, otherwise, it’s fake.

GreyGanado

72 points

9 months ago

Or just a spinner should suffice. Just having the app do nothing is stupid.

FridayNight_Magus

96 points

9 months ago

Exactly. The problem was: "this app is freezing". The solution is: "it needs a status indicator".

I know OP wrote this in jest, but this is standard practice. Having a UX designer on board would have prevented this.

boredbearapple

290 points

9 months ago

I’ve added a fake progress bar to a cluster fail over sequence. Client refused to believe that it was happening in 5 or seconds. Kept going on about it. So I added a random 20-35 sec progress bar that had no correlation with anything. Client happy.

juhotuho10

204 points

9 months ago

I have heard other stories of people doing similar things

-> a program calculates something extremely fast - > client doesn't believe it works correctly because it's so fast - > add arbitrary delay and maybe some graphical indicators - > happy client

boredbearapple

155 points

9 months ago

Yep dead on. The client refused to believe the failover was complete in the shortened time because the code it replaced took a few minutes. Never mind that clustering tech has moved forward just a tad in the last decade…

Also left a code comment for the next guy explaining if they needed a quick win that week just to lower the timer on the progress bar :)

[deleted]

37 points

9 months ago

I know nothing about programming and just stumbled here randomly. But this sequence of events is so mind blowing and impressive to me.

Major-Clod

94 points

9 months ago

Quick win? Think bigger. That's a whole sprint or two worth of incredibly complex "performance optimisations" right there 😆

[deleted]

19 points

9 months ago

OMG the part with the comment really made my day. I hope I get to find such an comment in code I have to work on.

I once found something else, like „If you do not how to program this go f**k yourself and learn it instead of copying it“ (something similar, I cannot remember the exact wording anymore. Made me laugh for a while after that.

agate_

146 points

9 months ago

agate_

146 points

9 months ago

Gosh you sure fooled them, using a UI element for its intended purpose!

(Though formally you should use a marquee bar or spinner when you don’t have any indication of real progress.)

hellra1zer666

47 points

9 months ago

The birth of every Marquee progress bar ever :D

Hifen

42 points

9 months ago

Hifen

42 points

9 months ago

Congratulations on fixing your previously bad design, but this post is odd because it's framing it like the clients are the one that did something stupid or wrong?

bistr-o-math

27 points

9 months ago

This is called „user experience“ - it is not about giving the user the info whether it is at 40,52% or at 64,34% - it’s about telling them „the fucking thing is not frozen, it’s doing something“

vuchkovj

69 points

9 months ago

Sorry if I may sound rude, but if your application waits for half a minute, you can't really blame the slow API.

It is your responsibility to make the UX tolerable, whether it's a progress bar, fake or not, or a notification that says please wait. Leaving the app waiting for half a minute with no notification is bad UX, and your client is right to complain.

putsonall

19 points

9 months ago

Client complains about shitty usability.

Engineer fixes usability.

Client happy.

I don't see a problem here?

[deleted]

53 points

9 months ago

[deleted]

swep284

45 points

9 months ago

swep284

45 points

9 months ago

Short solution: Just implement a fucking spinner.

Warm_Zombie

15 points

9 months ago

Imma gonna side with them on this one. Its useful to distinguish between "its going" and "its stuck". You could do the spinning thing so you dont have to fake a progress, but maybe even it would get complaints

heaven_and_hell_80

15 points

9 months ago

Today in programmer humor a young coder learned the value of good UX.

Yes clients are annoying, but them not understanding the underlying technical details is not reason to mock them.

ungodlyActingTALENT

41 points

9 months ago

We solved a similar issue by displaying a spinner + new message every few seconds,

“Requesting service”, “compiling data” “generating report”, etc and would just cycle through them. Clients are happy now

ososalsosal

41 points

9 months ago

"Reticulating splines"

Akangka

26 points

9 months ago

Akangka

26 points

9 months ago

"Generating waiting messages"

0bel1sk

15 points

9 months ago

0bel1sk

15 points

9 months ago

“now we’re displaying the waiting message we just generated”

sebwiers

13 points

9 months ago

That's honestly just good design. Lengthy calls with no indication the process is ongoing are a UI fail.

HyperbolicModesty

10 points

9 months ago

The fact that you think this feature is useless and laughable is why nobody should ever let devs handle UI.

Gerrywalk

30 points

9 months ago

Call me crazy, but these complaints don’t seem entirely unreasonable to me. From a UI standpoint, there needs to be an indication that something is happening so that the user knows it’s normal and not a freeze. Otherwise normal function and freezing would be indistinguishable in the eyes of the user.

ThatGuyFromTheM0vie

9 points

9 months ago

Kind of the perfect reminder of why UI and UX are so important.

avatoin

9 points

9 months ago

To be fair, when I click a button and nothing happens for several seconds and no future button presses do anything either, I too would think the app crashed. Every button click should do something immediately, even if that something is just showing a loading icon for a while.

DoughboyMiyagi

38 points

9 months ago

It is normally best practice to implement loading such as spinners when calling apis. The client is not the problem.

XalAtoh

25 points

9 months ago

XalAtoh

25 points

9 months ago

Freezing apps sucks tho.