Apryse · Senior Product Designer · 2026

Modernised inside the codebase it already had

Churn data changed leadership’s mind about a full pivot. Then the legacy Java framework decided what the redesign could be, and I designed to it rather than demanding a re-platform.

Skip to the numbers

Role
Senior Product Designer
Product
Xodo Desktop
Duration
2026
Shipped
MVP shipped · still iterating

Context

A desktop app that aged into its own codebase

Xodo Desktop is the desktop member of Apryse's Xodo suite, which also runs on mobile and web. The desktop app is built in Java, and the codebase is old enough that the interface had aged along with it. Anything I designed had to be buildable in that framework, or it was not going to be built at all.

What I did

Make the case with data, then build inside the constraint

Learned what the codebase would allow before drawing anything

The product runs on Java FX and Swing, and an acquired codebase sets hard limits on what a redesign is even allowed to propose. Designing first and discovering the constraint later wastes everyone’s time, so the early part of this project was spent working out what the framework would and would not do.

AI was useful here as a way to get up to speed on an unfamiliar stack fast — enough to ask engineering better questions, sooner. It did not replace that conversation, and we later built a proper process for it with the engineers. What it shortened was the stretch where I did not yet know enough to ask anything useful.

Argue with churn data, not with taste

A redesign is easy to dismiss when it sounds like a designer's opinion, so I did not lead with one. I brought churn data. It showed the outdated experience was driving users away, and that the fix was a full pivot rather than another round of incremental cleanup. Leadership changed its position and backed the redesign.

Redesign inside the codebase, not around it

The obvious follow-on to "full pivot" is "full re-platform," which is expensive and slow. I designed the modernization to fit the legacy Java constraints instead, and worked closely with engineering on creative workarounds wherever the framework would not do what the design asked for. The constraint set the design.

Evidence

I tested it with real users before it shipped, not after

Before release I pushed for research. We were selling this product to people who had already told us it was hard to use, and shipping a redesign without checking whether it actually read as easier would have been a guess with a version number on it.

Figma Make had just been released, so I prototyped in it instead of wiring screens together by hand — with this many screens that would have run to days. The working prototype took under a day, plus a few more hours making it behave enough like a real application that people would react to it honestly rather than politely.

I drafted the unmoderated interview script with AI against a baseline I gave it, then had the recordings transcribed and summarised: pain points and successes per session, then one summary across all of them. I asked for timestamps on the pain points so I could watch those moments myself instead of taking the summary’s word for it.

What shipped

Modernised without a re-platform

A modernized Xodo Desktop UI, built in the framework the product already had.

The part of this I would defend in an interview is not the redesign. It is making the case with data and then delivering inside the constraint instead of asking for the constraint to be removed.

Still open

The churn figures that carried the argument, the workarounds themselves, and the screens are not on this page. Some of that is Apryse's to release, not mine.