03
Detailed Case Study

Platform Navigation

Systems Architecture for Scalable Usability — rebuilding navigation for a multi-product cybersecurity platform after four acquisitions.

// How it started

Four acquisitions. Four navigation systems. No shared logic.

The company had grown through acquisition. Each acquired product came with its own navigation architecture — its own URL structure, its own sidebar logic, its own concept of what "home" meant. When these products were being merged into a single platform, no one had unified the navigation layer. They'd just placed products next to each other and hoped users would figure it out.

The result was a "Frankenstein" navigation experience. Users switching between products felt like they were changing apps. Active states were contradictory — the same section could be highlighted in two different sidebars simultaneously. Deep links broke across suites. 40% of the visible menu items were redundant, appearing in multiple places with different labels for the same destination.

"Navigation is how users build a mental model of a product. If that model breaks every time they cross a product boundary, trust collapses — and so does retention."
// The audit

Before designing, I had to understand what we had.

I spent the first phase auditing every navigation surface across the six products. I documented every menu item, every route, every contextual label, and every state — hover, active, disabled, selected. What I found confirmed the scope of the problem:

01
40% redundancy — Nearly half of all navigation items existed in two or more places with inconsistent naming. "Reports" in one product was "Analytics" in another and "Audit Logs" in a third — all pointing to functionally similar views.
02
1,000+ unmanaged routes — Deep links were hardcoded per-product with no shared routing logic. A link that worked in one suite's context would 404 or redirect incorrectly in another. Engineering was managing exceptions manually.
03
No behavioral spec — There were no documented rules for how navigation should behave. Hover delays, fly-out timing, active state persistence, breadcrumb logic — these had never been defined. Every team had implemented their own interpretation.
04
Tenant switching confusion — Multi-tenant users — security admins managing multiple client environments — had no clear "where am I?" anchor. Switching tenants felt disorienting because the navigation didn't change in any meaningful way to signal context.
// The architecture

Hub and Spoke — one model for six products.

I proposed a Hub and Spoke IA model. The core idea: separate global navigation from contextual navigation. Stop asking users to find their way through a monolithic sidebar that tried to do everything for every product simultaneously.

// GLOBAL BAR
The Hub
Persistent across all products. Contains: Product switcher, Global search, User profile, Notifications. Answers: "Where can I go?" and "Who am I logged in as?" Never changes regardless of which suite is active.
// SIDE RAIL
The Spoke
Contextual to the active product. Contains only items relevant to the current suite. Collapses to a slim icon rail for deep work sessions. Expands to a labeled nav for orientation and discovery.

This separation gave users a stable global anchor (the hub) while letting each product's navigation be purpose-built for its workflows (the spoke). Users in the SIEM view got a SIEM-optimized sidebar. Users in endpoint management got endpoint-specific navigation. The product switcher moved them between contexts — but the global bar always stayed the same.

// Key design decisions

Three decisions that defined the framework.

01
Behavior before visuals

The most important decision was sequencing. I refused to open Figma until I had written the behavioral specification — a document defining every navigation state, every transition rule, every edge case. Hover delays for fly-outs (to prevent "diagonal mouse" frustration). How active state should persist when a user is three levels deep in a sub-menu. What breadcrumbs should show after a deep link. What happens when a user's session expires mid-navigation. Engineering needed these answers before a single pixel was placed.

02
Single JSON payload for all routing

I worked with the engineering lead to define a single JSON routing payload that would govern navigation across all six products. Instead of each product maintaining its own routing table, one structured data file would define: the navigation tree, permission levels per item, active state logic, and deep link mappings. This meant that adding a new product or updating a navigation item required a change in one place — not six. It also meant QA could test routing behavior systematically, not product by product.

03
Slim vs. Expanded rail — designed for real environments

Security operations center users work on wide monitors at high information density. They don't need a labeled sidebar eating 240px of horizontal space. I designed a Slim state (icon-only, 56px wide) that collapsed the sidebar without hiding it, preserving spatial awareness while maximizing content area. The transition between Slim and Expanded was state-persisted per user — your preference followed you across sessions. This required a simple localStorage flag but dramatically improved the experience for power users who spent 8-hour shifts in the platform.

// Behavior specification

Defining what had never been written down.

The behavioral matrix was the most valuable deliverable of this project. It wasn't a Figma file — it was a structured document that engineering could implement directly. Here's a representative sample of what it covered:

Scenario
Expected behavior
Notes
User navigates 3 levels deep
Active state persists on all parent items
Breadcrumb shows full path
Fly-out menu — mouse hover
150ms delay before open
Prevents accidental triggers on diagonal mouse movement
Product switcher — tenant switch
Full context reset, global bar stays
Spoke reloads for new tenant. Banner confirms context.
Deep link from external source
Nav state reconstructed from URL
JSON payload resolves active state from path params
Slim → Expanded transition
200ms ease. Preference saved to localStorage.
State persists across sessions per user
Session expiry mid-navigation
Preserve current URL, redirect after re-auth
User returns to intended destination, not home
// The handoff

Not just Figma files — a navigation matrix.

Previous handoffs had been Figma-first: hand the engineer the frames, answer questions as they come up, patch issues in QA. This project flipped that model. I delivered three artifacts before a single Figma frame was handed over:

Figma frames came last — and they were faster to build because the hard decisions had already been made. Engineering had fewer questions. QA had fewer surprises. The spec became the source of truth.

// A key refinement

The tenant switcher: from search box to dropdown.

One of the most impactful late changes was the tenant switcher. The initial design used a search field — type to find your organization. In usability testing, this caused immediate confusion: users didn't know what to search for, and the input field felt like it required knowledge they didn't have (exact tenant names).

I replaced the search box with a dropdown — a pre-populated list of tenants the user was authorized to access, surfaced in priority order. The dropdown moved to the top global bar, making it a permanent "where am I?" anchor rather than a buried utility. This one change resolved the tenant switching confusion pattern that had appeared in multiple support tickets. Users could see their options instead of having to remember them.

"The best navigation design is the one users don't notice. They just end up where they intended to go."
// Outcome

100% adoption in 4 months. One JSON file for all of it.

The framework shipped and was adopted across all six products within four months. The JSON-driven routing eliminated the per-product navigation maintenance burden that had been generating ongoing engineering debt.

The biggest takeaway: navigation design is information architecture, not visual design. The visual execution took a fraction of the time once the structure was right. The work that mattered was the audit, the matrix, and the specification — the unglamorous foundation that let everything else ship cleanly.