Skip to main content


Nobody asked for this, but I just signed up for insurance with State Farm and I already have some strong thoughts and feelings about their app design.

This is an impromptu design critique because I cannot turn this part of my brain off. This is a curse.

This entry was edited (6 months ago)

Shiri Bailem reshared this.

in reply to sam henri gold

This is the first mostly negative design critique, so I'm gonna lay out a ground rule: I won't dock points for what could be considered an artistic choice. For example…
No: "These aren't SF Symbols so this is wrong"
Fair game: "This form field transition is dog shit"
in reply to sam henri gold

Just for fun, I listed out every single view transition that happens during onboarding, including every fake-out the app does. This is the UI version of telling a story to your friend but going on constant tangents and finishing the story 20 onboarding steps later.
in reply to sam henri gold

Since this is someone's first impression of your app, it's SO important to show a clear navigational hierarchy. Where views come from, what happens when they get dismissed, etc. When sheets slide in and out and content flashes for half a second, that mental model quickly rots.
in reply to sam henri gold

Let's talk about the first onboarding, since this is the most widely applicable. It has you accept EULA, analytics, & grant location. It lists what location gets used for, but none are immediately useful. This should not be here — ask for permission when the user wants a feature.
in reply to sam henri gold

Frankly, this entire step can be cut. Merge the EULA acceptance into some other action ("by continuing, you agree to blah blah blah") and just choose a default for analyics. Stick the toggle in settings.
in reply to sam henri gold

I'm fine with the core login flow, it just needs WAY fewer transitions. It seems like the cross fade is the common denominator when the experience chokes up. Cut fade transitions altogether and less intrusive ways to show progress. Maybe show spinners in buttons, instead.
in reply to sam henri gold

Security has been a huge painpoint for the NUX (new user experience) here. It often is, but there are so many possibilities to make this suck a little less. Here are all of the security settings:
in reply to sam henri gold

A lot of banks and similar entities have security setups like this. And that sucks big time. Because we know that SMS and email one-time passwords are not super secure, the onus is on the user to:
1. Have a random unique password, and
2. Not get SIM swapped or email breached
in reply to sam henri gold

The lowest of low-hanging fruit is to allow time-based one-time passwords (TOTP) to let something like 1Password handle that for you. But ideally, they would forgoe this entirely and support passkeys. So with the changes so far, this is what onboarding could look like:
in reply to sam henri gold

Speaking of nonsense banking apps do, this drives me up the wall: After a cold start, it throws up the login screen and starts a biometric auth session. Entirely unnecessary. Determine sensitive parts of the app and require auth to unlock them for the rest of the session.
in reply to sam henri gold

And whenever `applicationWillResignActive` is called, the app will flicker out whatever screen you're looking at and replace it with a blank logo. Again, this kinda makes sense for sensitive screens. But beyond that, **it's just security theater**. This looks fucking awful:
This entry was edited (6 months ago)
in reply to sam henri gold

Moving onto the more skin-deep stuff. The app uses tab navigation:
-Overview
-Insurance
-Claims
-Finances
-More

The selection state for a tab is just shifting from gray to red. If you grayscale the screen, it's the same shade. I'd give the selected tab a filled icon variant

in reply to sam henri gold

In the Overview tab, the header said "Good evening" at 4:30 PM. Whatever. I digress. I get three sections in this tab:
- Upcoming bills (useful)
- Hints & tips (useless)
- Offers & discounts (ads)

Get rid of this tab, move upcoming bills into Insurance, and make it the default.

in reply to sam henri gold

Also, one of the "Hints & tips" was advertising new features in the app. When you tap the card, it yanks up a sheet with a card advertising a new feature. Why...why isn't this just the top level card. Why was this sheet necessary.
in reply to sam henri gold

I'm still waiting for my policy to kick in, so this card says pending. I'm baffled by this card. The status dot should be significantly larger. Also, there is no reason for the policy category to be in a chip. Put it loose in the card, no container. Just raw dog it.
in reply to sam henri gold

Right under that policy card, there's a prompt to visit the document center. This could probably use some better copy (why would I want to visit that? it sounds boring. what's in it for me) but the real thing I want to point out is error handling.
in reply to sam henri gold

