Scytale Enterprisea case study
← Scytale — the whole project
Founding product design · HPE / Scytale

Scytale
Enterprise

Turning an open-source identity engine into a product enterprises could actually run.

weeks → min onboarding1 of 1 designerAcquired by HPE
the price of entry
Before
$ spire-server entry create \
   -spiffeID spiffe://acme/billing \
   -parentID spiffe://acme/node \
   -selector k8s:ns:prod \
   -selector k8s:sa:billing
# repeat, by hand, for every service…
a guided, self-service UI
Register workload
spiffe://acme/billing · Kubernetes
Create
User researchProduct & UX strategyInformation architectureInteraction designDesign systemsHPE · Scytale
01The problem

Enterprises had outrun their own security.

A single application was no longer one thing — it was dozens of interconnected services, owned by different teams, running across cloud, containers, and on-premise machines. Every service had to prove who it was to every other service. The perimeter-based tools built to handle that — firewalls, API gateways, Kerberos, OAuth — assumed a network edge that no longer existed.

66%

of IT executives were concerned about their service-authentication credentials.

83%

agreed their existing approaches couldn’t scale to a dynamic, hybrid-cloud strategy.

The deeper problem

The industry’s answer was Zero Trust — and Scytale had already built its engine in SPIFFE & SPIRE. But it was almost entirely command-line-driven, the domain of a few engineers willing to hand-write YAML. Powerful, and stuck niche.

02The goal

Remove the command line as the price of entry.

01 · Keep the power

Wrap the raw capability of SPIFFE/SPIRE in a platform that let security teams retain full control and scale to thousands of identities — compressing application onboarding from weeks to minutes.

02 · Win a skeptical audience

My users trusted the terminal and distrusted abstraction. The UI couldn’t just be prettier than the CLI — it had to be faster, clearer, and harder to break, while still respecting their expertise.

Turn an engine only experts could drive into a product an enterprise team could adopt.

03Understanding the users

Signal from where most teams don’t look.

I came in with no prior knowledge of the identity-security space — which was part of why I took it. Understanding came from a blend of sources, not one tidy research phase.

~75companies & associatesLost sales mined for signalOSS base from SPIFFE
An honest research call

This was an early-stage startup racing to launch. We made a deliberate call: validate enough to design responsibly now, and formalize rigorous usability research post-launch, against a concrete product. Naming that tension is closer to what happened than pretending we ran a textbook program — and the roadmap wasn’t lip service. Under HPE, it became a documented set of research OKRs.

04Three personas

Who I was designing for.

Simeon, the Security Engineer persona

Simeon · Security Engineer

Needs to automate security tasks and delegate — so he stops being the bottleneck every team routes through, while keeping security consistent across distributed teams.

Owen, the DevOps Engineer persona

Owen · DevOps Engineer

Needs a platform that scales and slots into his existing toolchain — Kubernetes, Docker, cloud infra — without forcing development to a crawl.

Deepti, the Software Developer persona

Deepti · Software Developer

Wants a low-risk, self-service way to integrate security that doesn’t disrupt her development cycle.

05How might we

The questions that drove the work.

Without a terminal
manage identities, workloads & permissions at scale — no CLI.
Complex, but scannable
represent highly-parameterized security objects that stay legible into the thousands.
Learn it once
one interaction model across radically different object types.
06Designs · from insight to interface

One coherent system, built surface by surface.

Because I was building the product’s entire surface, the work was a set of interlocking features that had to feel like one system. A few were pivotal — and an extensible design system underneath is what let one designer keep them consistent and iterate fast.

DASHBOARDEverything a security team needs, at a glance

Card-based, and built for scale from day one.

Its DNA came from a conversation with our front-end engineer, who wanted Material Design for launch speed — so I designed with that framework, a modular card layout, but pushed the cards well past the defaults.

I deliberately left room on each card for more than it currently held, and built every section to accept pagination and search— because the real test wasn’t the demo dataset, it was the screen at enterprise scale. Identity-provider cards, node sets grouped by hosting environment, and a Scytale Servers table with IP, version, last-accessed and health — all under a trust-domain switcher.

A scoping call that mattered

Automating the initial CLI setup into the UI would have added months. I kept setup on the command line and focused the UI on the creation and maintenance work users did every day — setup flagged for later.

