← all work

Employee lifecycle: Mover

Lumos · 2025

Timeframe: Discovery to M2 launch, 5 months

Lumos is an identity and access platform. It started with AppStore, where employees request just-in-time access, and while there was already some foundation in onboarding and offboarding, Lumos had no real edge in managing the employee lifecycle. In 2025 we invested in completing that lifecycle, with the new addition of Movers.

TL;DR

Joiner–mover–leaver is one of the key product verticals for the identity industry, and the middle child is overlooked by almost everyone. This means those who change titles or teams keep every access they had and quietly collect more.

We saw a real opportunity in both upselling into existing accounts, and creating an edge in deals that come from having a complete JML vertical. We shipped the mover flow while building the workflow primitive that the rest of the platform now runs on.

The lifecycle drawn as a loop: Onboarding leads to AppStore, AppStore to Movers, Movers to Access Review, Access Review to Offboarding, and back round to Onboarding. Onboarding, Movers and Offboarding are highlighted as the lifecycle stages; AppStore and Access Review sit in grey as the surrounding platform.

Challenges

In discovery I mapped six distinct mover problems across roughly fifteen enterprise accounts. They concentrated into three challenges:

  • Fragmented systems - Admins grant access through some combination of IdP, ITSM and bespoke automation, with no single source of truth
  • Employee friction - Aggressive automation revokes access prematurely, costing productivity, and admins scramble to fix the gaps until the sprawl is unmanageable
  • High cost of ownership - Rulesets and policies live in several tools at once, and nobody has time to revisit them

All of these challenges boil down to two tangible outcomes:

  • Access that should arrive doesn't - People wait for weeks for new access
  • Access that should be revoked doesn't - When someone changes roles, sensitive permissions need to be revoked immediately but more often than not, people only notice it during an Access Review

Key bets

01Policies are the source of truth

The early prototype let admins manually edit a per-employee mover plan: see what's changing, adjust it, approve it. We maximized for what we thought the user needed the most - the flexibility to change access ad-hoc.

Four design partners reframed the product for us. Editing by hand doesn't survive enterprise volume - it undercuts the authority of the Access Policy and puts an admin in front of every person in transition. What they were really buying was a long-term model, one they could trust to still hold in three years.

Our mental model changed from "policies can be used as a starting point, and admins patch the rest by hand" to "policies are the source of truth, and exceptions become traceable ad-hoc requests against them".

The early exploration: a staged mover record where the admin reviews and edits every grant and revocation by hand
The proposed flow: setting up Access Policies feeds setting up a Mover Workflow, which Lumos auto-runs when an attribute changes, comparing the user's access under the old and new policies and then granting, revoking or updating access to align with the new policy. Anything outside policy branches off as an ad-hoc request - provisioning through AppStore, deprovisioning as an access-removal request.
The new journey proposed

02Our differentiator is time to value

Almost every customer was already handling movers through Okta or Entra rules, which apply changes the instant an attribute flips. That is too aggressive: it cuts access people still need, admins scramble to patch the gap, and eventually those patches become the sprawl.

"How do we make workflows impactful and scalable without it being another burden for admins?"

Visual draw-your-own-flow builders (Make, Tines, Okta) were the obvious reference and the wrong fit. Our admins didn't want a canvas to draw on; they wanted defaults that covered the common case and a short path to value. So I took a deliberate position: usability and speed first, arbitrary composability second.

Two canvas-style workflow builders: a dark canvas with HTTP request, email and trigger nodes wired together by hand beside a settings panel, and a light board of connected cards, each holding a long list of fields to map.
Visual draw-your-own type of workflow with maximized flexibility
Five explorations of the same workflow, side by side: steps pinned to relative dates like five days before start date; a flat list of steps with wait steps between them; the same list with each step's parameters expanded inline; steps grouped under After Completion and time-delay markers; and the shipped shape, a Mover Workflow whose trigger sits above Gain Access, Remove Access and Change Access groups, each holding its own steps and time functions.
Some explorations for how the workflow works

03Invest in a workflow primitive, not a third bespoke feature

Mover needed custom workflows. Lumos already had two separate, bespoke workflow patterns built for earlier features - each fine in isolation, neither reusable. Adding a third would have been the cheapest thing to do that month and the most expensive thing to own.

