← all work

Integration and Sync Observability

Lumos · 2026

Timeframe: Integration page 8 weeks, Sync Observability ~3 months

Lumos is an identity and access management platform that connects to the systems a company already runs: Okta, Workday, AWS and the rest. We pull in upstream information, then govern all access through our system. Every one of our products depends on one thing: the integration and the sync system.

TL;DR

Connecting to integrations is one of the first experiences a POC customer goes through. The status quo was a form with a link to documentation - the rest is on your own.

This process is extremely error prone. Pick the wrong auth method, enter the tenant name in the wrong format, or generate the token on the wrong page, and the result is waiting hours while the first sync runs, only to find that half of it failed.

We reimagined this entire experience. We made it easier to find integrations and understand their capabilities; made it possible to test the connection before the sync actually runs; and added an agent that helps you along the way, rather than leaving you to read documentation by yourself. On top of that, we revamped how we show sync status, so both customers and our engineers can debug more effectively when something goes wrong.

Challenges & Opportunities

For the past year our focus was closing the connector coverage gap - build as many integrations as possible, as fast as possible. It worked, and it also meant nobody had the time to design the actual experience of connecting one. But this is the front door of the product: a customer connects three to ten integrations during a POC before they get to evaluate anything else. There are really two problems hiding in there:

  • "Help me connect this" - Find the integration, understand what it can actually do, get the credential right, and know it works
  • "What's happening with my sync?" - Know when something broke, what broke, and what to do about it, without filing a ticket

Everything downstream depends on the quality of this data - Identity Intelligence, the agent's recommendations, the Access Graph. If an integration syncs accounts fine but quietly fails on entitlements, it doesn't just look a little broken; it makes our whole intelligence layer wrong in a way nobody can see.

Four customer messages to Lumos Support in Slack. An Ironclad OAuth integration keeps failing because the sandbox and production tenants share an instance name; an admin reports a batch of failed integrations with a screenshot of the Integrations page showing nine unresolved errors across AWS, Box, Ironclad, Jira, Looker, Salesforce, Snowflake, Snyk and Zoom; another asks why the Google Workspace integration failed, with a row reading Connected but Failed; and a fourth hits a 404 connecting Splunk after their security team supplied the token.
A sample of what reaches support, usually customers see connection failures with no explanation

Key bets

01User prefers a working surface over a storefront

We replaced the card grid with a table, split across three tabs - Connected, Discover, On-Prem Agents - with sync status, error counts, capabilities and entitlement types all as columns.

Almost every integration marketplace uses the card layout, but two things pointed it in the other direction for us:

  • A card grid is a new pattern we'd have to maintain, whereas the table gets search, filtering, sorting and export for free
  • When we put both in front of customers, the table won outright. The admins we talked to weren't browsing, they were looking for a specific integration. POC customers were more impressed when they saw a denser collection of integrations available.
The old Integrations page as a card grid, on the Available (142) tab. Each card carries only a logo, a name, an optional HRIS or On Prem tag and a user count, so most of the card is empty space.
Before - tile layout with LOTS of empty space
After - All available integrations in one sortable table, with capabilities and entitlements at a glance

02Prove it works before you commit, not after

We moved validation ahead of the connect action. A test stage runs a real probe against the staged credentials before anything is saved - accounts first, then entitlements, then the associations between them - and shows you the sample records it pulled back, or the errors it ran into.

The tricky part was that the status quo wasn't "no validation", which is exactly what made it dangerous. The existing check only proved the credential parsed. Whether Lumos could actually read the data it needed didn't surface until the first full sync, often hours later and usually in the middle of a POC.

The Adyen connect drawer with the agent open beside it. A Test Connection panel reports Test successful, you're good to connect, with Accounts 12 of 12 expanded to show a real record pulled back - username, email, ID and custom attributes such as title, department and two-factor auth - then Entitlements 10 of 10 and Entitlement associations 14 of 14, with Cancel and Connect at the bottom.
Testing returns real records for users to cross reference

03No one wants to read documentations (except for agents!)

Our integration agent sits right in the connection surface as a split pane next to the config form. It opens by default so help is there at the moment someone is stuck, instead of waiting to be discovered.

Test results get handed to it automatically and the agent can help diagnose it without being asked: which permission is missing, and where to go add it. The admin never has to describe their own error to the agent.

We were deliberate about where to draw the line though. The first version we went with actually included self-prompting, so when you are simply viewing an integration - you are immediately greeted with a wall of text. This created a jarring user experience, so we settled on the principle that an agent should never act or advise on something without an explicit intent expressed by the user.

The CrowdStrike (Multi-Auth) connect drawer open over the Integrations table, with the agent as a split pane on the right. The admin has asked what their options are and what the integration can do, and the agent answers with a What it syncs table - users, roles and last login activity, each marked for sync or provisioning - a note that the integration is read-only, and numbered How to connect steps naming the three credentials to fetch from CrowdStrike.
Agent used to self-prompt, useful but odd experience

04Honest status over reassuring status

We want to provide more transparency around how our sync works, so users can trust the system. We decided to display each entity along with their own progress, timestamp, and record breakdown. This mimics how our sync runs in real time.

Sync stops silently degrading and customers can now find out about them in the UI rather than downstream (wrong data in access reviews, stale identities, broken LCM etc.).

The old Google Workspace (API) detail page, showing a single green check beside the integration name and its setup instructions. An overlay from the Reconnect menu lists the syncs underneath: Sync Google Workspace Users and Sync Google Workspace Groups, both reading Error, Failed to connect Google Workspace.
Before - failed status with no further explanation
The new Sync Status view for Okta. A last-seven-days run list sits on the left, and the latest run reports 15 of 16 entities synced with 1 failed. Each entity - Accounts, Identities, Lumos Groups, Group Memberships, Entitlements, Last Activity, Managed Accounts and the rest - carries its own duration, record count and state. Custom Attributes is expanded to Installation failed, with a Data Acquisition step that succeeded, a Data Installation step that failed, and the raw error: Lumos store rejected 218 rows, schema validation failed on field manager_id.
After - each entity carries its own state, timestamp, and record breakdown

Impact

The integrations page revamp shipped to all customers after we validated it with five design partners, and sync visibility reached GA - you can now see the last seven days of syncs for each integration, including the runs in progress, the Entity and Pipeline views, and per-stage timing and record counts.

Quantitative

SignalBaselineTargetReading
Integration / sync support-ticket volume ~50% of all tickets < 50% ~35% of tagged tickets, Feb to May
Failures caught before the customer - 80% found internally first > 83%, measured in May
New connections completed self-serve - > 70% In progress

Qualitative

  • It became an internal debugging tool, not just a customer surface. Sync Visibility is how we locate and fix failing steps before the impact reaches customers.
  • Customers who gave feedback saw it land. Enterprise customers recognised their earlier feedback in the redesign and became more motivated partners, and in general more receptive to upsells.
  • Sync visibility and performance improvements were named internally among the year's most impactful shipped work, as longstanding customer requests finally closed.