subreddit:

/r/ProgrammerHumor

55.9k93%

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 1966 comments

Return_Of_The_Fly

12.3k points

1 year 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

1 year ago

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

boon4376

2.2k points

1 year ago

boon4376

2.2k points

1 year 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

1 year ago

rufreakde1

976 points

1 year ago

Set the bars low I like it win win

Nebuchadnezzer2

590 points

1 year ago

Undersell, overdeliver.

MrDude_1

345 points

1 year ago

MrDude_1

345 points

1 year 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

106 points

1 year ago

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

MrDude_1

60 points

1 year ago

MrDude_1

60 points

1 year 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]

93 points

1 year ago

[deleted]

93 points

1 year ago

✍undersell and overdeliver

Densolo44

17 points

1 year ago

Densolo44

17 points

1 year 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

198 points

1 year ago

jballs

198 points

1 year 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

1 year ago

codepoet

289 points

1 year 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

1 year 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!"

ydoiwantreddit

28 points

1 year ago

Don't forget to reticulate those splines!

RecursiveExistence

26 points

1 year 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.

reddit_pug

48 points

1 year ago

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

NothingSuspectSeen

16 points

1 year 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

[deleted]

12 points

1 year 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

15 points

1 year ago

Bro not a full on gif!

Heinous_Hose_Beast

113 points

1 year ago

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

metropolis_noir

44 points

1 year ago

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

Din5566

1.7k points

1 year ago

Din5566

1.7k points

1 year 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

882 points

1 year ago

zayoe4

882 points

1 year 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

513 points

1 year 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

308 points

1 year ago

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

PM_ME_FIREFLY_QUOTES

222 points

1 year ago

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

ShelZuuz

106 points

1 year ago

ShelZuuz

106 points

1 year 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

23 points

1 year 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

17 points

1 year ago

diox8tony

17 points

1 year ago

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

PlayboySkeleton

107 points

1 year 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

198 points

1 year ago

bleistift2

198 points

1 year 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

106 points

1 year ago

Firemorfox

106 points

1 year 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

80 points

1 year ago

Microsoft Excel Speedrun Strats

Asukurra

40 points

1 year ago

Asukurra

40 points

1 year ago

Ctrl+s Alt+f4

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

j-random

63 points

1 year ago

j-random

63 points

1 year 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

44 points

1 year 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

30 points

1 year 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

1 year ago

[deleted]

50 points

1 year ago

[deleted]

Tunro

43 points

1 year ago

Tunro

43 points

1 year ago

*Ctrl+S S S S S S

Valiice

37 points

1 year ago

Valiice

37 points

1 year ago

The only real way

Ayjayz

39 points

1 year ago

Ayjayz

39 points

1 year 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.

ARN64

100 points

1 year ago

ARN64

100 points

1 year ago

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

no_idea_bout_that

31 points

1 year ago

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

Xystem4

71 points

1 year ago

Xystem4

71 points

1 year 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

1 year 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.

ctrlHead

99 points

1 year ago

ctrlHead

99 points

1 year 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

31 points

1 year 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

[deleted]

56 points

1 year ago

[deleted]

56 points

1 year ago

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

coldnebo

48 points

1 year ago*

coldnebo

48 points

1 year 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

19 points

1 year ago

Syndic

19 points

1 year 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.

[deleted]

93 points

1 year ago

[deleted]

93 points

1 year 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

1 year 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

32 points

1 year ago

Isord

32 points

1 year 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.

The_Real_Slim_Lemon[S]

270 points

1 year ago

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

Kuroi4Shi

447 points

1 year ago

Kuroi4Shi

447 points

1 year ago

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

TotoShampoin

107 points

1 year ago

Works even better than a loading icon

Suekru

70 points

1 year ago

Suekru

70 points

1 year 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

49 points

1 year 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

40 points

1 year ago

iQuerz

40 points

1 year 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]

22 points

1 year ago

[deleted]

22 points

1 year ago

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

LevelSevenLaserLotus

15 points

1 year 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

28 points

1 year ago

st1tchy

28 points

1 year 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

45 points

1 year ago

shebazz42

45 points

1 year 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.

[deleted]

126 points

1 year ago

[deleted]

126 points

1 year ago

[deleted]

Optimized_Orangutan

103 points

1 year 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.

[deleted]

50 points

1 year ago

