The story
What was broken
The usability issues weren't subtle. In testing sessions, users would land on the main screen and pause where they shouldn't - reading icons, second-guessing what they meant. The customize icon, a pencil, read as "edit my connection." The Dedicated IP icon, a map pin, was indistinguishable from region selection. The "Automatic" server option stopped one user cold:
"I would even give it a one [look] because I need it to be clear to me.
I'm using a VPN - I need flexibility, so what is this 'Automatic' all about?"
Beyond iconography, the UI was failing on fundamentals. A contrast ratio of 2:1 against the required 4.5:1 meant the app failed every WCAG check for text, large text, and graphics. Touch targets were undersized throughout. And under the surface, the component situation was a mess - patterns duplicated across screens, no documentation, inconsistent states that made every QA cycle expensive.

What I decided and why
A designer on my team flagged the issues after a scheduled usability test. My job was to decide whether they were worth investigating or dismissing. Research costs money, and pulling engineering into a redesign alongside an already-scheduled Android re-architecture costs more. So before committing to either, we built a rough prototype of the proposed fixes with estimated impact attached - enough to make the case. A few late meetings and a lot of coffee later, the department leads agreed and the redesign got folded into the existing work.
"Automatic" became "Optimal Location" - the original name told users nothing about why letting the app choose was a good idea. We circulated options including "Best Server" and "Recommended," but both were too vague to be meaningful. "Optimal Location" named what the feature actually delivered.
The Dedicated IP map pin was replaced with a text-based "DIP" label. A map pin means "pick a location" - the same language the region selection flow uses. Text removed the conflict. The change was reflected in onboarding for new users and in the update changelog for existing ones.
The component library got a full build because the Android re-architecture gave us the window to do it right. The conditions were there and wouldn't be again soon.
What shipped
Server selection became readable at a glance: Optimal Location renamed and clearly positioned, color-coded latency indicators replacing plain millisecond values, Dedicated IP identified by text. Accessibility went from failing every WCAG check to 95% AA compliance, with contrast at 7.57:1 and touch targets documented and verified throughout. The component library gave the team - and future teams - a single source of truth with documented states, variants, and accessibility notes built in. And the visual language finally matched the brand PIA had been running everywhere else since 2021.