scytale enterprise — main dashboard
WWW.SCYTALE.IO
Trust DomainsUsersEvent Logs? Acme Heavy Industries Corp
prod.acme.comSwitch ▾
Identity ProvidersNode SetsServers
Identity Providers
Kerberos
corp.acme.com
Manage Configuration
AWS IAMaws
scytale-demo
Account: 478569284727
Manage Configuration
Azure Active Directory
prod.acme.com
daf165c4-0ea062-1720ac092642
Manage Configuration
Hashicorp Vault
aws/creds/my-role
Manage Configuration
Kerberos
corp2.acme.com
Manage Configuration
Node SetsCREATE
Default Kubernetes ClusterManageREGISTER
WORKLOADS
/api/sales
Namespace: api
Service account: sales
3Manage Identities
/api/home
Namespace: api
Service account: home
Manage Identities
/api/entry
Namespace: api
Service account: entry
1Manage Identities
Public API Web ServerManageREGISTER
WORKLOADS
/api/billing
Docker Image: api-billing
Unix Group ID: docker-web
Manage Identities
/api/loan
Docker Image: api-loan
Unix Group ID: docker-web
Manage Identities
/worker/generate-statement
Docker Image: web
Unix Group ID: docker-web
Manage Identities
Scytale Servers
IP ADDRESS
SERVER TYPE/ VERSION
LAST ACCESSED
STATUS
121.2.223.56
Ubuntu 16.04/Scytale Server 0.3
22 Jan 2019 12:00:01 PM
View Logs
121.2.223.55
Ubuntu 16.04/Scytale Server 0.3
22 Jan 2019 12:00:01 PM
View Logs
scytale enterprise — register / edit workload
Trust DomainsUsersEvent Logs? Acme Heavy Industries Corp
Edit Workload
Default Kubernetes Cluster
SPIFFE ID ⓘacme.com/ APITTL ⓘ
Add Selector Select Selector Type ▾  ⊕
Current Selector
Kubernetes Namespace:api
Kubernetes Pod UID:0123456789123452345
Kubernetes Pod Label:version: v3
Container Name:Profile
Node Name:k8s-node-1
Docker Image Label:profile · api
Docker Image ID:71afeeb0f423
CANCELEDIT
WORKLOADSGuided forms instead of free-for-all config

One model, protecting users from themselves.

A workload maps an identity to a set of selectors— Kubernetes namespace, pod UID, pod label, container name, Docker image — all tied to a SPIFFE ID and TTL. Early on we’d considered letting users set every parameter freely, with no guardrails. In practice that was cumbersome and dangerously error-prone: a wrong value could break an entire system.

So I moved to a guided approach that surfaced the right data up front for each type — and got the destructive actions right, separating disable (a reversible pause) from delete, since deleting a policy stops matching workloads from retrieving their SVIDs.

NODE SETSOne framework, many environment types

The “purpose-built” hypothesis, tested.

A node set describes a hosting environment — a scaling collection of instances — and each type carried genuinely different parameters behind the same task: Kubernetes (SAT and PSAT), single and multi-node AWS EC2, Linux X.509 and Join Token, and a fully custom selector type.

I designed one consistent, form-driven interaction model and adapted it across every type — reusing the workload-creation framework for node sets to keep the UI coherent. Deletion is dependency-aware: you remove a node set’s workloads before you can remove the node. To future-proof it, I worked with the open-source team to get a table of every selector data set, so the framework would hold for whatever we added later.

scytale enterprise — create node set
Trust DomainsUsersEvent Logs? Acme Heavy Industries Corp
Create Node Set
Type
Kubernetes (PSAT) ▾
Name
Enter Name here

A node set for workloads running on a kubernetes cluster that supports Projected Service Account Tokens

Kubernetes Cluster Name Enter Name
Agent Kubernetes Namespace Enter Namespace
Agent Kubernetes Service Account Enter Account
Agent Kubernetes Pod Name Enter Name
REMOVE NODECANCELCREATE
scytale enterprise — map identities
Trust DomainsUsersEvent Logs? Acme Heavy Industries Corp
Map Identities
in /api/billing
Identity ProviderSelect Identity provider ▾  ⊕
PROVIDER
IDENTITY
aws AWS IAM: scytale-demo
billing-apiTTL
Kerberos: prod.acme.com
BILLING@prod.acme.comTTL
CANCELCREATE
MAPPING IDENTITIESThe turn that taught me the most

From a demo feature to a platform.

Identity mapping gives cloud workloads access to on-premise identity providers like Active Directory. I first designed it for 1:1 mapping — one identity at a time, entered individually.

Pressure-testing it against real enterprise scale, it became obvious that model would collapse the moment a team had thousands of identities. So I redesigned it around one-to-many mapping.