If you're going to advertise something at the second-to-top level of your app, you better make sure it fails gracefully. I've done nothing weird to screw with the app AND YET it throws this ugly technical error at me. I'm guessing because I have no documents. Make an empty state.
in reply to sam henri gold

In fairness, there is an empty state when you dismiss that error and proceed anyway. I've slowed down the video to ¼ speed so you can see this animation: to make room for the segmented control, everything BUT the description slides down. But the description is the same copy 🤷‍♂️
in reply to sam henri gold

Here's just a standard empty state. The description text is leading aligned, but the image and button are both centered. Easy fix: center the stack, center align the description text, reduce the prominence of the CTA.
in reply to sam henri gold

If you've used SwiftUI, you'll be familiar semantic toolbar item placements. destructiveAction, navigation, etc. These exist because we've been conditioned to expect certain button types in certain positions. So imagine my surprise when I saw Log out in the confirmation position
in reply to sam henri gold

Make log out a destructive bottom, position it to the bottom of the list, rename "Close" to "Done" and put it in the confirmation position. Boom, fixed your nav bar.
in reply to sam henri gold

There are a few screens where navigation titles compete with some arbitrary heading in the view. Avoid having two headers of the same visual prominence right next to each other.
in reply to sam henri gold

Okay. I've done enough free work for State Farm Insurance Inc. The point of this being: these are all papercuts. Nothing fundemental. Just little things that worsen the experience. Take some time to audit your project for these things. I promise you'll be better off because of it
in reply to sam henri gold

btw, Lickability (where I normally write these threads) did not endorse this or anything, this is literally just me kvetching about an app that has been forced into my life.

more design threads are planned for @lickability as well as here!

in reply to sam henri gold

I just signed up for the umpteenth EV charging plan. App asked me three times for phone number and address, sabotaging autofill of course. Anything car related seems to be bottom of the barrel.
in reply to sam henri gold

I appreciate seeing a nice critique. This all, to me, felt like a classic "we have 5 teams working on this app but no single person driving the overall UX or CX but we delivered software" situation. What happens when no one looks at the whole thing? Mostly this.
in reply to sam henri gold

sam henri gold, you haven't seen real security theater in bank apps if you haven't used the Emirates NBD app.
in reply to Григорий Клюшников

@grishka I secure all of my software by checking if the file path for Cydia exists and, if so, not letting my user access their money.
in reply to sam henri gold

@grishka this whole blog post I found while writing this thread is absolute poison. This doesn't secure anything, this just makes tinkering (and, in all likelihood, developing workarounds for a shitty app) more of a pain in the ass. medium.com/adessoturkey/ios-ap…
in reply to sam henri gold

sam henri gold, my thoughts looking at the jailbreak detection section: haha method_exchangeImplementations go brr
in reply to sam henri gold

Along the same lines are those banking/brokerage apps that cue up a “You’ve been logged out” push/local notification if you don’t explicitly log out yourself.

If I’m automatically logged out… that’s good! I don’t need to be told about it.

in reply to Jeff C. 🇺🇦

@jeff In Fidelity’s app years ago, if you return back from the app switcher after any amount of time, it would sign you out and you would get a non-dismissable alert “You have been signed out. Please log back in."

and you just couldn't dismiss it. you had to force quit the app.

in reply to sam henri gold

that was really interesting, although I shudder at the thought of installing an insurance app.
in reply to sam henri gold

great write up! I used to work on this app 🫣🤭 definitely a fun surprise to see it in my feed this morning.
in reply to sam henri gold

Great stuff! one small thing: i think (at least in Europe) that you’re required to pop up a terms&conditions screen.
in reply to Mathias af Jochnick

@2happy1sad it depends on the implementation! I’m not sure about enforceability of browse wrap (vs click wrap) agreements in the EU/under GDPR. In US case law, this example from Uber was enough for the court to enforce the agreement.
in reply to Mathias af Jochnick

@2happy1sad I figured this was interesting enough to poll opinions on separately. Link if you wanna follow along on the discussion: hachyderm.io/@samhenrigold/112…


Got some questions about a critique I gave on this app last night about the EULA acceptance screen, so I figured I'd break this out. Do you have any opinions on these methods for mandatory legal agreements before using a product/service? I made a quick mockup representing their current design and the type of design I argued for.

Curious to hear from law people and non-law people about this.
hachyderm.io/@samhenrigold/112…