SailPoint ISC Greenfield Implementation Field Guide
Lifecycle States and Joiner Mover Leaver Automation
On this page
Joiner, mover and leaver (JML) is the visible face of the program. This page describes how the automation was built from lifecycle states, event-triggered workflows, manager forms and scheduled jobs, and the places where it needed human help.
The lifecycle model
The HR-driven identity profile had five lifecycle states, all driven by the computed cloudLifecycleState attribute described on the identity model page.
| State | Meaning | Account action |
|---|---|---|
| Pre Joiner | Hired, not yet started | Enable the directory accounts |
| Active | Employed | Enable the directory accounts |
| Intermediate | Anything that fits no other rule | None |
| Inactive | Employment ended (end date reached at 22:00 local) | Disable on a list of sources |
| Emergency Termination | Manual immediate cut-off | Disable on the directory sources |
The lifecycle action source list is explicit
This is the most expensive caveat in this section. Each lifecycle state action names its target sources by ID. At the end of the program the Inactive disable action covered 13 of 146 sources: the directories and the earliest crown-jewel applications. Sources added later were not on the list, including some with no other disable path.
That is not necessarily wrong. Several later applications were handled by compensating mechanisms, for example a scheduled workflow that disables accounts in a payroll SaaS on a half-month calendar, or a manual leaver process. But it has to be a decision, not an accident.
Make this a standing checklist item for every new source:
- Is the source account-managed by ISC (it can disable accounts)?
- If yes, is it on the Inactive and Emergency Termination action lists?
- If no, what disables or reviews access for a leaver, and who owns it?
There is also an organisation setting that controls whether a lifecycle change honours a source's own "can enable" feature flag. It was off. Know its value before you assume lifecycle actions are skipped for sources that cannot enable accounts.
The automation layer: events, schedules and forms
All JML behaviour sat in workflows reacting to platform events. The trigger types used:
| Trigger | Fired by | Used for |
|---|---|---|
| Identity attributes changed | A filtered change to one or more attributes | Leaver off-boarding when an end date is set, mover on location change, HR writeback, email-change sync to an app |
| Post-provisioning | A completed provisioning plan, filtered by target source and operation (create, enable) | Joiner onboarding and rehire after the directory account exists |
| Form submitted | A specific form definition | Manager completes the joiner, mover or leaver form |
| Scheduled (cron) | A time | Writeback sweep, a SaaS disable job, the daily leaver job, an "update the identity system" notice |
| External HTTP | An authenticated call | A welcome email after account creation in a database application |
| Interactive process launched | A launcher in the user portal | Custom access-request forms (see the forms page) |
Filters use JSONPath over the event payload. A leaver trigger watches for cloudLifecycleState changing to inactive; a rehire trigger watches the same attribute going from inactive to active or preJoiner. These filters are exact, so keep the attribute names and values stable.
Joiner
- HR creates the person. The design asked for at least 14 calendar days between request and start date.
- The HR source aggregates hourly. ISC creates the identity, computes lifecycle state, login name and email, and moves the lifecycle to
preJoineronce the start date is within the processing window. - The lifecycle action enables the directory account. Creation happens in the user's local time zone, 14 days before start.
- Directory provisioning sets the identity-derived attributes, places the account in the right organisational unit, adds baseline groups and generates an initial password.
- A post-provisioning workflow fires on the committed directory create. It waits (a sleep step) so downstream sync can settle, then:
- emails the line manager the credentials and a link to the IT requirements form,
- notifies local IT, the HR contact, the finance contact and the central team,
- writes the email and login name back to HR (see the identity page).
- When the manager submits the form, a form-submitted workflow branches on the answers (for example which applications are needed) and sends mails to the ITSM mailbox that opens tickets. Each branch is a comparison step, so the workflow grows with every application option.
Joiner caveats
| Issue | Detail | Mitigation |
|---|---|---|
| No visibility of form completion | ISC could not tell whether the pre-joiner form had been filled in, so it could not re-trigger when the manager changed before the start date | Build a re-send path: an externally triggered workflow or a manually run job. We resent forms by hand dozens of times |
| Wrong manager in HR | HR tags the wrong manager when creating the record; the form goes to the wrong person | Fix the data in HR first, then re-send. Do not paper over it in ISC |
| Manager does not know the process | Managers on leave, or never told, never complete the form, so the equipment is not released and access is not requested | Communication and training before go-live; reminders; delegate approval |
| Duplicate display names | The directory create failed on a duplicate distinguished name or UPN | Unique login names, unique UPN, a retry path (re-provision from ISC after fixing) |
| Pre-existing accounts | People who joined before go-live had accounts created by the old tool and needed groups re-pushed | A "new joiner" flag in the identity (hire date compared to today) so legacy cases are handled separately |
| Audit evidence | The audit process needed an ITSM ticket per joiner; no manager response meant no ticket | Create the ticket when the form is launched, update it when the form is submitted |
Leaver
The leaver design had three coordinated parts.
- Reminders and the manager form. When an end date is set or changes, a workflow compares it to now and starts a reminder sequence: weekly reminders to the manager until a week before separation, then daily, with the country HR contact copied. The manager completes a leaver form (asset recovery, out-of-office text, who gets the mailbox).
- The termination moment. At 22:00 local on the end date the lifecycle becomes
inactive. TheInactiveaction disables the account on the listed sources. The directory disable policy moves the account to a disabled container, hides it from the address list and stamps a note. - Aftercare. A daily scheduled workflow finds leavers by their next-processing date through a search call and loops over them to finish off-boarding. Notifications go to the central team, HR, the finance contact, local IT and the manager.
Leaver caveats
- Timing and time zones. Automated tasks run in the user's local time after midnight; the cut-off is 22:00 local on the end date. A last day entered wrongly in HR (or an earlier "IDM disable date" than the stated end date) disables the person early. Several tickets were exactly this.
- Group removal is abrupt. On the first day of production the disable removed all groups, including the one that must always remain (the cloud-sync group), cutting a user off from mail who was still active in HR. Fix: keep a list of groups that are never removed, and delay removal of the rest for a number of days after the end date. The design said "seven days after termination only the base groups remain"; build it that way.
- Re-adding groups on rehire is not automatic. Previously removed groups do not come back; users must request them again. State this in comms.
- Mailbox side effects need a home. Converting the mailbox to shared, setting an out-of-office message, assigning a leaver licence and hiding from the address list were scripted steps in the legacy tool. Inventory them, decide which remain scripts, which become group-driven, and which become workflow steps. Do not assume ISC does them.
- Contractors and vendors. Vendor contract expiry arrives as a disable request, not an HR event. Provide an intake and an approval path.
- Extended access. HR sometimes asks to extend access after a recorded end date (handover, garden leave). The only clean path is to change the disable date in HR before it passes. Tell HR.
Mover
A mover is any change in a mapped attribute, but only some changes need action.
| Change | What happens |
|---|---|
| Location, region or country | A mover workflow fires, the manager gets a form (asset return, new move date), the directory moves the object to the new container, and the parties are notified |
| First or last name | HR changes it; the directory logic generates a new email, UPN and aliases, keeps the old address as an alias, and notifies. Users may need to sign in again because the UPN changed |
| Title, department, function | Synced to the directory only if the attribute sync for that attribute is on |
| Move to or from a regional delivery centre | Kept as a manual process inherited from the old tool: new account, new mailbox, old account disabled. The user deliberately gets no access to previous mail or profile |
| Return from maternity leave to a new role | Not detected as a mover by location logic, so no notification or access change reached local IT. Decide whether role changes should raise a mover form |
Attribute sync is the mover engine
ISC pushes only the attributes you enable in the source's attribute sync configuration. In the directory source about 8 attributes were on and 9 were off (names, display name, phone, employee ID, country code, user type, department were off at the end). This is by design: sync what the application team asked for, nothing else.
Rehire
Rehire is a lifecycle transition from inactive back to active or preJoiner for an identity that already exists.
- The directory account is re-enabled and moved out of the disabled container.
- A new initial password is generated and sent to the manager.
- Baseline groups return; business groups do not (see above).
- The workflow variant for a second directory domain triggers on enable rather than create.
- Rehire workflows showed many canceled executions. Investigate cancellations before accepting them as normal; ours were a mix of expected branches and unfinished waits.
Notifications and ITSM routing
Mail was the glue between ISC and everything else. Treat notification design as its own workstream.
| Concern | Guidance |
|---|---|
| Sender identity | Production mail came from an internal no-reply address; sandbox came from the vendor's default. Tests in sandbox must never go to production distribution lists |
| Ticket creation | ISC created ITSM tickets by sending mail to a mailbox with a fixed subject convention. The ITSM side parsed the subject to route to the right queue. Changing the subject breaks routing |
| Routing by location | After go-live the subject gained the location so tickets could be assigned to the right local team. Add routing keys early |
| Who gets what | Keep a matrix of event by audience (manager, initiator, HR, finance, local IT, central team, ITSM). After go-live the matrix changed: local IT and HR also received the filled form details; central support got a "user account disabled" notice; credentials were restricted to the manager only |
| Credentials in mail | Sending credentials to several parties was removed. Send to the manager only, force a reset on first sign-in, and note it in the SOP |
| Templates | The tenant ended with about 60 notification templates. Name them by event and audience |
Hypercare showed that most "SailPoint is broken" tickets from regions were notification gaps: a distribution list not updated, a contact wrong in the lookup table, a manager who never received the form, or an ITSM queue not receiving mail. Test every mail path end to end with real recipients before go-live.
Nightly validation during rollout
For the first weeks of production the team exported a joiner list and a leaver list each night from search (display name, email, created date, lifecycle state, source account count, start or end date, manager) and compared them to HR. Source account count was a cheap health signal: a joiner with fewer accounts than the baseline had a provisioning gap. This took an hour a day and caught problems before users did.
Design cautions
- Wait steps and form steps leave many executions in
ExecutingorCanceled. Monitor the count, and know what a normal ratio looks like. - A mover or joiner workflow branching on a dozen application flags becomes unmaintainable. Prefer data-driven branches (a form that lists requested access items) over one comparison step per application.
- Do not trigger a workflow from an attribute you also edit for testing. We kept "manual trigger" workflows keyed to a department change; they are a hack and should be disabled once real triggers work.
- Put the scheduled catch-up next to every event trigger. Events are lost, and the sweep repairs them.
Actions
- Enumerate lifecycle states and write down each state's account actions and source list.
- Add "update the lifecycle source list" to every source onboarding checklist.
- Build the re-send mechanism for forms before go-live.
- Define groups that are never removed and delay the removal of the rest.
- Inventory legacy mailbox and licensing scripts and assign each a new owner.
- Build the notification matrix and test every path end to end.