That single change is what let a user like Simeon delegate and batch — shifting the security role from bottleneck to enabler.
USER MANAGEMENTDesigning around a spec still being written

Built to expand before the roles existed.

Administrators needed to add many users across multiple trust domains within one enterprise instance, with role-based permissions on each. I looked to how AWS and Google handle user management as reference points, and designed for both 1:1 and one-to-many role assignment from the start.

The catch: the actual user roles weren’t defined when I began. Rather than wait, I built the UI to be expandable— able to absorb whatever roles the product team eventually settled on — so design didn’t block on a spec still in flight.

scytale enterprise — user management
WWW.SCYTALE.IO
Trust DomainsUsersEvent Logs? Acme Heavy Industries Corp
UsersADD USER
NAME
EMAIL
TRUST DOMAIN
USER TYPE
Harvey Aguilar
gianni.jakubowski@acme.com
us.acme.com
Analyst
Lettie Bates
marvin.denesik@acme.com
us.acme.com
Analyst
Kevin Diaz
russel.albin@acme.com
us.acme.com
Developer
Bettie Duncan
irma_abernathy@acme.com
us.acme.com, asia.acme.com
Developer
Kellie Langosh
kellie_langosh@acme.com
us.acme.com
Owner
scytale enterprise — event log
WWW.SCYTALE.IO
Trust DomainsUsersEvent Logs? Acme Heavy Industries Corp
Event Log
FILTER BY:
Event TypeTime RangeSPIFFE IDIPTrust Domain
Event type
User
SPIFFE ID
IP Address
Trust Domain
Password reset
bob@acme.com
us.acme.com
User created or deleted
jane@acme.com
emea.acme.com
Scytale Server root rotation
workload1
161.152.1.2
us.acme.com
Workload registration
bob@acme.com
new-workload
emea.acme.com
Scytale Server root rotation
workload1
161.152.1.2
emea.acme.com
Attestation policies propagated
161.152.1.2
emea.acme.com
errors reported by node attesters
161.152.1.2
emea.acme.com
Node Set created
bob@acme.com
my-ID
emea.acme.com
EVENT LOGSWhere I learned to hold a design position

One filterable view — a call I made and defended.

The team was split: separate log views per event type, or one unified view with filtering. As the UX lead I made the call — a single view with filtering by type (system events, user events, and so on), because it was the better overall experience and matched the mental model users already had from tools like Google’s.

I audited comparable event logs to sanity-check the pattern, then committed to it. Rounding out the platform were the connective pieces — account management, domain switching, empty states, clear error placement — the unglamorous surfaces that decide whether a product feels trustworthy.

After the acquisition

The proof of concept, formalized into HPE.

This was high-level proof-of-concept work, running on a limited basis before the acquisition. When HPE acquired Scytale, the UI I’d designed was formalized and integrated into HPE’s product offerings — the same flows, re-skinned into the HPE Design System (HPE green, the element logo, Metric type, Grommet components). The bones held; the brand changed.

POC (Scytale) → HPE-formalized

