Automating IT Onboarding: From 3 Days to 30 Minutes
The three-phase onboarding architecture that compresses 2-3 days of manual work into 30 minutes of clock time. Role-profile YAML, HRIS adapter pattern, parallel provisioning chain, and the offboarding mirror.
A new hire's first day is the highest-stakes IT experience in a company's calendar. Done well, they have everything they need before lunch and a positive first impression that lasts. Done badly, they spend their first week chasing tickets and never quite get over the bad welcome.
This article walks the onboarding architecture we have shipped to four clients over the past 12 months. The before state: 2-3 days of manual work per joiner, ~30% of new hires waiting on IT for at least one critical asset on day one. The after state: 30 minutes of automated work per joiner, joiners productive on day one, IT engineers freed from the most tedious recurring task on their plate.
The 3-day onboarding pattern we replace
The story is the same across estates. HR sends an email to IT: "Jane starts on the 1st. Please set her up as Sales Engineer." IT works through a checklist that has accreted over years:
- Create Entra ID / Okta / Google account (manual; 15 min)
- Assign group memberships based on role (manual lookup of "what does Sales Engineer get?"; 20 min)
- Assign Microsoft 365 / Workspace license (manual; 5 min)
- Add to relevant Slack / Teams channels (manual; 10 min)
- Provision SaaS accounts (HubSpot, Notion, Slack, Linear, Atlassian, Adobe, etc.; manual for each, 40-60 min total)
- Order or stage laptop with the right MDM profile (manual; 20 min plus shipping)
- Configure laptop on arrival (manual user-driven setup; 60-90 min on the day)
- Create welcome email + send onboarding materials (manual; 15 min)
- Schedule training sessions (manual; 15 min)
- Add to org chart, intranet, internal wiki (manual; 10 min)
- Notify reporting manager + team (manual; 5 min)
End-to-end engineer time: ~2.5 hours of focused work spread across 2-3 days. The spread matters as much as the total. Each step waits on the previous step. The laptop cannot be enrolled until the account exists. The SaaS accounts cannot be created until the email exists. The training cannot be scheduled until the calendar is provisioned. The serialised dependency chain is what makes "2.5 hours of work" turn into "3 days of elapsed time".
And it gets worse: the steps are error-prone. Wrong group membership. Forgotten SaaS account. Wrong MDM profile for the role. Missed channel invitation. We have measured the error rate across clients at 12-22% of joiners — meaning roughly one in five new hires hits a missing-access problem in week one and has to file a ticket back to the IT team that just onboarded them.
The 30-minute target architecture
The flow we ship runs in three phases: a pre-arrival phase (kicks off when HR fires the new-hire event), an arrival phase (when the joiner picks up their laptop or boots it for the first time), and a settle-in phase (first 30 days, where the agent surfaces missed onboarding items).
Phase 01: Pre-arrival (T-7 days to T-0)
HRIS event fires. The orchestrator (n8n workflow) walks the role profile and provisions the asset chain in parallel:
| Asset | Source of truth | Automation | Time |
|---|---|---|---|
| Entra ID / Okta account | HRIS payload (name, email pattern, role, manager, location) | Graph API / Okta SCIM | 30 sec |
| Group memberships | Role profile table (role → group list) | Graph API batched assignment | 30 sec |
| License assignment | License-by-role table | Graph API license operation | 10 sec |
| Conditional Access enforcement | Conditional Access policy (already in place) | Automatic via policy | 0 sec (pre-existing) |
| Microsoft 365 mailbox + OneDrive | License assignment triggers provisioning | Microsoft platform | 15-30 min (background) |
| Slack / Teams channel additions | Role profile channel list | SCIM + Slack API / Teams Graph | 1 min |
| SaaS accounts (HubSpot, Linear, etc.) | Role profile SaaS list | SCIM or vendor API per service | 5-10 min |
| Laptop order or stage | Role profile hardware spec | Procurement API or pre-staged inventory | 1-3 days shipping (parallel) |
| MDM enrolment profile | Laptop serial + role profile | Intune / Jamf / Kandji / Google Endpoint API | 2 min |
| Welcome email + materials | Template per role + manager input | Outlook / Gmail API | 1 min |
| Training schedule | Training catalog + role profile | Calendar API | 1 min |
| Org chart + wiki update | HRIS data | Internal directory API | 30 sec |
| Manager notification with checklist | Generated | Email / Slack | 30 sec |
End-to-end automated work: ~25-30 minutes of compute time, almost entirely parallel. The serialised chain that takes 2-3 days manually becomes 30 minutes of clock time.
Phase 02: Arrival (T-0)
The joiner powers on the laptop. Autopilot / DEP / ZTE recognises the device, applies the configuration profile, installs the standard app pack, enrols in the MDM. The user signs in with their pre-provisioned credentials. Conditional Access enforces MFA enrolment, FIDO2 key registration (if shipped with the device), and device compliance baselines.
Total elapsed time from power-on to "user can do their job": typically 25-40 minutes, depending on the size of the app pack and the network. The joiner is productive before lunch.
Phase 03: Settle-in (T+1 to T+30)
The orchestrator schedules a series of check-ins:
- Day 1 (afternoon): Slack DM from the bot — "How is the setup going? Anything missing?" If the user reports a gap, the bot files a ticket and tags the appropriate team.
- Day 3: Compliance check — has the user enrolled their FIDO2 key, completed mandatory training, signed the acceptable-use policy?
- Day 7: SaaS-usage check — has the user signed into each provisioned SaaS account? Accounts with zero usage by day 30 get flagged for reclamation.
- Day 30: Manager check-in — short structured form asking whether the joiner has what they need. Open-text answers feed back to the IT lead for trend analysis.
The settle-in phase is where the system learns. Patterns of missing access become role-profile updates. Patterns of unused licenses become procurement decisions. The system gets better at onboarding the next joiner.
The role-profile table — the single most important artefact
The whole automation depends on a clean answer to "what does a Sales Engineer get?". Most clients we work with do not have this written down. The first 2-3 weeks of an engagement is interviewing managers, walking historical tickets, and reconstructing the implicit "what does this role need" knowledge into an explicit table.
# role-profiles/sales-engineer.yaml
role: sales-engineer
inherits: standard-employee
groups:
entra:
- all-employees
- sales-team
- sales-engineers
- crm-access-write
okta:
- sso-hubspot-power-user
- sso-linear-read
licenses:
microsoft_365: business-premium
saas:
- hubspot:
role: sales-rep
hub: enterprise
- linear:
role: contributor
- notion:
role: full-member
teamspaces: [sales, sales-engineering]
- figma:
role: viewer
seats: 0 # consumes no paid seat
hardware:
laptop: macbook-pro-14-m4
accessories: [usb-c-hub, external-monitor-1080p, headset]
channels:
slack:
- "#sales"
- "#sales-engineering"
- "#announcements"
- "#random"
teams:
- "Sales Operations"
training:
required:
- security-awareness-2026
- gdpr-fundamentals
- product-onboarding-week-1
recommended:
- advanced-product-demos
welcome_template: welcome-sales-engineer.md
buddy_assignment: auto-pick-from-team
This file is the source of truth. The orchestrator reads it, walks the asset list, provisions each line. When a new role emerges, the IT team writes the YAML once and every future joiner in that role gets the same treatment.
The HRIS event payload — getting the trigger right
Every HRIS exposes a different webhook. The orchestrator needs to handle them uniformly. The pattern we use is a thin adapter layer per HRIS that produces a normalised event:
interface JoinerEvent {
externalId: string; // HRIS employee ID
firstName: string;
lastName: string;
preferredName?: string;
workEmail: string; // generated per company convention
role: string; // matches role-profile filename
manager: { externalId: string; email: string };
location: { country: string; city: string; timezone: string };
startDate: string; // ISO 8601
employmentType: 'full-time' | 'part-time' | 'contractor';
costCenter: string;
customFields: Record<string, unknown>;
}
BambooHR, Personio, Workday, HiBob, and Rippling all map cleanly onto this shape once the adapter is in place. The downstream workflow does not need to know which HRIS the event came from.
The hard parts — what the brochures skip
Hard part 01: Identity timing
Microsoft Graph promises that a user created via API is "available" immediately. The reality is that group membership, license assignment, and Exchange Online provisioning take 5-30 minutes to fully propagate. If the workflow assumes immediate availability and tries to set up the Outlook profile in minute 2, it will fail.
The pattern: the orchestrator does not block on Microsoft propagation. It schedules a "ready check" workflow that polls the identity for full availability (mailbox provisioned, license active, group membership reflected in Graph) and only then proceeds with downstream actions that depend on those readiness signals.
Hard part 02: SaaS API consistency
The promise of "SCIM provisioning" is uniform. The reality varies. Some SaaS vendors implement SCIM well (Slack, Okta, Atlassian Access). Some implement it partially (HubSpot, Notion). Some do not implement it at all and force you to use their custom admin API (some smaller tools).
The pattern: a SaaS-adapter library with one module per vendor. Each module exposes provision(user, role), deprovision(user), check(user). The orchestrator does not know which API style each vendor uses. The library hides the variance.
Hard part 03: Hardware logistics
Laptops do not get provisioned over an API. Someone has to physically ship them. The pattern we ship: the workflow opens a ticket in the procurement system with the role-profile hardware spec, sets a target ship date 2 days before start date, and tracks the order through to delivery. Where the client uses our Hardware & Endpoint Management service, we handle the procurement directly under our distributor agreements.
Hard part 04: Edge cases that need human judgement
Some joiners do not fit a standard role. A C-suite hire. A consultant on a special arrangement. A boomerang employee returning to a different role. The workflow flags these for human review rather than guessing.
The pattern: the role profile YAML has an auto_approve: true | false field. Standard roles auto-approve. Unusual roles trigger a manager + IT-lead approval step before provisioning proceeds.
Hard part 05: GDPR + data residency
Joiner data flows through the orchestration platform. The platform sees PII (name, email, role, contact). The DPA needs to cover this; the platform needs to be in an acceptable jurisdiction.
The pattern we ship: n8n self-hosted in the same EU region as the client's identity systems. No PII leaves the client's tenant. Logs are retention-policied. The whole pipeline is GDPR Article 30 documented as part of the deliverable.
The offboarding mirror
Onboarding has a mirror: offboarding. The same role-profile table that says "what does the joiner get" answers "what gets revoked when they leave". The workflow is shorter (because we are removing things) but the stakes are higher (because forgotten access is a compliance risk).
We ship offboarding alongside onboarding by default. The trigger is the HRIS termination event. The flow runs the deprovisioning chain — revoke access, transfer ownership of OneDrive content to the manager, archive Slack history, wipe the device, return the hardware. Every step is logged for audit.
What the measurable impact looks like
From a 250-seat client onboarding ~3 hires per month. Six months post-deployment:
- Engineer time per joiner: 18 minutes (was 2.5 hours)
- Elapsed time joiner to fully productive: ~4 hours (was 2-3 days)
- Day-1 access gaps reported: 4% of joiners (was 22%)
- Joiner experience score (30-day check-in): 4.6 / 5 (was 3.1)
- Offboarding access-revocation SLA breaches: 0 (was ~1/quarter)
- Annual engineer time recovered: ~80 hours (3 hires × 12 months × 2.2 hours saved)
The numbers are useful. The cultural shift is bigger. The IT team stopped being the bottleneck on hiring. The manager stopped having to chase tickets for their new report. The new hire's first impression of how the company runs improved measurably.
Building this yourself vs having it built
The architecture is not secret. A capable platform team can build the whole thing in 8-12 weeks. The build is repetitive but tractable — well-defined APIs, clear role-profile schema, predictable failure modes.
Where engagements typically struggle:
- The role-profile inventory work is harder than it looks. Capturing the implicit knowledge takes weeks of interviews.
- The SaaS adapter library accumulates technical debt fast. Each vendor's API has quirks.
- The HRIS event handling has edge cases the documentation does not surface.
- The ongoing operations are real. SaaS APIs change. Role profiles drift. Without a maintenance discipline, the system rots in 6-12 months.
The build vs buy decision lands the same way as most ITSailor decisions: build if you have the engineering capacity and the operational discipline; engage us if you want the outcomes without the engineering overhead. Either way, the architecture above is the playbook.
The brutally short version
- The 3-day manual onboarding pattern is solvable. Most companies have just not solved it yet.
- The role-profile table is the single most important artefact. Build it first.
- The HRIS event is the trigger; the orchestrator (n8n) is the routing layer; the adapter library hides API variance.
- The parallel provisioning chain compresses 2-3 days of elapsed time into 30 minutes of clock time.
- Offboarding is the mirror — same role-profile table, reverse direction.
- Budget the ongoing operations explicitly. SaaS APIs drift; role profiles evolve.
If you want this in your estate — we ship the full pipeline (role-profile inventory, orchestrator build, SaaS adapter library, HRIS integration, offboarding mirror, settle-in flows) in 8-12 weeks under our Intelligent Workflow Automation engagement. The discovery call costs nothing and includes a sample role-profile YAML for your most-hired role.