Migrating from Classic Engine to Identity Engine in Okta
A patient, plain-language guide to moving an Okta organization from the older Classic Engine to the newer Identity Engine. You will learn what changes, what stays the same, how to take stock of what you have, how to plan, test, and roll out in safe steps, and how to keep people signing in happily while the ground shifts underneath.
Imagine a town that has run its water supply through the same network of pipes for many years. The pipes work, people depend on them, and nobody wants a day without water. Now the town has designed a better network, with smarter valves, clearer maps, and finer control over who gets water and when. Moving everyone onto the new network is a good idea, but nobody wants to dig up the whole town in a weekend. The sensible approach is to survey the old pipes, test the new ones, connect streets in careful stages, and keep a way back until everyone is happy.
Moving an Okta organization from the Classic Engine to the Identity Engine is much like that. Both engines do the same big job: decide who someone is, check that they are allowed in, and let them reach their applications. The Identity Engine does it with a more flexible, step-by-step approach and with policy tools that are more detailed. But your sign-in pages, your policies, your custom code, your applications, and your users’ habits were all built around the old way. A migration must respect all of them.
This guide assumes you know nothing about the subject. Each term is explained when it first appears, each idea comes with an everyday comparison, and there is no code anywhere. By the end you will know how to survey, plan, test, migrate, and operate with confidence.
Okta changes over time. The exact migration steps, the tools Okta provides, the features that differ between engines, the timelines for older engines, and what each plan includes can all change. Treat this guide as a map of ideas, which stay stable, rather than a list of exact menu labels, dates, or feature names, which do not. Confirm every specific detail in your own Admin Console and in the official Okta documentation, and speak with your Okta contacts about your own organization’s path before you commit to dates.
1Why This Migration Matters
The engine sits under every sign-in. Changing it is changing the foundation of your front door.
Every time someone signs in through Okta, an engine decides what happens: which questions to ask, in what order, which proof is enough, and when to let the person in. The Classic Engine does this with one fixed style of flow. The Identity Engine does it with a more adaptable one, where each step can respond to what is known about the person and their situation. Newer Okta capabilities are built on the Identity Engine, which is why organizations move.
Reasons organizations migrate
- Access to newer capabilities: many newer features, especially around stronger sign-in and finer policies, are built for the Identity Engine.
- More precise policies: rules can be tied to applications and conditions with more detail.
- Better sign-in experiences: flows can adapt step by step, including options that reduce reliance on passwords.
- Long-term support: staying on the older engine can mean falling behind as the platform moves forward.
- Consistency: one engine across the organization is easier to explain, test, and secure.
Why it needs care
The engine touches everything. Custom sign-in pages may behave differently. Code that talked to older interfaces may need updates. Policies that looked equivalent may behave slightly differently. Users may see new screens. Support staff must learn new patterns. A migration done in haste can lock people out, break applications, or silently weaken security. A migration done with care is mostly invisible to users and a quiet improvement for administrators.
Replacing the engine of a bus while it carries passengers is not an option, so a transport company brings in the new bus, tests it on quiet routes, trains drivers, and moves routes over gradually. The old bus stays ready until the new one has proved itself.
flowchart LR
CL["Classic Engine
organization"] --> SV["Survey and plan"]
SV --> TS["Test in safe place"]
TS --> ST["Staged rollout"]
ST --> IE["Identity Engine
organization"]
IE --> OP["Operate and improve"]
Figure 1 shows the journey in five stages. Most of the effort and most of the safety lie in the first three, long before any user sees a change.
Start by writing one sentence: “We are migrating because ___.” The reason you choose shapes how fast you go, what you protect first, and how you judge success.
What success looks like
A successful migration is one that most users barely notice. Sign-in still works, applications still open, and nobody is locked out. Behind the scenes, policies are cleaner and better documented, administrators understand the new structure, and the organization is ready to adopt newer capabilities without another large project. Write down three or four sentences describing success in your own words, and share them with your sponsor so that everyone judges the project by the same yardstick, not by feelings after the first awkward day.
2Core Concepts You Need First
A small vocabulary unlocks the rest of the guide.
| Term | Plain meaning | Everyday comparison |
|---|---|---|
| Engine | The part of Okta that runs the sign-in and access decision process | The engine of a car |
| Classic Engine | The older engine, with a fixed style of sign-in flow | An older bus with fixed routes |
| Identity Engine | The newer engine, with adaptable step-by-step flows | A newer bus that can adjust its route |
| Org | Your own Okta organization, your private instance | Your building within a large estate |
| Authentication | Proving who you are | Showing your identity card |
| Authenticator | A thing used to prove identity: password, phone prompt, security key | A key, a badge, a fingerprint |
| Policy | A rule that decides what is required in which situation | A building’s entry rules |
| Sign-in widget | The sign-in box users see | The reception desk |
| Custom code | Your own scripts or pages built around Okta | Your own shelving in the building |
| Parity | Behaving the same way after the move | The new road leading to the same places |
| Rollback | Returning to the previous state | Keeping the old bridge standing |
| Preview or test org | A separate Okta org used for rehearsal | A dress rehearsal theatre |
Engine versus version
The word engine here does not mean a software version number. It describes the underlying approach used to run authentication and policies. Both older and newer organizations receive regular updates, but the engine determines which family of capabilities and behaviours your organization uses.
The big ideas in one breath
The older engine handled sign-in as a fairly fixed sequence. The newer engine treats sign-in as a conversation: it asks for a step, looks at the answer and the context, and decides what to ask next. Policies in the newer engine are organized differently, with more separation between rules about how people prove themselves and rules about how applications grant access.
flowchart TD
subgraph CLS["Classic style"]
C1["Fixed sequence of steps"] --> C2["Broad policies"]
end
subgraph IDE["Identity Engine style"]
I1["Step-by-step conversation"] --> I2["Detailed policies per application"]
end
CLS -.->|"migration"| IDE
Figure 2 contrasts the two styles. The migration is the work of carrying your existing intentions from the left style into the right.
A printed timetable says where every bus goes, no matter what. A modern journey planner reacts to delays and your needs. Both get you home, but they work differently and need different habits.
Why vocabulary matters in a project
Misunderstandings in migration projects often come from people using the same word differently. One person says policy and means a single rule, another means the whole set. One says migration and means the technical switch, another means the entire project. Agree on a short glossary at the start, publish it where the team can see it, and correct the language gently in meetings. Shared words make plans, status reports, and risk discussions much easier to follow.
3What Changes and What Stays the Same
Knowing the boundaries of the change keeps the project calm.
Many fears about migration come from not knowing how much will change. The honest answer is that your users, applications, groups, and most directory connections stay where they are. What changes is how sign-in and access decisions are made and configured.
| Area | Likely stays | Likely changes |
|---|---|---|
| People and groups | Your users, groups, and memberships | Little or nothing |
| Applications | Your integrations and assignments | How access rules attach to them |
| Directory connections | Connections to your directories and sources | Usually nothing, but verify |
| Sign-in policies | The intent: who needs what | How rules are structured and evaluated |
| Authenticators | Factors your users enrolled | How they are configured and combined |
| Sign-in pages | Branding and domain | Behaviour of the widget and custom pages |
| Custom code | Your general approach | Anything tied to older flow behaviour |
| Recovery flows | The need for password reset and unlock | Steps and screens users go through |
| Administrators | Roles and responsibilities | Admin Console screens and wording |
Where the risk really lives
The people and applications are the easy part. The risk lives in the places where behaviour is custom: tailored sign-in pages, scripts that parse page contents, integrations that call older interfaces, and unusual policy combinations built up over the years. A good survey finds these early.
Different surfaces, same goal
Think of the migration as rewriting the same set of house rules in a new rulebook format. The rules you intended remain; the language and structure of the rulebook differ. Your job is to confirm that the new rulebook produces the same decisions where you want sameness, and better decisions where you want improvement.
flowchart LR
SAME["Stays: users, groups, apps,
directories"] --> ORG["Your organization"]
CHG["Changes: policy structure,
widget behaviour, flows"] --> ORG
RISK["Risk lives in custom code,
pages, unusual policies"] --> ORG
Figure 3 shows three groups. Your plan should spend the most attention on the third.
Moving house, your furniture and family come with you, while the address, the wiring, and the layout of the kitchen change. The hard parts are the custom shelves you built into the old walls.
Questions to ask your Okta contacts
- Which engine is our organization on today, and what is the supported path forward?
- Are there features we use that behave differently or are unavailable after the move?
- What tools or guidance are provided for planning and checking the upgrade?
- What can be rehearsed in advance, and what can be reversed afterwards?
- Are there dates or support timelines we should plan around?
Write down the answers with the date and the name of the person who gave them. Because details change, a dated answer is more useful than a vague memory.
4How Sign-In Flows Differ
The most visible difference is the shape of the sign-in journey.
In the older approach, a sign-in generally ran through a set order: collect the username and password, then maybe a second factor, then done. Different situations needed different pages and configurations, and customization often meant editing page behaviour directly.
In the newer approach, sign-in is a series of small steps. At each step, the engine looks at what it knows and decides what to do next. It can ask for a different proof depending on risk, offer choices of authenticator, or skip steps that are not needed. Because steps are modular, the experience can be more personal and often smoother.
Practical effects users and admins may notice
- Authenticator choice: users may be offered options during sign-in and enrollment rather than a fixed single path.
- Passwordless options: some journeys can reduce or remove the password, depending on configuration.
- Recovery: password reset and account unlock follow the new engine’s flow and may include different checks.
- Enrollment: setting up new authenticators is guided differently.
- Error messages and screens: wording and layout may differ from what helpdesk scripts describe.
Why helpdesk readiness matters
The first people to feel any change are your support staff, because users call them. If screenshots, scripts, and guides still describe the old screens, confusion multiplies. Updating support materials before users see anything is one of the cheapest, most effective parts of the plan.
sequenceDiagram
participant U as User
participant E as Identity Engine
participant P as Policy
U->>E: Starts sign-in
E->>P: What is required now?
P-->>E: Step one requirement
E->>U: Ask for first proof
U->>E: Provides proof
E->>P: Evaluate again with new knowledge
P-->>E: Next requirement or done
E->>U: Next step or access granted
Figure 4 shows the rhythm of the newer engine: ask, answer, re-evaluate. This is why policy design matters even more, since the engine consults it repeatedly during one sign-in.
At airport security, a fixed queue treats every traveller identically, while a modern checkpoint adjusts the checks based on what the officers learn along the way.
Walking through a typical journey
Picture a regular employee opening a business application on a laptop at home. Under the older engine, they might see a username and password box, then a prompt on their phone, then the application. Under the newer engine, the first screen may simply ask who they are, then offer the best available way to prove it, perhaps a phone prompt or a security key, and only ask for more if the situation looks unusual. The destination is the same; the path is shorter or longer depending on what the system learns along the way. Documenting a few such journeys with screenshots, before and after, is the best material for training and for testing.
5Policy Model Differences
Policies are the heart of the migration, and the structure differs between engines.
In the older engine, a small number of broad policy types governed sign-in and access, and a lot of behaviour was tied together. In the newer engine, rules are separated more cleanly: one set of rules governs how people may authenticate in general, another set governs access to each application, and others cover enrollment and recovery. This separation gives finer control but also means that one old rule may become several new ones.
One old rule, several new rules
Suppose an old policy said, “Require a second factor unless the user is on the office network.” In the new model this intent might be expressed in a rule tied to a specific application or group, with conditions about network, device, and risk, and priorities among rules. Translating means understanding the intent, not copying the words.
Order and priority
Rules in both models are evaluated in order, with the first matching rule applying and a catch-all rule handling everything else. When translating, take extra care with the order. A rule placed too high can swallow cases you meant for a rule beneath it, and a missing catch-all can leave a hole.
| Question for each old policy | Why it matters |
|---|---|
| What was the real intent? | You translate intent, not syntax |
| Who and what did it apply to? | Scope must match after migration |
| What conditions did it use? | Network, device, location, risk |
| What did it require? | Factors, session length, prompts |
| Is it still needed? | Old rules often outlive their reasons |
| Where does it sit in the order? | Order changes outcomes |
Opportunity to simplify
Years of accumulated rules often contain duplicates, exceptions nobody remembers, and rules for applications long retired. The migration is a rare moment to clean house. Remove what has no purpose, merge what overlaps, and write down the reason for each remaining rule.
flowchart TD
OLD["Old broad policy"] --> INT["Extract intent"]
INT --> NEW1["Authentication rule"]
INT --> NEW2["Application access rule"]
INT --> NEW3["Enrollment rule"]
INT --> NEW4["Recovery rule"]
NEW1 --> CHK["Compare behaviour
old versus new"]
NEW2 --> CHK
NEW3 --> CHK
NEW4 --> CHK
Figure 5 shows translation as a split. The intent is extracted once, expressed in several places, and checked as a group.
A company handbook’s single long “security rules” page is rewritten as separate guides for visitors, contractors, deliveries, and fire safety. The spirit is the same, but each guide is shorter and clearer.
A worked translation in words
Suppose the old rules said: administrators must always use a security key; staff on the office network need only a password; everyone else needs a phone prompt in addition to the password. To translate, list the groups involved, decide which application or sign-in rule each applies to, and order them so that the administrator rule sits first, the office rule second, and the general rule last as the catch-all. Then test one administrator at the office, one regular user at the office, one regular user at home, and one stranger. If the administrator at the office is let in with only a password, the order is wrong. This small exercise shows why intent, order, and negative tests matter.
6Authenticators and Enrollment
Users carry their proofs with them. Making sure they still work, and are used well, is central.
An authenticator is the thing a person uses to prove who they are: a secret they know, a device they hold, or a trait they have. Your users have already enrolled authenticators under the older engine. After migration they should be able to keep using them, though the way they are configured, offered, and combined can change.
Questions about authenticators
- Which authenticators are in use today, and how many users rely on each?
- Do all of them continue to work after the move, and in which situations?
- Which weak or outdated ones would you like to phase out?
- Do you want to introduce stronger or passwordless options?
- How will new users enroll, and what will the screens look like?
- What is the fallback if a user loses their device?
An opportunity, handled carefully
Migration is a natural moment to improve authentication, but combining too many changes makes problems hard to diagnose. A good rule is to migrate first with equivalent behaviour, confirm stability, and then introduce improvements in separate, clearly communicated steps.
Plan for lost devices
Every change in authentication increases the chance that someone will be stuck. Make sure recovery paths exist and have been tested, and that helpdesk staff can verify identity safely and quickly. Test the recovery flow as a user would see it, not just as an administrator.
flowchart TD
A["Inventory authenticators in use"] --> B["Confirm each works after migration"]
B --> C["Decide what to phase out"]
C --> D["Plan new options separately"]
D --> E["Test enrollment and recovery as users"]
Figure 6 puts improvements after equivalence. First make sure nobody is worse off, then make them better.
When a building changes its door locks, it first makes sure every resident’s existing key still works, and only later introduces new key cards, with a clear plan for people who lose theirs.
Retiring weak authenticators
Some organizations still rely on authenticators that are easier to attack, such as codes sent by text message or knowledge questions. A migration is a convenient time to measure how many people use them and to plan a gradual retirement: announce the date, offer stronger alternatives, help those who need assistance, and only then switch the old option off. Doing this after migration, as a separate step, keeps the two changes from confusing each other.
7Sign-In Pages, Widget, and Branding
The sign-in box is the part of the system every user sees. Custom pages are among the biggest migration risks.
Organizations often customize the sign-in experience: their logo, colours, wording, and sometimes much deeper changes using their own scripts and styles. Plain branding such as logos and colours usually carries across without trouble. Deep customization, especially anything that relies on the structure or behaviour of the older sign-in widget, is more fragile.
Levels of customization
| Level | Example | Migration risk |
|---|---|---|
| Light branding | Logo, background, colours, custom domain | Low |
| Wording changes | Custom messages and help text | Low to medium; screens may differ |
| Page scripts | Scripts that alter the widget on the page | High; widget structure may differ |
| Fully custom page | Your own page calling Okta interfaces | High; flow assumptions may break |
| Embedded widget in your app | Sign-in box inside your own application | Medium to high; version and flow dependent |
Test every customization
List every place where you changed the sign-in experience. For each, ask whether it depends on how the older widget behaved. Then test it in the new engine in a rehearsal organization. Where it breaks, decide whether to update it, replace it with a supported setting, or remove it.
Embedded sign-in
If your own application embeds the Okta sign-in box, it uses a particular version of the widget and a particular style of flow. The newer engine may need a newer widget version and code that handles multi-step flows. Treat this as a development project with its own testing, not a configuration switch.
flowchart LR
BR["Branding only"] --> OK1["Low risk"]
WD["Wording changes"] --> OK2["Review screens"]
SC["Page scripts"] --> HI1["Retest or replace"]
FC["Fully custom page"] --> HI2["Redesign for steps"]
EM["Embedded widget"] --> HI3["Update and test"]
Figure 7 shows risk rising with depth of customization. The cheapest path is to move toward supported settings wherever you can.
A fresh coat of paint survives a renovation. A hand-built shelf screwed into the old wall must be rebuilt, and a whole custom staircase needs an architect.
Accessibility and device variety
Sign-in screens must work for everyone, including people who use screen readers, keyboard navigation, magnification, or older browsers and devices. Test the new screens with these tools and with the variety of devices your people really use, such as shared workstations, tablets, and phones. A flow that is elegant on a new laptop but unusable with a screen reader is not ready, no matter how well the policy rules are written.
8Custom Code, Hooks, and Integrations
Anything you built around Okta may carry assumptions about the old engine.
Over the years, teams build helpers around Okta: scripts that call its interfaces, hooks that run at certain moments, automations that react to events, and connections to other tools. Most of these will keep working, because the interfaces for managing users and groups are stable. But some depend on details of the older flows, and these need attention.
Categories to review
- Management scripts: programs that create, update, or suspend users and groups. Usually unaffected, but test.
- Authentication-related programs: anything that signs users in or checks sessions programmatically. Likely affected.
- Hooks: code that Okta calls at certain moments, such as before a token is issued. Review their inputs and timing.
- Event-driven automation: reactions to log events. Check that the events and fields you rely on still appear as expected.
- Third-party tools: integrations from other vendors that assume particular behaviour.
- Monitoring: dashboards and alerts built on log event patterns, which may change.
Make an inventory with owners
Create a list of every custom item with a named owner, what it does, which Okta interfaces it uses, and how to test it. Items without owners are the ones that break unnoticed. Ask each owner to confirm compatibility, or to retest in the rehearsal organization.
Why monitoring and detections deserve special mention
Security detections often match on specific event types and fields. If the new engine produces different or additional events during sign-in, a detection rule may stop firing, or start firing too often. Compare event output from the two engines for the same journeys, and adjust rules before cutover.
flowchart TD
INV["Inventory custom items"] --> OWN["Assign owners"]
OWN --> RT["Retest in rehearsal org"]
RT --> DEC{"Works as is?"}
DEC -->|"yes"| KEEP["Keep"]
DEC -->|"no"| UPD["Update or replace"]
UPD --> RT
Figure 8 shows a loop. Items that fail are fixed and retested until they pass.
Before replacing the electrical panel in a house, you list every device plugged in and check each one still works with the new panel. The forgotten appliance in the garage is the one that trips.
Using the migration to reduce customization
Every custom script is something you must maintain through every future change. Ask of each one whether a supported setting now achieves the same result. Many old customizations were workarounds for missing features that now exist. Replacing a workaround with a supported setting shrinks the maintenance burden, lowers risk at the next upgrade, and often improves the user experience. Where a customization is truly needed, document why, who owns it, and how to test it.
9Application Impact and Standards
Applications connect to Okta in several standard ways. Most keep working; a few need a check.
Applications connect through well-known standards for single sign-on, such as those based on tokens and on signed assertions. Because these standards are stable, many applications continue working without change. The things to check are the details: how applications ask for sign-in, which extra parameters they send, how they handle multi-step flows, and whether they depend on older behaviour.
Application groups by risk
| Group | Description | Approach |
|---|---|---|
| Standard web applications | Use standard sign-in protocols with well-behaved libraries | Test a sample; low risk |
| Mobile and desktop applications | Use embedded or system browsers and tokens | Test on each platform |
| Embedded sign-in applications | Host the sign-in box themselves | Plan code work |
| Legacy applications | Older approaches such as form replay or header-based sign-in | Test carefully; check support |
| Machine-to-machine clients | Programs without a person | Usually unaffected; verify |
| Critical applications | High business importance | Test first and last; keep a rollback ready |
Policy attachment per application
The newer model attaches access rules to each application. During migration, confirm that every application has a rule that matches what it had before, and that none is left with an accidental default that is too open or too strict.
Test with real journeys
For each group, pick representative applications and test full journeys: first sign-in of the day, return visits, step-up for sensitive actions, sign-out, and session timeouts. Include the user types that matter, such as administrators, contractors, and remote workers.
flowchart LR
APPS["All applications"] --> G1["Standard web"]
APPS --> G2["Mobile and desktop"]
APPS --> G3["Embedded sign-in"]
APPS --> G4["Legacy"]
APPS --> G5["Machine to machine"]
G1 --> T["Test representative sample"]
G2 --> T
G3 --> T
G4 --> T
G5 --> T
Figure 9 shows that you do not need to test every application equally. Grouping lets you test thoroughly where behaviour differs and lightly where it is the same.
A bus company moving to a new ticket system tests it on standard routes, school buses, night buses, and the odd rural line, not every single stop.
Sessions and sign-out behaviour
Applications and Okta each keep their own notion of a session, and the way they interact can surprise people. Test how long a user stays signed in, what happens when they close the browser, how sign-out in one application affects others, and when sensitive actions ask for fresh proof. Compare with your benchmark. A small difference in session length may be harmless for one team and a serious complaint for another, so check the expectations of each group.
10Directories, Provisioning, and Lifecycle
Users arrive and leave through connections that should keep working throughout.
Your users probably come from a directory or a human resources system and flow out to applications through provisioning connections. These connections are generally independent of the sign-in engine, so they should continue to work. Even so, verify that nothing in the lifecycle chain depends on older sign-in behaviour, such as first-login steps, activation emails, or password setup flows.
Points to verify
- Activation: how new users receive and complete their first sign-in and enrollment.
- Password sync and delegated authentication: if your directory checks passwords, confirm the agent connection works under the new engine.
- Provisioning to applications: create, update, and deactivate operations still flow correctly.
- Lifecycle emails and templates: message wording and links may need review.
- Joiner, mover, leaver processes: rehearse each end to end.
Avoid combining migrations
It is tempting to modernize directories, provisioning, and the engine all at once. Doing so makes problems hard to pin down. Where possible, change one layer at a time and let each settle.
sequenceDiagram
participant HR as HR system
participant O as Okta
participant A as Application
participant N as New user
HR->>O: New person record
O->>A: Provision account
O->>N: Activation message
N->>O: First sign-in and enrollment
O->>A: Access granted
Figure 10 reminds us that the engine matters mostly at the point where a human meets the system, the first sign-in and enrollment. Rehearse that step carefully.
A new employee’s paperwork may stay the same when the reception desk is redesigned, but the welcome experience, the badge pickup, and the first-day instructions all need to be updated.
Service accounts and automation identities
Not every identity is a person. Programs and integrations use accounts or credentials of their own, and they are easy to forget during a sign-in engine change. List them, record what they do and who owns them, and test that they still authenticate and act as expected in the rehearsal organization. A forgotten automation that quietly stops working may not be noticed for days, then show up as a puzzling failure far from its cause.
11Taking Stock: The Pre-Migration Survey
You cannot move what you have not counted. A careful survey is the foundation of a calm migration.
The survey produces a complete picture of your current configuration and its dependencies. It is tedious but valuable, and it often reveals forgotten rules, abandoned integrations, and surprising customizations.
| Area to survey | What to record |
|---|---|
| Policies | Every sign-in, access, enrollment, and recovery rule, with scope, conditions, and order |
| Authenticators | Which are enabled, how many users use each, and any restrictions |
| Applications | Integration method, owner, criticality, and special settings |
| Customizations | Branding, page scripts, custom pages, embedded widgets |
| Code and hooks | Scripts, hooks, automations, with owners |
| Events and detections | Alerts and reports that depend on log patterns |
| User groups | Special populations such as administrators, contractors, and executives |
| Support materials | Guides, screenshots, scripts, training |
| Network zones and device rules | Conditions policies depend on |
| Contracts and compliance | Obligations the new configuration must still satisfy |
Classify as you count
For each item, label it: keep as is, translate, simplify, retire, or investigate. The “retire” and “simplify” labels shrink the work. The “investigate” label creates tasks for owners to answer questions before the migration begins.
Capture current behaviour as evidence
Record how key journeys behave today: which prompts a typical user sees, how long sessions last, which factors are demanded in which situations. This record becomes the benchmark for checking parity after the move.
flowchart TD
S["Survey everything"] --> L["Label each item"]
L --> K["Keep"]
L --> T["Translate"]
L --> SI["Simplify"]
L --> R["Retire"]
L --> I["Investigate"]
I --> OW["Owner answers before migration"]
Figure 11 shows the survey as a sorting exercise. Many items end up retired or simplified, which is a bonus of the project.
Before a house move, you walk through every room, decide what to keep, what to give away, and what to throw out. The move is easier because of it, and the new house is less cluttered.
Interviewing the people who know
Configuration screens show what exists, not why. Talk with long-serving administrators, application owners, and helpdesk staff. Ask them which rules are special, which exceptions were granted to whom, and which customizations were added after an incident. These conversations uncover reasons that appear in no document, and they turn potential critics of the project into allies who feel heard.
12Choosing a Migration Approach
There are several ways to move. Pick the one that fits your risk appetite and your organization.
Okta provides guidance and tools for upgrading, and your account contacts can describe what is available for your organization. The details vary and change, so confirm them. Regardless of mechanism, the approaches differ in shape.
| Approach | How it works | Strength | Caution |
|---|---|---|---|
| In-place upgrade | Your existing organization is moved to the new engine, often after preparation | Keeps identifiers, settings, and history in one place | Less room to compare side by side; needs strong rehearsal and rollback planning |
| Parallel organization | Build a new organization on the new engine and move users and applications across | Clean slate; easy comparison | More effort; identifiers and enrollments may need to be redone |
| Staged by population | Move groups of users or applications in waves where supported | Limits blast radius | Both models coexist for a time; needs clear communication |
| Rehearse then switch | Practise on a preview copy, then perform the real change in a planned window | Predictable and well tested | Needs a good rehearsal environment |
How to choose
- Size and complexity: large, complex organizations lean toward more rehearsal and staging.
- Customization depth: heavy customization favours careful, longer preparation.
- Risk tolerance: the more critical the sign-in, the more caution.
- Regulatory demands: some environments need formal change control and evidence.
- Resources: a parallel build needs people and time.
Whichever approach you choose, the same principles apply: survey first, rehearse in a safe place, move in small steps, and keep a way back.
quadrantChart
title Approaches by effort and risk control
x-axis Low effort --> High effort
y-axis Low risk control --> High risk control
quadrant-1 Heavy but safe
quadrant-2 Efficient and safe
quadrant-3 Quick but risky
quadrant-4 Heavy and still risky
Big bang without rehearsal: [0.15, 0.1]
In-place after rehearsal: [0.4, 0.7]
Staged by population: [0.6, 0.85]
Parallel organization: [0.85, 0.8]
Figure 12 compares sample approaches. A leap without rehearsal is cheap but dangerous; a rehearsed, staged move offers strong control at moderate effort.
You can cross a river by jumping, by building a new bridge beside the old one, or by moving a few people across each day on a ferry. Which you choose depends on how wide the river is and what you carry.
Deciding the order of waves
Order waves by risk and learning value. Start with people who are technically capable and forgiving, then groups with simple needs, then groups with special devices or rules, and leave the most critical or fragile populations until the process is proven. Avoid scheduling a wave just before a major deadline, a holiday peak, or a period when key staff are away. Publish the wave plan so that managers can prepare their teams and know when to expect questions.
13Reference Architecture for the Migration
A bird’s-eye view shows the environments, the people, and the controls that make the move safe.
Production
The live organization serving real users. Changes here are planned, approved, and reversible.
Rehearsal organization
A separate organization on the new engine, loaded with a copy of the configuration and test users.
Test applications
Safe applications and test accounts used to run journeys and compare behaviour.
Change management
Approvals, scheduled windows, and records of each step.
Evidence and comparison
Recorded benchmarks of old behaviour, compared against new behaviour.
Migration team
Identity engineers, application owners, helpdesk, security, and communications.
flowchart TD
PROD["Production
Classic Engine"] --> SURV["Survey and benchmarks"]
SURV --> REH["Rehearsal org
Identity Engine"]
REH --> TEST["Journeys, apps, recovery tests"]
TEST --> CMP["Compare with benchmarks"]
CMP --> OK{"Parity and approval?"}
OK -->|"no"| FIX["Adjust configuration"]
FIX --> REH
OK -->|"yes"| WAVE["Staged production migration"]
WAVE --> LIVE["Production on Identity Engine"]
Figure 13 shows the central idea: nothing reaches production until the rehearsal loop has produced behaviour that matches your benchmarks and your approvers agree.
Roles in the project
- Sponsor: clears obstacles and sets priorities.
- Project lead: runs the plan and keeps everyone informed.
- Identity engineers: translate configuration and run tests.
- Application owners: confirm their applications work.
- Security: confirms policies are at least as strong, and detections still work.
- Helpdesk: prepares for user questions.
- Communications: tells users what is happening and when.
A theatre does not open a new production without a dress rehearsal, a stage manager with a checklist, and an agreement from the director that the show is ready.
Governance and evidence
For regulated organizations, treat the migration as a formal change. Keep approvals, test evidence, before-and-after configuration records, and the migration log together in one place. When an auditor later asks how you ensured equivalent controls after the move, you can show the benchmarks, the negative tests, the approvals, and the results, instead of reconstructing the story from memory.
14Building and Using the Rehearsal Environment
A good rehearsal organization is the single most useful tool in the project.
The rehearsal organization lets you try the new engine with a copy of your real configuration, without risking real users. The more it resembles production, the more trustworthy your tests.
What the rehearsal organization needs
- The same policy intentions: translated into the new model.
- Representative test users: covering administrators, regular staff, contractors, remote workers, and people with different authenticators.
- Test applications: one or more of each integration type.
- Network and device conditions: as close to real as practical.
- The same customizations: branding, page scripts, embedded widgets.
- Log collection: so you can compare events with those from production.
Do not use real user data casually
Test with synthetic accounts wherever possible. If real data is needed, protect it as you would in production and follow your privacy rules. Never treat the rehearsal organization as a place where security is optional.
Write a test script, not just a feeling
For every journey, write a short script: starting state, steps, expected result. Run it against the old behaviour to record the benchmark, and against the rehearsal to compare. Keep the scripts; you will rerun them at every stage.
flowchart LR
CFG["Copy and translate configuration"] --> USR["Create test users"]
USR --> APP["Connect test applications"]
APP --> SCR["Run journey scripts"]
SCR --> LOG["Collect events and screenshots"]
LOG --> REV["Review differences"]
Figure 14 shows the rehearsal pipeline. Screens and events are collected so that differences can be reviewed calmly afterwards, not argued about from memory.
A flight simulator copies the real cockpit so pilots can practise emergencies safely, with every action recorded for review.
Keeping the rehearsal faithful
A rehearsal organization drifts away from production as people change settings in one place and forget the other. Keep a simple record of every production change during the project and mirror it in the rehearsal. Before each major test run, compare the two configurations and note any differences. A rehearsal that no longer matches production gives false comfort, which is worse than no rehearsal at all.
15Test Strategy: Parity First, Then Improvement
Two kinds of tests answer two different questions.
Parity tests ask, “Does the new engine do what the old one did?” Improvement tests ask, “Does the new engine do the better thing we want?” Keep them separate. Prove parity first, so that any later difference can be attributed to a deliberate improvement.
| Test family | Question | Examples |
|---|---|---|
| Sign-in parity | Same prompts in the same situations? | Office network, remote, new device, high-risk |
| Application parity | Same access for the same people? | Assigned and unassigned users, administrators |
| Recovery parity | Can users reset and unlock safely? | Forgotten password, lost device, locked account |
| Enrollment parity | Can new users set up authenticators? | First sign-in, adding a second device |
| Session behaviour | Same session lengths and re-prompts? | Idle timeout, step-up for sensitive actions |
| Custom code parity | Do scripts and hooks still work? | Provisioning scripts, token hooks |
| Monitoring parity | Do detections still fire? | Failed sign-in alert, admin change alert |
| Negative tests | Are unauthorized people still blocked? | Wrong location, missing factor, removed group |
| Accessibility and devices | Does it work for everyone? | Screen readers, older browsers, mobile |
| Load and resilience | Does it cope with busy mornings? | Peak sign-in times |
Negative tests matter most
It is easy to test that allowed people get in. It is just as important to test that disallowed people stay out. A translation error that opens a door is far more dangerous than one that closes a door, because nobody complains about an open door.
Define pass and fail in advance
Agree beforehand what counts as acceptable. Is a different screen wording acceptable? Is a slightly different order of prompts acceptable? Is any weaker requirement ever acceptable? Writing these rules down prevents arguments under pressure.
flowchart TD
P["Parity tests"] --> PASS{"All pass?"}
PASS -->|"no"| FIXC["Fix translation"]
FIXC --> P
PASS -->|"yes"| IMP["Improvement tests
one change at a time"]
IMP --> GO["Ready for staged rollout"]
Figure 15 shows the order of testing. Improvements are layered on top of a verified base.
A mechanic first checks that the rebuilt engine runs exactly like the old one, and only then fits the upgraded turbocharger.
Handling differences you decide to accept
Not every difference is a defect. A slightly different wording or screen layout may be perfectly acceptable. The key is to decide deliberately: record the difference, explain why it is acceptable, name the approver, and update the helpdesk guide. Unrecorded differences have a habit of becoming mysterious problems months later, when nobody remembers that they were intended.
16Communication and Change Management
People are part of the system. A well-informed user is a calm user.
Even the smoothest technical migration can feel chaotic if users, managers, and support staff are surprised. Communication is not an extra; it is half the work.
Audiences and what each needs
- Executives: why we are doing it, the risk, the timeline, and the benefit.
- Application owners: what to test, by when, and who to contact.
- Helpdesk: new screens, new flows, common problems, and escalation paths, well before users see anything.
- All users: what will look different, when, and what to do if something goes wrong.
- Administrators: the new console locations and concepts.
- Auditors and compliance: what is changing and how evidence is preserved.
Make messages short and concrete
Say what will be different, with a picture if possible, and name a place to get help. Avoid technical words that users do not use. Send reminders close to the date, and a thank-you afterwards.
Pilot with friendly users
Begin with a group who will tolerate bumps and give honest feedback, such as the IT department and enthusiastic volunteers. Their experience refines the guides and finds problems before the wider population arrives.
gantt
title Example communication timeline
dateFormat YYYY-MM-DD
axisFormat %d %b
section Leaders and owners
Briefings and test requests :a1, 2026-11-02, 10d
section Helpdesk
Training and updated guides :a2, 2026-11-09, 14d
section Pilot users
Pilot notice and feedback :a3, 2026-11-23, 14d
section All users
Notice, reminders, support :a4, 2026-12-07, 21d
Figure 16 shows an illustrative order. Those who answer questions are informed before those who ask them.
When a shop changes its payment machines, the staff are trained first, a few regular customers try it, and signs go up for everyone else before the day.
Listening after launch
After each wave, ask users how it went. A short survey, a feedback channel, and conversations with team leads can reveal problems that numbers miss, such as confusing wording or an awkward step on a particular device. Share what you learned and what you changed. People who see that their feedback leads to fixes become patient supporters of the project.
17Rollback and Contingency Planning
Hope is not a plan. Know exactly how you would step back.
Every change should have a way back, or at least a way to limit damage. How easy rollback is depends on your approach and on what Okta supports for your organization, so ask early and in detail. Some approaches are not easily reversible once complete; you must know which phases are one-way doors and treat them with extra caution.
Questions to answer before cutover
- Which steps are reversible and which are not?
- What is the maximum time we can run in a degraded state?
- Who decides to roll back, and by what signals?
- What is the rollback procedure, and has it been rehearsed?
- Do we have emergency access for administrators if sign-in breaks?
- How will we communicate if we roll back?
Emergency access
Make sure at least a couple of administrator accounts can recover access even if normal flows misbehave, protected carefully and tested. A migration that locks administrators out of their own platform becomes a crisis within minutes.
Go and no-go criteria
Agree beforehand on the signals that mean stop: sign-in failure rate above a threshold, a surge of helpdesk calls, a critical application failing, or a security regression. Review them together at each stage gate.
flowchart TD
GO["Stage change applied"] --> MON["Monitor signals"]
MON --> D{"Within limits?"}
D -->|"yes"| NEXT["Proceed to next stage"]
D -->|"no"| HOLD["Pause and diagnose"]
HOLD --> RB{"Fixable quickly?"}
RB -->|"yes"| GO
RB -->|"no"| BACK["Roll back and communicate"]
Figure 17 shows that decisions are made against agreed limits, not in the heat of the moment.
A mountaineer agrees a turn-back time before starting the climb, because judgement is poor near the summit when tired and excited.
Communicating during trouble
If something goes wrong, speed and honesty matter more than polish. Prepare templates in advance for a short notice saying what is affected, what users should do, and when the next update will come. Decide who approves messages so that they are not delayed by debate. Users forgive problems far more readily than silence.
18Getting Started: A Migration Roadmap
A sensible order of work, from first questions to a settled new platform.
Confirm your starting point
Check your current engine, plan, and available upgrade path with Okta. Agree the reason and the goals.
Form the team and sponsor
Name the lead, engineers, application owners, security, helpdesk, and communications contacts.
Survey everything
Policies, authenticators, applications, customizations, code, detections, and support materials.
Label and clean up
Keep, translate, simplify, retire, or investigate. Retire what is dead.
Record benchmarks
Capture how important journeys behave today.
Build the rehearsal organization
Translate configuration, create test users and applications, and add log collection.
Test for parity
Run scripted journeys, negative tests, recovery, and monitoring checks until they match.
Prepare people
Train helpdesk, update guides, brief owners, and draft user messages.
Pilot, then stage
Move a friendly group first, then waves, with stage gates and rollback ready.
Stabilize and improve
After parity is proven in production, introduce improvements one at a time and retire leftovers.
Early traps
- Starting translation before the survey is complete.
- Skipping the rehearsal organization to save time.
- Combining the migration with several other large changes.
- Forgetting the helpdesk until the week before.
- Having no emergency administrator access.
flowchart LR
A["Confirm start"] --> B["Team"]
B --> C["Survey"]
C --> D["Clean up"]
D --> E["Benchmarks"]
E --> F["Rehearsal org"]
F --> G["Parity tests"]
G --> H["Prepare people"]
H --> I["Pilot and stage"]
I --> J["Stabilize and improve"]
Figure 18 summarizes the roadmap. Surveying, rehearsing, and preparing people all happen before any real user is touched.
A careful house renovation starts with measurements and permits, then a model of the plan, then work room by room, and only then the decoration.
Estimating time honestly
Teams commonly underestimate the survey and the testing, and overestimate the technical switch. Add time for waiting on application owners, for rework after failed tests, and for training. Include buffers around holidays and peak business periods. Share the estimate as a range with assumptions, and update it openly as you learn. A realistic plan that slips a little is better than an optimistic plan that collapses.
19Worked Examples in Plain Words
Three short stories show typical migration moments.
Example one: the rule that opened a door
During parity testing, a team translated an old rule saying contractors must always use a second factor. The new rule was written correctly, but it sat below a broader rule that allowed anyone on the office network to sign in with a password alone. A contractor test account on the office network therefore got in without a second factor, which the old engine would never have allowed. The negative test caught it. The team reordered the rules, added a note explaining why contractors sit above the network rule, and added the test to the permanent script so it would never regress.
Example two: the embedded sign-in box
A customer-facing portal embedded the sign-in box and had been unchanged for years. In the rehearsal organization, the old embedded version failed to complete a sign-in because the new flow had an extra step the page did not know how to show. The portal team scheduled a proper update, tested it, and released it ahead of the production migration, so that on migration day the portal worked on both engines. Nobody outside the project noticed.
Example three: the helpdesk surprise
Technically the pilot went perfectly, yet the helpdesk was flooded with calls. The reason: password reset screens had a different layout and a new verification step, and the helpdesk guide still showed the old pictures. The project team paused the next wave, updated the guide with new screenshots, ran a thirty-minute briefing with support staff, and resumed. Calls fell back to normal within a day. The lesson became a standing rule: helpdesk readiness is a gate, not a courtesy.
flowchart TD
E1["Rule order mistake"] --> R1["Negative test catches it,
rules reordered"]
E2["Old embedded widget"] --> R2["Portal updated early,
works on both engines"]
E3["Outdated helpdesk guide"] --> R3["Pause, update, brief, resume"]
Figure 19 summarizes the stories. Each problem was found early or handled calmly because the project had gates, rehearsal, and people who were prepared.
A good moving team expects a sofa that will not fit the stairwell, and has a plan for the crane, instead of discovering it with the sofa jammed halfway up.
What the stories have in common
In each story, the problem was not exotic. A rule in the wrong order, an old widget, and an outdated guide are ordinary matters. What made the difference was that the team had a process designed to find ordinary problems early: negative tests, a rehearsal organization, and gates that include people as well as technology. Dramatic failures are rare; ordinary oversights are common, and a good process is mostly a net for catching them.
20Security Considerations
A migration must never leave you less safe than before.
During a change, attackers and mistakes both find opportunities. Treat the migration as a security-sensitive project from the start.
Protect against weakening
- Translate at least as strongly: every old requirement must have an equal or stronger new one, verified by negative tests.
- Review default rules: catch-all rules deserve special attention, as defaults can be looser than your intent.
- Watch temporary exceptions: exceptions made to get through the migration often remain forever. Record each with an owner and an expiry date.
- Protect administrators: require strong authentication for everyone who can change policies during the project.
Protect against social engineering
Attackers exploit confusion. Users who expect new screens may accept suspicious prompts. Remind everyone how real messages from your organization look, how to report anything strange, and that helpdesk will never ask for a password. Be especially careful with recovery flows during the rollout, since attackers may pose as users who “lost their device after the migration”.
Protect evidence and monitoring
Keep logging intact and, where possible, store copies of old and new configurations as evidence. Confirm that detections still work. Set up extra alerts for the migration period, such as spikes in recovery requests, sudden policy changes, and unusual administrator activity.
Credentials and secrets
If any integration credentials need to be rotated or re-created as part of the move, handle them in a secrets store, never in tickets or chat, and remove old ones once they are no longer needed.
flowchart LR
SEC["Safe migration"] --> A["Equal or stronger rules"]
SEC --> B["Review defaults"]
SEC --> C["Time-limited exceptions"]
SEC --> D["Strong admin sign-in"]
SEC --> E["Phishing awareness"]
SEC --> F["Extra monitoring"]
SEC --> G["Careful secrets"]
Figure 20 lists the habits. Most are inexpensive; all are easier to start at the beginning than to retrofit.
During building work, a site keeps the fences up, the gates guarded, and the tools locked away, because a messy site invites trouble.
Reviewing administrator privileges
Migration projects often grant temporary extra privileges to engineers and contractors. Record each grant, set an end date, and review them at every gate. Afterwards, check the list of administrators against the people who truly need the access. Removing unused privileges is a quiet security gain that the project can deliver almost for free.
21Monitoring, Logging, and Success Metrics
Measure the migration as you go, so you know it is working.
Pick a handful of measures before you start, record their baseline under the old engine, and watch them through every stage.
| Measure | What it tells you | Watch for |
|---|---|---|
| Sign-in success rate | Whether people are getting in | Drops after each wave |
| Failed sign-ins by reason | What is going wrong | New failure reasons |
| Time to complete sign-in | User experience | Longer journeys |
| Helpdesk calls and topics | Confusion and gaps in guides | Spikes after changes |
| Recovery and unlock requests | Whether recovery is smooth | Sharp rises |
| Enrollment completion | Whether people set up authenticators | Abandonment |
| Application errors | Integration problems | Errors tied to sign-in |
| Security alerts | Whether detections still work | Silence or flooding |
| Policy change events | Unplanned configuration changes | Changes outside the plan |
Compare old and new
For the same time of day and population, compare measures before and after each wave. Because mornings are busier than afternoons and Mondays differ from Fridays, compare like with like.
Keep a migration log
Record every change, decision, issue, and fix, with times and names. The log helps the team hand over, helps auditors, and becomes a rich source of lessons learned.
flowchart LR
BL["Baseline under old engine"] --> CMP["Compare after each wave"]
LIVE["Live measures"] --> CMP
CMP --> DEC["Decide: proceed, pause, roll back"]
DEC --> LOGM["Record in migration log"]
Figure 21 shows measures as the basis for decisions. Numbers calm debates and justify the next step.
A hospital monitors a patient’s vital signs before and after treatment, comparing them with the starting numbers to judge whether the treatment works.
Setting thresholds sensibly
Choose thresholds from your baseline data. If the sign-in success rate is normally very high, a small drop after a wave deserves attention, while a larger normal variation requires wider tolerance. Define one level that means look into it today and another that means stop the rollout now. Agreeing these in advance keeps decisions calm.
22Testing and Validation Details
Concrete habits make the testing reliable and repeatable.
Test personas
Create a small set of invented people who represent your real population. Examples: a regular office worker with a phone prompt, a remote worker on a home network, a contractor with limited access, an executive with a security key, an administrator with elevated rights, a new joiner, a person who lost their device, and a user on an older browser. Run each persona through each important journey.
Test conditions
- Network: inside and outside trusted networks.
- Device: managed and unmanaged, desktop and mobile.
- Time: first sign-in of the day and repeat visits within a session.
- Risk: normal and unusual behaviour, where your policies use it.
- State: locked accounts, expired passwords, removed group memberships.
Evidence
Capture screenshots, event records, and results for each test. Store them with the migration log. When someone later asks “did you test the contractor case?”, the answer is a document, not a memory.
Regression after changes
Rerun the full suite whenever configuration changes during the project. Small late edits are the most common source of last-minute surprises.
Dry run of cutover
Practise the actual cutover steps in the rehearsal environment, including timing, checks, and rollback, so that the real event is a familiar routine. Time each step and note who does what.
flowchart TD
PS["Personas"] --> MX["Journey x condition matrix"]
MX --> RUN["Run and record evidence"]
RUN --> DIF["List differences"]
DIF --> FX["Fix or accept with approval"]
FX --> RR["Rerun suite"]
RR --> DRY["Dry run of cutover"]
Figure 22 shows the testing routine. The matrix ensures nothing important is forgotten, and the dry run converts the final step into a rehearsed routine.
A school plans a fire drill with every class, every exit, and a stopwatch, then repeats it until the whole building empties smoothly.
Testing the unusual but plausible
Include scenarios that are rare but real: someone returning from long leave whose password has expired, a person changing departments and groups, a contractor whose contract ends tomorrow, a user travelling abroad with a new phone, an account that was locked by repeated failures. These cases tend to hit recovery and policy edges where differences between the engines are most likely to appear.
23Operating Model After Migration
The project ends; the platform continues. Hand over properly.
After the final wave, the platform needs steady care. Write down how the new engine’s policies are structured, who may change them, how changes are reviewed, and how often the setup is examined. Without this, the cleanliness gained during migration slowly disappears.
| Responsibility | Typical owner | Rhythm |
|---|---|---|
| Policy design and review | Identity team with security | Quarterly review |
| Change approval | Change board or lead engineer | Per change |
| Application onboarding | Identity team with application owners | Per application |
| Helpdesk guides | Support lead | Update with each change |
| Log review and detections | Security operations | Continuous, monthly tuning |
| Authenticator strategy | Security architecture | Semiannual |
| Release awareness | Identity team | Review Okta release notes regularly |
Hold a retrospective
Within a few weeks of finishing, gather the team and ask what went well, what surprised you, and what you would do differently. Record the answers where the next project team will find them.
Retire leftovers
Remove temporary exceptions, test accounts, and rehearsal artifacts you no longer need. Archive the migration log and evidence under your retention policy.
flowchart TD
DONE["Migration finished"] --> HAND["Handover documents"]
HAND --> RUN["Operating rhythm"]
RUN --> REV["Quarterly policy review"]
RUN --> REL["Release note review"]
DONE --> RETRO["Retrospective"]
DONE --> CLEAN["Retire leftovers"]
Figure 23 shows the closing activities that turn a project into a stable service.
When builders leave, the owner receives manuals, maintenance schedules, and keys. A building without them decays quickly.
Keeping up with a changing platform
Okta continues to add and change features. Assign someone to read release notes regularly, assess what matters for your organization, and bring proposals to the quarterly review. Treat each addition as a small change project with its own rehearsal and communication, using the habits built during this migration.
24Advantages, Disadvantages, and Trade-offs
Migrating brings benefits and costs. Weigh both honestly.
Advantages
- Access to newer capabilities built for the Identity Engine
- More precise, better-separated policies
- More adaptable and often smoother sign-in journeys
- Opportunity to clean up years of accumulated rules
- Alignment with the direction of the platform
- Better foundation for stronger and passwordless sign-in
- One consistent engine across the organization
Disadvantages and costs
- Significant survey, translation, and testing effort
- Risk to custom pages, scripts, and embedded sign-in
- Users and helpdesk must learn new screens
- Policy rewrite may introduce subtle differences
- Rollback may be limited for some approaches
- Competes with other projects for people and time
- Temporary dual models during staged moves
Key trade-offs
- Speed versus safety: faster moves save effort but raise risk.
- Equivalence versus improvement: copying old behaviour is safer; redesigning is more valuable but riskier.
- Clean slate versus continuity: a parallel organization is tidy but means more re-work for users.
- Customization versus supported settings: heavy custom pages give control but cost maintenance at every change.
- Waiting versus acting: waiting is easy now but may mean a bigger, less supported jump later.
quadrantChart
title Migration activities by effort and value
x-axis Low effort --> High effort
y-axis Low value --> High value
quadrant-1 Plan carefully
quadrant-2 Do first
quadrant-3 Skip for now
quadrant-4 Reconsider
Survey and cleanup: [0.3, 0.9]
Rehearsal organization: [0.5, 0.9]
Helpdesk preparation: [0.25, 0.8]
Negative tests: [0.3, 0.85]
Rebuilding all custom pages: [0.85, 0.5]
Adding every new feature at once: [0.9, 0.3]
Figure 24 ranks sample activities. Early groundwork gives the best return; rebuilding everything or adding every feature at once should be questioned.
Before a big trip, buying good maps and booking the first nights pays off more than packing every gadget you might use.
Deciding when not to migrate yet
There are times when waiting is sensible: a critical business period, a major merger underway, or a shortage of skilled staff. But waiting has a price, because the gap between your configuration and the platform grows. If you delay, use the time productively by surveying, cleaning up, retiring dead rules, and updating custom code so that the eventual move is smaller.
25Design Patterns
Proven shapes of good practice for each recurring migration problem.
Survey before you translate
RecommendedProblem
Teams start rewriting policies without knowing what exists.
Pattern
Complete a labelled inventory of policies, applications, customizations, code, and detections first.
Result
Surprises appear early, and the plan is based on facts.
Rehearsal organization as a gate
RecommendedProblem
Testing directly in production risks real users.
Pattern
Build a rehearsal organization on the new engine and require parity there before any production step.
Result
Mistakes happen where they cost nothing.
Parity first, improvement second
RecommendedProblem
Mixing redesign with migration makes problems hard to diagnose.
Pattern
Migrate with equivalent behaviour, stabilize, and then introduce improvements one at a time.
Result
Every difference has a known cause.
Negative tests in every suite
RecommendedProblem
Tests confirm that allowed people get in but not that others stay out.
Pattern
For every positive test, add a negative one with a person who should be blocked or challenged.
Result
Translation errors that open doors are caught.
Staged waves with stage gates
RecommendedProblem
A single large cutover multiplies risk.
Pattern
Move friendly pilot users first, then waves, with agreed go and no-go limits at each gate.
Result
Problems appear while the affected group is small.
Helpdesk readiness as a gate
RecommendedProblem
Support learns about changes when users call.
Pattern
Train helpdesk and update guides before each wave, and make it a formal gate.
Result
Calls are answered quickly and calmly.
Time-limited exceptions with owners
RecommendedProblem
Temporary exceptions made to unblock the migration become permanent holes.
Pattern
Record every exception with an owner, a reason, and an expiry, and review them at each gate.
Result
The platform ends cleaner and safer than it began.
flowchart LR
DP1["Survey first"] --> OUT["Calm, safe migration"]
DP2["Rehearsal gate"] --> OUT
DP3["Parity then improve"] --> OUT
DP4["Negative tests"] --> OUT
DP5["Staged waves"] --> OUT
DP6["Helpdesk gate"] --> OUT
DP7["Exceptions expire"] --> OUT
Figure 25 shows that the patterns support each other. None is difficult alone, but together they turn a risky change into an orderly one.
26Anti-Patterns
Habits that look sensible but cause trouble.
The big bang weekend
AvoidWhat happens
Everything is switched at once over a weekend.
Why it hurts
Any problem hits everyone at once, with no time to react.
Instead
Pilot, then stage in waves with gates.
Copying rules word for word
AvoidWhat happens
Old policies are recreated literally in the new model.
Why it hurts
Structure and evaluation differ, so literal copies may behave differently or preserve old clutter.
Instead
Extract intent, translate, simplify, and verify behaviour.
Ignoring custom code until late
AvoidWhat happens
Custom pages and scripts are discovered during cutover.
Why it hurts
Fixes under pressure are rushed, risky, and visible to users.
Instead
Inventory with owners and retest early.
Testing only the happy path
AvoidWhat happens
Tests confirm that normal users get in.
Why it hurts
Weakened or opened rules go unnoticed.
Instead
Add negative, recovery, and edge-case tests.
Surprising the helpdesk
AvoidWhat happens
Support staff first hear about changes from callers.
Why it hurts
Answers are slow and inconsistent, and trust drops.
Instead
Train and equip support before each wave.
No emergency administrator access
AvoidWhat happens
All administrators depend on the same flows being changed.
Why it hurts
If sign-in breaks, nobody can fix it.
Instead
Maintain protected, tested break-glass access.
Declaring victory too early
AvoidWhat happens
The team disbands after the last wave.
Why it hurts
Exceptions linger, guides rot, and the policy set decays.
Instead
Run a retrospective, retire leftovers, and set an operating rhythm.
flowchart TD
A1["Big bang"] --> BAD["Lockouts, weakened rules,
angry users"]
A2["Literal copying"] --> BAD
A3["Late custom code review"] --> BAD
A4["Happy path only"] --> BAD
A5["Surprised helpdesk"] --> BAD
A6["No break-glass access"] --> BAD
A7["Early victory"] --> BAD
Figure 26 gathers the habits to avoid. Compare your plan against this list before each stage gate.
27Best Practices and Common Mistakes
A short checklist of what to do and what to avoid.
Best practices
- Confirm your upgrade path and timelines with Okta before committing to dates.
- Write down the reason for migrating and the success measures.
- Survey everything and label each item keep, translate, simplify, retire, or investigate.
- Record benchmarks of current behaviour for the key journeys.
- Build a rehearsal organization and require parity there before production.
- Translate intent, not syntax, and check rule order carefully.
- Include negative, recovery, enrollment, and session tests.
- Inventory custom code and embedded sign-in with named owners.
- Train the helpdesk and update guides before each wave.
- Pilot with friendly users, then stage in waves with go and no-go limits.
- Keep protected emergency administrator access.
- Keep every exception time-limited and owned.
- Hold a retrospective and set an operating rhythm.
Common mistakes
- Assuming that because users and applications stay, nothing else changes.
- Leaving catch-all rules unreviewed.
- Forgetting that detections depend on event patterns.
- Changing authenticators, directories, and the engine at the same time.
- Leaving old screenshots in helpdesk guides.
- Relying on memory instead of recorded test evidence.
- Not rehearsing the rollback.
- Treating Okta-specific details as fixed rather than checking current documentation.
flowchart LR
PL["Plan"] --> SU["Survey"]
SU --> RE["Rehearse"]
RE --> PI["Pilot"]
PI --> WA["Waves"]
WA --> ST["Stabilize"]
ST --> IM["Improve"]
IM --> PL
Figure 27 reminds us that the platform keeps evolving. The habits of the migration become the habits of everyday change.
28Real-World Scenarios
Four fictional companies show the ideas in use. All names and details are invented for teaching.
Ashgrove Bank: caution above all
Ashgrove runs heavily regulated services and cannot afford surprises. The team surveyed for two months, retired a third of their old rules, built a faithful rehearsal organization, and ran negative tests for every policy. They moved internal technology staff first, then back-office teams, then customer-facing staff, with formal approval at each gate. The migration took longer than a casual estimate, yet there was no unplanned outage, and auditors received a complete evidence pack.
Brightwater Hospital Group: shift workers and shared devices
Brightwater’s staff sign in on shared workstations at the start of busy shifts. The team built personas for nurses, doctors, and administrative staff, timed sign-in journeys, and found that a new step lengthened sign-in at shared machines. They adjusted the configuration to preserve speed where policy allowed, trained supervisors to help during the first week, and avoided complaints. The lesson: measure the human experience, not just whether the technology works.
Cinder Software: heavy customization
Cinder had embedded sign-in in three products and scripts that altered the sign-in page. The survey showed that these were the biggest risks, so the migration plan began with product work: updating embedded sign-in, replacing page scripts with supported settings, and testing in a rehearsal organization. The Okta configuration change itself, when it came, was uneventful. The team credits having started with the code, not the policies.
Dunmore Retail: seasonal peak
Dunmore’s workforce triples for the holiday season. The team scheduled the pilot in a quiet period, finished staged waves well before the peak, and froze further changes during the busiest weeks. They also ran a load rehearsal at expected peak sign-in volumes. When the holiday season arrived, sign-ins were smooth, and the temporary staff onboarded without difficulty on the new engine.
flowchart LR
A["Ashgrove
evidence and gates"] --> LESSON["Common thread:
survey, rehearse, stage, prepare people"]
B["Brightwater
measure real experience"] --> LESSON
C["Cinder
start with code"] --> LESSON
D["Dunmore
time around peaks"] --> LESSON
Figure 28 shows each company’s emphasis. Their pressures differed, yet each succeeded by surveying first, rehearsing in safety, moving in waves, and preparing the people who would feel the change.
29Frequently Asked Questions
Thirty short answers to common beginner questions. Always confirm specifics in current Okta documentation.
The Classic Engine runs sign-in as a fairly fixed sequence; the Identity Engine runs it as an adaptable, step-by-step conversation with more detailed policy controls.
To access newer capabilities, gain finer policies and smoother journeys, and stay aligned with where the platform is going.
No, generally they stay. What changes is how sign-in and access decisions are structured and configured.
Most standard integrations should, but test by group, especially embedded sign-in, legacy approaches, and critical applications.
Check your Admin Console and ask your Okta contacts. Identification steps may change, so rely on current documentation.
It can involve a technical change, but the real work is the survey, translation, testing, and people preparation around it.
Confirm your path with Okta, state your goals, form the team, and survey everything you have.
Because forgotten rules and customizations are the main source of surprises, and a survey also reveals what can be retired.
Not literally. The structure differs, so extract each policy’s intent and express it in the new model, then verify behaviour.
The first matching rule applies, so a broad rule placed too high can override a stricter one beneath it.
A separate organization on the new engine where you test your translated configuration with test users and applications, without risking real users.
The new engine making the same decisions as the old one where you intend sameness.
So that any difference after migration can be traced to a deliberate improvement rather than an unknown side effect.
Tests that confirm people who should be blocked or challenged actually are, for example a contractor without the required factor.
Page scripts, fully custom sign-in pages, and embedded sign-in boxes, because they rely on how the older widget and flows behaved.
Management scripts usually do not, but anything involving authentication flows or tied to event patterns should be retested.
Possibly not unchanged. Compare event output between engines for the same journeys and adjust rules before cutover.
Existing authenticators are generally expected to continue, but confirm for each type in your plan and rehearsal.
It is safer to migrate with equivalent behaviour first, stabilize, then introduce new options separately.
Consider size, customization depth, risk tolerance, regulatory demands, and resources, and discuss options with Okta.
It depends on the approach and organization. Ask Okta early, identify one-way steps, and rehearse the rollback.
Protected, tested accounts that let administrators recover control if normal sign-in misbehaves during the change.
Train them before users see changes, update guides and screenshots, give them common problems and escalation paths, and make readiness a gate.
Short, concrete messages with pictures, what changes and when, where to get help, plus reminders and a thank-you.
A friendly, tolerant group such as IT staff and volunteers who give honest feedback.
Sign-in success, failure reasons, time to sign in, helpdesk calls, recovery requests, enrollment completion, application errors, and alert behaviour.
Translate at least as strongly, review catch-all rules, time-limit exceptions, protect administrators, and test negatively.
Run a retrospective, retire temporary exceptions and test artifacts, hand over documents, and set a regular review rhythm.
A named project lead with an executive sponsor, supported by identity engineers, application owners, security, helpdesk, and communications.
In your Admin Console, the official Okta product and developer documentation, and through your Okta account contacts.
30Summary and Key Takeaways
A good migration is mostly preparation, and it is quiet when done well.
You began this guide with no background and now understand how to move an Okta organization from the Classic Engine to the Identity Engine. You know what changes and what stays, how sign-in flows and policy models differ, and where the real risks live: custom pages, embedded sign-in, scripts, detections, and rule order. You know how to survey, label, rehearse, test for parity with negative cases, prepare people, move in waves with gates, and keep a way back.
Treat the work as a loop of planning, surveying, rehearsing, piloting, staging, stabilizing, and improving. Prove equivalence before introducing improvements, keep exceptions short-lived, and keep your helpdesk ahead of your users. Confirm every platform detail, such as upgrade paths, feature differences, and timelines, in current Okta documentation, because details change while the ideas stay steady.
Key Takeaways
- Both engines do the same job, but the Identity Engine runs sign-in as an adaptable step-by-step conversation with more detailed, better-separated policies, so migration means translating intent, not copying syntax.
- Users, groups, and most applications and directory connections stay; the risk concentrates in custom sign-in pages, embedded widgets, scripts, hooks, detections, and rule order.
- Survey everything first, label each item keep, translate, simplify, retire, or investigate, and record benchmarks of current behaviour.
- Build a rehearsal organization and make parity there, including negative, recovery, and enrollment tests, a gate before any production step.
- Migrate with equivalent behaviour first, stabilize, and only then introduce improvements such as new authenticators, one change at a time.
- Pilot with friendly users, move in staged waves with agreed go and no-go limits, keep protected emergency administrator access, and rehearse your rollback.
- Prepare the helpdesk and users before each wave, time-limit every exception, hold a retrospective, and confirm all Okta-specific details in current documentation and with your Okta contacts.