POC · dashboard
WWW.SCYTALE.IO
Trust DomainsUsersEvent Logs? Acme Heavy Industries Corp
prod.acme.comSwitch ▾
Identity ProvidersNode SetsServers
Identity Providers
Kerberos
corp.acme.com
Manage Configuration
AWS IAMaws
scytale-demo
Account: 478569284727
Manage Configuration
Azure Active Directory
prod.acme.com
daf165c4-0ea062-1720ac092642
Manage Configuration
Hashicorp Vault
aws/creds/my-role
Manage Configuration
Kerberos
corp2.acme.com
Manage Configuration
Node SetsCREATE
Default Kubernetes ClusterManageREGISTER
WORKLOADS
/api/sales
Namespace: api
Service account: sales
3Manage Identities
/api/home
Namespace: api
Service account: home
Manage Identities
/api/entry
Namespace: api
Service account: entry
1Manage Identities
Public API Web ServerManageREGISTER
WORKLOADS
/api/billing
Docker Image: api-billing
Unix Group ID: docker-web
Manage Identities
/api/loan
Docker Image: api-loan
Unix Group ID: docker-web
Manage Identities
/worker/generate-statement
Docker Image: web
Unix Group ID: docker-web
Manage Identities
Scytale Servers
IP ADDRESS
SERVER TYPE/ VERSION
LAST ACCESSED
STATUS
121.2.223.56
Ubuntu 16.04/Scytale Server 0.3
22 Jan 2019 12:00:01 PM
View Logs
121.2.223.55
Ubuntu 16.04/Scytale Server 0.3
22 Jan 2019 12:00:01 PM
View Logs
HPE · dashboard
console.scytale.hpe.com
ScytaleTrust DomainsUsersEvent Logs? Acme Heavy Industries Corp
prod.acme.comSwitch ▾
Identity ProvidersNode SetsServers
Identity Providers
Kerberos
corp.acme.com
Manage Configuration
AWS IAMaws
scytale-demo
Account: 478569284727
Manage Configuration
Azure Active Directory
prod.acme.com
daf165c4-0ea062-1720ac092642
Manage Configuration
Hashicorp Vault
aws/creds/my-role
Manage Configuration
Node SetsCreate
Default Kubernetes ClusterManageRegister Workloads
/api/sales
Namespace: api
Service account: sales
3Manage Identities
/api/home
Namespace: api
Service account: home
Manage Identities
/api/entry
Namespace: api
Service account: entry
1Manage Identities
Scytale Servers
IP ADDRESS
SERVER TYPE/ VERSION
LAST ACCESSED
STATUS
121.2.223.56
Ubuntu 16.04/Scytale Server 0.3
22 Jan 2019 12:00:01 PM
View Logs
121.2.223.55
Ubuntu 16.04/Scytale Server 0.3
22 Jan 2019 12:00:01 PM
View Logs
POC · create node set
Trust DomainsUsersEvent Logs? Acme Heavy Industries Corp
Create Node Set
Type
Kubernetes (PSAT) ▾
Name
Enter Name here

A node set for workloads running on a kubernetes cluster that supports Projected Service Account Tokens

Kubernetes Cluster Name Enter Name
Agent Kubernetes Namespace Enter Namespace
Agent Kubernetes Service Account Enter Account
Agent Kubernetes Pod Name Enter Name
REMOVE NODECANCELCREATE
HPE · create node set
ScytaleTrust DomainsUsersEvent Logs? Acme Heavy Industries Corp
Create Node Set
Type
Kubernetes (PSAT)
Name
Enter Name here

A node set for workloads running on a kubernetes cluster that supports Projected Service Account Tokens

Kubernetes Cluster NameEnter Name
Agent Kubernetes NamespaceEnter Namespace
Agent Kubernetes Service AccountEnter Account
Agent Kubernetes Pod NameEnter Name
Remove NodeCancelCreate
POC · map identities
Trust DomainsUsersEvent Logs? Acme Heavy Industries Corp
Map Identities
in /api/billing
Identity ProviderSelect Identity provider ▾  ⊕
PROVIDER
IDENTITY
aws AWS IAM: scytale-demo
billing-apiTTL
Kerberos: prod.acme.com
BILLING@prod.acme.comTTL
CANCELCREATE
HPE · map identities
ScytaleTrust DomainsUsersEvent Logs? Acme Heavy Industries Corp
Map Identities
in /api/billing
Identity ProviderSelect Identity provider ▾
PROVIDER
IDENTITY
aws AWS IAM: scytale-demo
billing-apiTTL
Kerberos: prod.acme.com
BILLING@prod.acme.comTTL
CancelCreate
Results

An engine, turned into an acquisition.

Application onboarding
weeks → minutes

Manual CLI setup and hand-written YAML replaced with a self-service UI — without compromising existing security controls.

Where it landed
HPE

The platform was pivotal in Scytale’s acquisition by Hewlett Packard Enterprise. It lives on today as HPE Project Cosigno, folded into HPE’s Zero Trust strategy.

Before Scytale

Manual CLI setup · slow identity mapping via YAML · low adoption of SPIRE, stuck with the few willing to run it.

With Scytale Enterprise

Self-service UI · real-time, UI-based identity assignments · successful enterprise trials and a feedback loop that drove adoption.

Learnings

What I carried out of this.

Lesson 01

A demo-proof design can still fail in production.

Shipping the 1:1 identity mapping would have worked in a demo and failed at scale. Only user reality — not aesthetics — tells you which one you actually have.

Lesson 02

Words matter, and so does taking a position.

We spent days deadlocked on a single word — “cluster” vs “node set.” And on event logs I learned to lead, not just facilitate: being hired as the expert means taking and defending a call.

Where it landed

A command-line engine, turned into a product an enterprise could run — and HPE wanted to buy.

The strongest solutions don’t just tame technical complexity — they reduce friction, empower the person on the other side of the screen, and make an intimidating system feel like something you can actually run.