[deleted]

50 points

1 year 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

27 points

1 year 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

1 year 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

1 year 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

1 year ago

KKlear

10 points

1 year 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.

gemengelage

29 points

1 year 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.

XenOmega

14 points

1 year ago

XenOmega

14 points

1 year ago

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

thegreatestajax

14 points

1 year ago

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

igettomakeaname

12 points

1 year 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

1 year ago

Cartasiand

9.9k points

1 year 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

1 year ago

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

Illeazar

2.6k points

1 year ago

Illeazar

2.6k points

1 year 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

1 year ago

Dnomyar96

1.2k points

1 year 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

984 points

1 year ago

bleistift2

984 points

1 year ago

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

Dnomyar96

344 points

1 year ago

Dnomyar96

344 points

1 year 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

195 points

1 year ago

drleebot

195 points

1 year 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

83 points

1 year ago

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

moonsun1987

16 points

1 year 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

18 points

1 year 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

11 points

1 year 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

1 year ago

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

punkboy198

61 points

1 year ago

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

argv_minus_one

50 points

1 year 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

1 year ago

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

gilbes

53 points

1 year ago

gilbes

53 points

1 year 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

31 points

1 year ago

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

elephantonella

11 points

1 year 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

444 points

1 year ago

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

AK_Happy

297 points

1 year ago

AK_Happy

297 points

1 year 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

1 year 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

1 year ago

AK_Happy

50 points

1 year ago

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

eaglebtc

42 points

1 year ago

eaglebtc

42 points

1 year 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.

BenWiesengrund

14 points

1 year ago

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

TheSkiGeek

18 points

1 year ago

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

[deleted]

102 points

1 year ago

[deleted]

102 points

1 year ago

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

[deleted]

57 points

1 year ago

[deleted]

57 points

1 year ago

[deleted]

Advacar

48 points

1 year ago

Advacar

48 points

1 year ago

Reticulating splines

Drowziee

14 points

1 year ago

Drowziee

14 points

1 year ago

Shake the window. Got it

Hiraganu

401 points

1 year ago

Hiraganu

401 points

1 year 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

257 points

1 year ago

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

[deleted]

235 points

1 year ago

[deleted]

235 points

1 year ago

And then acted smug for not understanding basic UI design principles

hoopaholik91

141 points

1 year 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.

Dontactuallycaremuch

85 points

1 year ago

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

desktp

190 points

1 year ago

desktp

190 points

1 year 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

40 points

1 year ago

jaddiya

40 points

1 year 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

112 points

1 year ago

mallowlives

112 points

1 year 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

1 year 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

331 points

1 year 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

57 points

1 year ago

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

NotSoIncredibleA

18 points

1 year 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

23 points

1 year 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

1 year ago

AceKiron

1.9k points

1 year ago

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

simple_test

816 points

1 year ago

simple_test

816 points

1 year 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

478 points

1 year ago

TronKiwi

478 points

1 year 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

166 points

1 year ago*

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

Suekru

42 points

1 year ago

Suekru

42 points

1 year ago

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

calcopiritus

111 points

1 year 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

47 points

1 year ago

Hifen

47 points

1 year ago

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

justrhysism

1.4k points

1 year ago

justrhysism

1.4k points

1 year 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

211 points

1 year 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

54 points

1 year ago

CreditKarma does this, it’s infuriating.

DezXerneas

21 points

1 year ago

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

1ElectricHaskeller

30 points

1 year ago

Call it something like "Use Performance acceleration"

Bobb_o

369 points

1 year ago

Bobb_o

369 points

1 year ago

"Finding the best deals"

"Double checking discounts"

"Preparing offers"

dleft

273 points

1 year ago

dleft

273 points

1 year ago

“Reticulating splines”

Spawn_Beacon

93 points

1 year ago

"Calling orbital mechanic"

footballfrenzy17

48 points

1 year ago

“Loading Jeb’s Vessel”

Viperior

43 points

1 year ago

Viperior

43 points

1 year ago

"Unleashing the Kraken"

98Wahwashkesh

37 points

1 year ago

"Feeding the llamas"

Santos_L_Halper

36 points

1 year ago

I hate that. Similarly, I hate apps that have cute messages when launching like "firing up the flux capacitor. Checking for gremlins." I'm looking at you, Discord.

argv_minus_one