I saw the value in building a reusable primitive. I mapped every possible step parameter - native actions, integration actions, expression language, and stress-tested the component against real customer examples before fixing its anatomy.

That work paid off immediately. Since we'd already solidified our platform patterns for Workflow Builder and Workflow Record, we just needed to apply those to this as the first use case, without building bespoke UI from scratch.

The two workflow patterns Lumos already had, stacked: a Provisioning Steps list with numbered steps and per-step parameters, and below it a separate workflow builder organised around a trigger with excluded users, permissions, source and inactivity-time conditions.

Two bespoke patterns, each built for one feature

One step, defined once and reusable everywhere


04The shape of a mover flow

The biggest product and design decision was how to conceptualise a mover flow at all. There were two ways to model it.

  • Option 1 - Lumos looks at every piece of access a user has and sorts it into three mini-workflows: grant, revoke and review.
  • Option 2 - Lumos focuses on policy-driven access, and treats mini access reviews as a second product entirely.
A mover event fans out into three mini-workflows. A record showing Ron Weasley's role changing from Product to Engineering feeds a list of his access - Salesforce, Loom, Notion, GitHub and Pylon - into a Mover Workflow, which splits three ways: access he definitely needs goes to Mini-Onboarding (Notion), access he definitely does not goes to Mini-Offboarding (Salesforce and Pylon), and access nobody is sure about goes to a Mini-Access Review (GitHub and Loom).
Option 1: sort everything a user has into three buckets, and run a mini-workflow for each
The same mover event split by how the access was granted. Ron Weasley's role change feeds his access list into two branches. Access Granted through Policies - Salesforce, Notion and Loom - resolves automatically: Notion and Loom are kept because an access policy is also defined for engineers, Salesforce is lost because one is not. Access Granted Elsewhere - GitHub, granted through an AppStore request, and Pylon, whose origin Lumos doesn't know - is tested against a review condition, if user.team changed AND user.manager changed, and only then surfaced for a human to keep, lose or extend.
Option 2: policy decides what is kept and lost, and only access granted outside policy goes to review - the model we shipped

We went with the second, for three reasons:

  • Access can be granted and revoked with no manual step in between
  • We get to be more opinionated - everyone should follow access policies, and only more mature customers need recertification, which is the review piece
  • A smaller scope meant we could displace Okta and Entra sooner

Future vision

As we gradually rolled this out, the happy path got the attention it deserved. But a major gap became concrete when a single upstream issue produced hundreds of onboarding errors for one large customer: the product could tell you that hundreds of things had failed, but not that they were all the same thing failing.

That incident is what convinced me lifecycle management has to get proactive rather than merely observable - detect the pattern, summarise the problem, propose the fix. I explored what that could look like as a future direction, and I think it's the right next bet.

A concept for the proactive direction: an Employee Lifecycle overview with an Alerts feed - failed to deprovision access for 12 users marked as leavers, a bulk department update that set 102 users' attribute to null, a leaver workflow stuck at Data Transfer for five days - over a Change Monitor table of detected identity changes. An open alert drawer summarises the failure, lists the 12 impacted users, and offers AI Suggested Actions: most errors appear network-related, with a recommendation to retry the step, a Root Cause Analysis that reviewed the upstream HRIS feed and found expired AWS app credentials, and Dismiss or Approve buttons.
A concept for the proactive direction: detect the pattern, summarise the problem, propose the fix

Impact

"Movers ability to delay access removal in movers is a key differentiator for Lumos which is not supported by Okta." - an enterprise design partner, who added that the delay "effectively buys weeks of time to respond to changes which they don't have now."

Mover completed the JML vertical and turned Lumos into a full IGA solution. Workflow and workflow record became reusable platform primitives that now power onboarding, offboarding, general access provisioning and removal across the product.

  • Retained an enterprise compliance-software customer who was on the way out; carried a Fortune 100 airline through a POC
  • Mover became the retention layer, not just the completed vertical: its revocation edge cases now sit under "defence" in the following year's strategy

More on the thinking behind this, on the Lumos blog: The Future of Lifecycle Management Is Unified, Intelligent, and Human.