← Back to Work

Frontline Education - K12JobSpot

User Migration Redesign

Achieving a 104% increase in flow completion after a time-constrained redesign.


What I did

Diagnosed an issue with an existing account migration flow and designed a new approach that reduced the number of decisions users had to make during the migration process, as well as removed a useless additional task.

Why I did it

The migration flow to the new version of K12JobSpot had just under a 50% completion rate. Clearly a rework was needed, as the whole product rebuild depended on user adoption.

When it went sideways

Two days before the final sprint, engineering found the identity platform couldn't build the real-time detection the redesign depended on.

What changed

We shipped a blunter, date-based fallback in the time we had. Migration completion went from 47% to 96%, and the flow dropped from 8-10 screens down to 2-4.

Four K12JobSpot mobile screens labeled Authenticate, Onboard, and Apply, showing a sign-in prompt, resume upload and profile visibility onboarding steps, and a job application form pre-filled with personal details
Whether on phone or desktop, the new flow makes it easy for users to get started and apply to jobs.

Context

Launching a new version of K12JobSpot, the largest education-focused job board in the country, meant moving all 2.6 million users off a legacy identity system and onto a new one owned by our platform team. This required every user to create a new account, with an option to migrate some of the data from their old account. Early adopter numbers were bad: just under 1/2 of the users who started the migration finished it. Everything else about the launch rode on people actually reaching the product, so figuring this out was critical.

Diagram mapping legacy and NextGen accounts across K12JobSpot and Frontline's other product, color-coded by B2C and B2B users, with dotted lines for job postings and notes on migration constraints
The diagram I made after the initial conversation around migrating users from the old to the new system. At this point in time, Product was still trying to figure out what the best approach would be for the business.

The Problem

The existing flow asked users to sort themselves before signing in. They had 3 options: new account, legacy account, or no account yet. Each choice opened another branch of screens and confirmations, and a user could pass through eight to ten of them before getting in. Additionally, any users with legacy accounts that managed to make it through the flow were immediately forced to migrate their data, or lose it for good. A huge roadblock when all they were trying to do was get into the product.

A few constraints made this harder than a normal login redesign:

  • The legacy and modern databases couldn't talk to each other freely.
  • A separate platform team owned authentication.
  • We couldn't customize the platform-owned login screens.
  • Legacy passwords didn't always clear the new security requirements.
  • Data from the old account didn't line up perfectly with the new form fields.
  • Profile data in the new system can only be saved in sections. If a user didn't have data in every field in a section, they were unable to save it until they filled in the missing information.
Annotated flowchart of the original migration screens, walking through the starting screen's three choices, sign-in, account creation, and several info-only and two-choice steps before a user reaches the product
This authentication and migration flow resulted fewer than half of the users making it into the new platform. It could take as many as 12 screens before a user is actually logged in and able to use the platform.

Making the Cut

Once I had a clear picture of the flow, I began with what seemed to be the most obvious problem: the unexpected data migration. Was it necessary? We didn't have time to rework the process, so it was a question of whether or not to cut it entirely. It had been in the plan long enough to have become a given. When I raised cutting it, Product pushed back — their worry was reasonable, that users would be upset to find old data gone.

Rather than argue, I asked the PM to pull three numbers:

  • How many profiles had been created in the past year?
  • How many edited in the past year?
  • How many of those held anything beyond a name and email?

About 80,000 accounts had been created/updated in the past year, and only about 1/3rd of them had more than the basics. That meant that only about 1.2% of users would lose data that wasn't likely stale.

Additionally, the fields in the legacy product didn't match the new product, so even when we did migrate data, it was incomplete. Users were forced to fill in the gaps immediately after getting through the long account flow, which was worse than just starting fresh.

Once Product saw the numbers, they came around, and were relieved to let it go. They added a line to the migration announcement email telling users who wanted their old data to retrieve it first, since it wouldn't carry over. With data migration off the table, the redesign narrowed to a single job: get the user signed in.

Screenshot of the K12JobSpot onboarding flow's Upload Resume step, with a stepper for Upload Resume, Add Personal Details, Add Certificates & Licenses, and Set Profile Visibility
A streamlined, guided onboarding wizard was a more effective way of getting job seekers started on the right foot. This approach replaced the data migration from the legacy system.

Automate the Decisions

I redesigned the flow so that all of the decisions were handled by our system, rather than the user. The user enters an email; the system checks whether it belongs to a new account, an existing Frontline Platform Account, or a legacy account, and routes them to the right screen. I worked through the routing logic with the PM and tech lead, checking each path against what the identity platform could actually support. Since we were handling the checks before asking for a password, we could securely get the user to the right place without a link between the legacy and new account databases. The most screens any given user would encounter was 2 once they input their email.

The Wrench

Two days before the final sprint was due to begin, engineering came back with a problem: the platform team couldn't build the account checks the whole design relied on. They were underwater — buried in requests and firefighting a backend that kept going down, with no room to take on more. Even more problematic: their identity system is shared across every Frontline product. Checking for legacy accounts couldn't be scoped to K12JobSpot alone — switch it on for us and you switch it on everywhere, for every product on the platform. This meant we had to find a new approach, and fast.

Bandaid

We went with a blunter, date-based rule. A message on the starting screen that warned users with accounts older than a certain date to create a new one. Two buttons: sign in, or create an account. Users who picked wrong would be caught by the system — try to create an account you already have and it sends you to sign-in; try to sign in without one and it sends you to create.

It didn't do the work for the user the way the email-first version would have. But it held onto the same rule: give people the fewest choices possible, and cover the edge cases with clear guidance instead of extra screens. Sign-in came out to two screens, account creation three, and even a wrong first guess topped out around four — down from eight to ten.

Screenshot of the shipped sign-in modal warning that accounts older than a cutoff date must create a new account, with Sign In and Create Account buttons
While not quite as smooth as the email-first approach, this experience still caps out at 4 screens at most. It relies on error messaging rather than backend checks, but was still successful.

Outcome

Migration completion went from 47% to 96%. Both figures come from Pendo, measured over comparable two-week windows — the first once we had enough volume to be confident the original flow was failing, the second in the two weeks after the new version deployed. Thanks to the flood of new users, the districts have seen a significant increase in quality applicants for the jobs they are posting, which is the ultimate customer outcome we were aiming for.

The full storymap of the authentication, onboarding, and application flows in K12JobSpot. The goal of this project was to reduce the authentication and onboarding pieces as much as possible, to let users get to the thing they actually wanted to do as fast as possible.

On Reflection

Clearly the biggest misstep on this project was the disconnect between the K12JobSpot team and the Platform team. I'm still not quite sure how it happened, since we were meeting with them regularly, but the result was that we didn't know what the platform could and couldn't do until it was almost too late to react. The ideal solution that I had spent time working out and vetting with the K12JobSpot team wasn't viable. Since this project I've made sure to triple-check with my tech leads regarding viability, especially when external teams are involved.

Fortunately, the band-aid version of the flow worked well, exceeding expectations. It worked because both versions traced back to the goal of automating the decisions that the old flow put on the user. Because I was laser focused on shifting the complexity from the user to the system, the quick pivot still served that goal, and the user experience was clearly improved.