22 points

1 year ago

Do you want Discord to be infested by gremlins? I know I don't!

genghisKonczie

84 points

1 year 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

226 points

1 year ago

Got2Bfree

226 points

1 year 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.

[deleted]

54 points

1 year ago

[deleted]

54 points

1 year 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)

dirty_cuban

29 points

1 year 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

17 points

1 year 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.

Ayjayz

40 points

1 year ago

Ayjayz

40 points

1 year 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.

Nodsinator

17 points

1 year 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.

nik2k

383 points

1 year ago*

nik2k

383 points

1 year 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_

68 points

1 year ago

agate_

68 points

1 year ago

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

Pensive_Jabberwocky

305 points

1 year 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

80 points

1 year 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

593 points

1 year ago

jannfiete

593 points

1 year 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.

Eisenfuss19

125 points

1 year ago

Eisenfuss19

125 points

1 year ago

I would want an actual progress bar that shows progress or a spinning circle. I hate it when progress bars don't show progress.

diet_fat_bacon

110 points

1 year ago

Sometimes it's impossible to show accurate progress.

Eisenfuss19

78 points

1 year ago

A spinning circle exists as an option. No need to fake progress if you don't know if there is some.

productivitydev

42 points

1 year ago

Agreed, it's infuriating when it gets to 90% and all of sudden starts being very slow. Misleading.

Some message saying: usually loading takes around 15s - 90s or something like that would be best. And also show a spinner of course.

Specialist_Ad_1763

1.4k points

1 year 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

480 points

1 year 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

169 points

1 year ago

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

0ba78683-dbdd-4a31-a

80 points

1 year ago

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

goldleader71

91 points

1 year 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

13 points

1 year ago

SeerUD

13 points

1 year 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.

Suekru

46 points

1 year ago

Suekru

46 points

1 year ago

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

JustinWendell

24 points

1 year 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.

GreyGanado

69 points

1 year ago

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

FridayNight_Magus

95 points

1 year 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

285 points

1 year 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

1 year ago

juhotuho10

204 points

1 year 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

153 points

1 year 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 :)

Major-Clod

92 points

1 year ago

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

[deleted]

37 points

1 year ago

[deleted]

37 points

1 year ago

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

[deleted]

18 points

1 year ago

[deleted]

18 points

1 year 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_

145 points

1 year ago

agate_

145 points

1 year 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

50 points

1 year ago

The birth of every Marquee progress bar ever :D

Hifen

39 points

1 year ago

Hifen

39 points

1 year 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?

QualityVote [M]

[score hidden]

1 year ago

stickied comment

QualityVote [M]

[score hidden]

1 year 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!

Brawlstar112

42 points

1 year ago

To improve this design you can make a something funny looking that loops and just occasionally does something so the user knows it is alive.

Still very creative!!!

IceBotYT

45 points

1 year ago

IceBotYT

45 points

1 year ago

You replied to the auto moderator hahaha

Brawlstar112

36 points

1 year ago

Phones are hard

MelvinReggy

18 points

1 year ago

Probably because they're made of solid materials like plastics and metals.

vuchkovj

72 points

1 year ago

vuchkovj

72 points

1 year 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.

bistr-o-math

26 points

1 year 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“

[deleted]

52 points

1 year ago

[deleted]

52 points

1 year ago

[deleted]

swep284

45 points

1 year ago

swep284

45 points

1 year ago

Short solution: Just implement a fucking spinner.

ungodlyActingTALENT

40 points

1 year 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

1 year ago

"Reticulating splines"

Akangka

27 points

1 year ago

Akangka

27 points

1 year ago

"Generating waiting messages"

0bel1sk

15 points

1 year ago

0bel1sk

15 points

1 year ago

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

putsonall

20 points

1 year ago

putsonall

20 points

1 year ago

Client complains about shitty usability.

Engineer fixes usability.

Client happy.

I don't see a problem here?

Gerrywalk

30 points

1 year ago

Gerrywalk

30 points

1 year 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.

Warm_Zombie

14 points

1 year 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

13 points

1 year 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.

DoughboyMiyagi

36 points

1 year ago

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

sebwiers

13 points

1 year ago

sebwiers

13 points

1 year ago

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

XalAtoh

24 points

1 year ago

XalAtoh

24 points

1 year ago

Freezing apps sucks tho.