0 to 1 · Enterprise SaaS · Health Insurance

Designing security & access governance for Ginja.ai

Health insurers on Ginja.ai couldn't see, control, or change who had access to their own platform. Every change went through Ginja's support team. I designed the system that transferred that control to them: roles, permissions, user lifecycle, time-bound access, and hard denials. Built for an industry where one wrong checkbox is a compliance breach.

Role

Product Designer

Enterprise Client

Old Mutual Limited

Platform

B2B Enterprise SaaS

Team

1 PM, 1 Front End, 1 Backend Engineer and me

0 to 1 · Enterprise SaaS · Health Insurance

Designing security & access governance for Ginja.ai

Health insurers on Ginja.ai couldn't see, control, or change who had access to their own platform. Every change went through Ginja's support team. I designed the system that transferred that control to them: roles, permissions, user lifecycle, time-bound access, and hard denials. Built for an industry where one wrong checkbox is a compliance breach.

Role

Product Designer

Enterprise Client

Old Mutual Limited

Platform

B2B Enterprise SaaS

Team

1 PM, 1 Front End, 1 Backend Engineer and me

Resume

1 · The Industry Context

Setting Context

Ginja.ai is a SaaS platform for health insurance companies and service providers. Organisations that sit at the center of one of the most regulated data ecosystems in the world: policyholders, hospitals, third-party administrators, underwriters, and national compliance bodies.

The platform shipped with a handful of pre-configured roles — Underwriter, Sales Person, a few others. That was it. The insurance companies using Ginja.ai had:


  • No visibility into what those roles actually granted

  • No control to customise, restrict, or expand access

  • No way to manage their own users — every new hire, exit, or role change went back to Ginja's support team

  • No accountability — if something went wrong, no record of who did what, when

The brief, before any research was- “How might we build a role and permission management system for health insurance organisations?”

Our first enterprise user, Old Mutual is one of Africa’s largest financial services groups insurance, banking, wealth management, and underwriting, spread across 14+ countries. For this case study, we use Old Mutual as the lens through which the problem is best understood.

14+

Countries of

operation

12K+

Hospitals in

network

4.5M+

Members covered

$3B

Group revenue

These figures describe the scale of one of the user we were designing for.

Not Ginja.ai’s product impact.

2 · Complexity

Undertsanding Complexity

Before defining a single role, we mapped individual permissions spanning underwriting, claims, payments, provider networks, and product configuration

The Underwriting module alone contained over 300 permissions and sub-permissions. Each one a potential access control decision.

This scale alone ruled out simple solutions. A flat list of 300+ checkboxes per module, multiplied across every department, in every country, was never going to work.

Why standard access models don’t

work here

To anchor our architecture, we ran a gap analysis against industry standards. Most modern software manages access using CRM or helpdesk paradigms — tools like Freshdesk, HubSpot, or Salesforce. These systems are built on an assumption of trust by default. In regulated health insurance, that assumption breaks completely

An underwriter viewing unauthorized medical histories, or a claims manager seeing

unapproved financial ledgers, isn’t a “bad UX moment.” It’s a regulatory failure and a

breach of institutional trust.

3· Three Layer Access Control

The Architectural Structure


Standard systems bundle role, permission, and context into a single object producing roles like "Claims Manager- Kenya" and "Claims Manager- Rwanda" as two entirely separate configurations. At Old Mutual's scale: 14 countries × multiple access tiers × every department - that's hundreds of near-identical roles, impossible to maintain and dangerous to audit.

We separated the model into three independent layers: Role - Claims Manager. One definition, reused everywhere. Permission- view, approve, modify claims. The same token set everywhere. Scope- the conditions under which the permission applies: an amount limit, a provider tier, a department boundary, a region.

We stopped thinking about scope as "where you work" and started thinking about it as "under what conditions your permissions apply."

A Claims Manager in Kenya and one in Rwanda now share the exact same role and permission tokens; their local compliance and financial boundaries are isolated entirely by scope rules. Hundreds of fragmented configurations collapse into a single matrix.

The model also survives reality: an Underwriting Manager doesn't live in one module. They touch Underwriting, Claims for risk review, Finance for premium oversight - the same role fans out into independent permission sets, each constrained by its own scope condition. Nothing duplicated. Nothing hardcoded per country

4· One Layer, Four Instruments

The 4 Systems

The architecture answers how access is modelled. The interface had to answer four operational questions. The same four gaps admins named in research. Each became a subsystem.

  1. Role Management

Creating a role without drowning

in 300 checkboxes

Our first prototype- a step-by-step departmental funnel failed low-fidelity testing fast: too many steps, a flat unmanageable permission list, no success feedback, duplicate role names with no warning.

The structural fix was a split-pane system:

  • Modules as rows (Reinsurance, Underwriting, Sales…) admins think in their own domain, not in access theory

  • One consistent column pattern - Access → Modify → Configure across every module. Predictability is what reduces cognitive load at scale

  • Scope as a separate step - configure permissions first, then add conditional scope. Two mental models, two distinct steps

For setting scope for various permissions I explored drop downs. Depending on the permission selected, only the relevant scopes would be active to select from. I refined it further and removed the inactive scope permissions. Used progressive disclosure. As user selected certain options, relevant conditions appeared.

The Role Creation form breakdown

  1. The Modules were aligned on the left side like chapter names and the contents within- the sub-permissions would appear on the entire screen in the centre for users to configure roles from. The modules would remain sticky to the left and the permissions would scroll and reveal more contents.

  2. Each permission was divided in 3 permission types- access, modify and configure. All permission types, weather it was to view, edit, deactive , create, delete, approve, deny, accept, reject and many other types of permissions could easily come under these three types.

  3. The CTA would also remain visible at all times to save a role, even when the user is browsing through hundreds of permissions.

Demo Video of Role Creation

A snippet for the happy path of role creation.

Design Decision

While working on the final UI, I had to take several design decisions along the way to best suit both the user, the business. Here's an example of one of them:

The decision- Inbuilt Scope Card

As a designer, the Floating Card feels cleaner, it protects the grid. But viewed through the lens of a security administrator, in health insurance compliance, context outweighs aesthetics.

The layout shift caused by the Inbuilt Card is a genuine UX trade-off. It’s also a necessary sacrifice. An administrator configuring a financial threshold cannot afford visual blind spots. The Inbuilt Card preserves complete peripheral vision of a user’s total access profile, preventing the exact type of overlapping privilege error this entire system exists to solve.

The Real Job: Handling edge cases
and error states

Working on the UI and the happy path was the easier task. Figuring out the places a user can get stuck. The places user needs to be warned and the system defined roles- that they cannot edit/ configure or delete, was the most important task for the product to work in real environments, where errors happen all the time.

  1. User Management

  1. The user lifecycle, without the

  2. support inbox

Creating a user means three simultaneous assignments: identity, role(s), and organisational scope — which region(s) of the company's own configured structure this person belongs to. The system validates assignments against that structure, so an admin in Kenya can't quietly grant someone access in Rwanda.

While assigning roles to users means we had to make sure that users can select the roles they want even from 100s of roles that have been created. Simple search did not surfice. We needed filters like department type and access level to make them reach their required role quicker.

The Create User form breakdown

  1. If a role had certain pre set scope restrictions, they will be visible while the user is being created. And while setting up organisational unit, the ones out of scope will be clearly displayed.

  2. Selected roles remain visible throughout the form, even when you close the roles module. The user can edit/remove the roles anytime they want during the process.

  3. Reducing cognitive load and making discovery fast by filtering roles by department and access type.

Demo Video of Creating a New User

A snippet for the happy path of user creation.

Handling edge cases and error states

Once the happy path was complete. The edge cases were visible very naturally. Various edit options like deactivating a user, re-activating a user and deleting a user were the next steps to take. Letting users know why they can't perform a certain action by giving them all the information they need.


Over- communicating was a style I followed throughout the journey of making error states and edge cases. Making sure the user does not feel confused or lost at any given point was my goal. If they can't perform an action - the why should be very clear to them

Closing beat for the act — conflicts: with four instruments in play, roles can contradict each other. Rather than a generic error, we wrote actionable microcopy: "Accountant and Account Officer have conflicting permissions. Assigning both will grant permissions for both roles." The system explains the collision and the consequence — it doesn't just refuse.

  1. Temporary Access

  1. Temporary access: elevation with

    an expiry date

The riskiest moment in any access system is the exception. An auditor needs a week of read access. A contractor covers a claims backlog for ten days. In the old model these became permanent grants that someone was supposed to remember to remove. Nobody remembers.

  1. Blacklist Permissions

Blacklist: a word for "no, never"

The riskiest moment in any access system is the exception. An auditor needs a week of read access. A contractor covers a claims backlog for ten days. In the old model these became permanent grants that someone was supposed to remember to remove. Nobody remembers.

5· Constrain Navigation

Honest Account of what
didn't make in V1

6· Clients using Ginja.ai

Outcomes and Insights

Old Mutual evaluated the system, tested it internally, and signed on as Ginja.ai's enterprise partner. Their team is actively using the platform today, and their feedback is shaping the next iteration.

The honest early signal: in the test environment, administrators have filed only 2–3 access-related support tickets since launch — against a previous model where every role, user, or region change was a ticket by definition. Self-service is doing what it was designed to do. This module's real-world impact is tied to how cleanly it integrates with Claims, Underwriting, and Product Configuration as they roll out; we're tracking that dependency as adoption grows.

More Projects

7· What I'll carry forward

The Learnings

Research changes the question, not just the answer. The brief we started with and the problem we ended with are not the same question. The gap between them is where the design work actually happened.

Context beats aesthetics in regulated systems. The Floating vs. Inbuilt Card decision is the cleanest example: the "prettier" choice would have introduced exactly the kind of blind spot this system exists to eliminate.

Table of Content
No headings foundSelect the Frame that wraps your article content → open Accessibility → set Tag to main, article, or section.This message disappears as soon as headings are detected.

1 · The Industry Context

Setting Context

Ginja.ai is a SaaS platform for health insurance companies and service providers. Organisations that sit at the center of one of the most regulated data ecosystems in the world: policyholders, hospitals, third-party administrators, underwriters, and national compliance bodies.

The platform shipped with a handful of pre-configured roles — Underwriter, Sales Person, a few others. That was it. The insurance companies using Ginja.ai had:


  • No visibility into what those roles actually granted

  • No control to customise, restrict, or expand access

  • No way to manage their own users — every new hire, exit, or role change went back to Ginja's support team

  • No accountability — if something went wrong, no record of who did what, when

The brief, before any research was- “How might we build a role and permission management system for health insurance organisations?”

Our first enterprise user, Old Mutual is one of Africa’s largest financial services groups insurance, banking, wealth management, and underwriting, spread across 14+ countries. For this case study, we use Old Mutual as the lens through which the problem is best understood.

14+

Countries of operation

12,500+

Hospitals in network

4.5M+

Members covered

$3B

Group revenue

These figures describe the scale of one of the user we were designing for.

Not Ginja.ai’s product impact.

2 · Complexity

Undertsanding Complexity

Before defining a single role, we mapped individual permissions spanning underwriting, claims, payments, provider networks, and product configuration

The Underwriting module alone contained over 300 permissions and sub-permissions. Each one a potential access control decision.

This scale alone ruled out simple solutions. A flat list of 300+ checkboxes per module, multiplied across every department, in every country, was never going to work.

Why standard access models don’t work here

To anchor our architecture, we ran a gap analysis against industry standards. Most modern software manages access using CRM or helpdesk paradigms — tools like Freshdesk, HubSpot, or Salesforce. These systems are built on an assumption of trust by default. In regulated health insurance, that assumption breaks completely

An underwriter viewing unauthorized medical histories, or a claims manager seeing

unapproved financial ledgers, isn’t a “bad UX moment.” It’s a regulatory failure and a

breach of institutional trust.

3 · What Admins Said

Research and Reframe

What admins actually needed

We worked closely with the Old Mutual team- the PMs, and operational leads to map their real organizational structure, since there were no existing users of a system like this to research directly.

  1. Governance

  1. Architecture

  1. Usability

  1. Scalability

System Administrator cluster

1. No way to know if a new joiner’s access is fully set up

2. No controlled process for granting temporary elevated access

3. No audit visibility during configuration

Team Lead / Manager cluster

1. No way to know if a new joiner’s access is fully set up

2. Cannot differentiate users with similar roles but different scopes

3. No notification when access changes happen to their team

Reframed Problem Statement

How might we give health insurance organisations complete ownership over who can access their platform, what they can do, and within what boundaries, so that administrators can enforce security, reflect their real organisational structure and meet compliance requirements without depending on external support?

This is a different question than where we started. It names ownership, not features. It points directly toward the architecture that follows “How might we build a role and permission management system for health insurance organisations?”

4 · Three Layer Access Control

The Architectural Structure

Standard systems bundle role, permission, and context into a single object producing roles like "Claims Manager- Kenya" and "Claims Manager- Rwanda" as two entirely separate configurations. At Old Mutual's scale: 14 countries × multiple access tiers × every department - that's hundreds of near-identical roles, impossible to maintain and dangerous to audit.

We separated the model into three independent layers: Role - Claims Manager. One definition, reused everywhere. Permission- view, approve, modify claims. The same token set everywhere. Scope- the conditions under which the permission applies: an amount limit, a provider tier, a department boundary, a region.

We stopped thinking about scope as "where you work" and started thinking about it as "under what conditions your permissions apply."

A Claims Manager in Kenya and one in Rwanda now share the exact same role and permission tokens; their local compliance and financial boundaries are isolated entirely by scope rules. Hundreds of fragmented configurations collapse into a single matrix.

The model also survives reality: an Underwriting Manager doesn't live in one module. They touch Underwriting, Claims for risk review, Finance for premium oversight - the same role fans out into independent permission sets, each constrained by its own scope condition. Nothing duplicated. Nothing hardcoded per country

5· One Layer, Four Instruments

The 4 Systems

The architecture answers how access is modelled. The interface had to answer four operational questions. The same four gaps admins named in research. Each became a subsystem.

  1. Role Management

Creating a role without drowning in 300 checkboxes

Our first prototype- a step-by-step departmental funnel failed low-fidelity testing fast: too many steps, a flat unmanageable permission list, no success feedback, duplicate role names with no warning.

The structural fix was a split-pane system:

  • Modules as rows (Reinsurance, Underwriting, Sales…) admins think in their own domain, not in access theory

  • One consistent column pattern - Access → Modify → Configure across every module. Predictability is what reduces cognitive load at scale

  • Scope as a separate step - configure permissions first, then add conditional scope. Two mental models, two distinct steps

For setting scope for various permissions I explored drop downs. Depending on the permission selected, only the relevant scopes would be active to select from. I refined it further and removed the inactive scope permissions. Used progressive disclosure. As user selected certain options, relevant conditions appeared.

The Role Creation form breakdown

  1. The Modules were aligned on the left side like chapter names and the contents within- the sub-permissions would appear on the entire screen in the centre for users to configure roles from. The modules would remain sticky to the left and the permissions would scroll and reveal more contents.

  2. Each permission was divided in 3 permission types- access, modify and configure. All permission types, weather it was to view, edit, deactive , create, delete, approve, deny, accept, reject and many other types of permissions could easily come under these three types.

  3. The CTA would also remain visible at all times to save a role, even when the user is browsing through hundreds of permissions.

Demo Video of Role Creation

A snippet for the happy path of role creation.

Design Decision

While working on the final UI, I had to take several design decisions along the way to best suit both the user, the business. Here's an example of one of them:

The decision- Inbuilt Scope Card

As a designer, the Floating Card feels cleaner, it protects the grid. But viewed through the lens of a security administrator, in health insurance compliance, context outweighs aesthetics.

The layout shift caused by the Inbuilt Card is a genuine UX trade-off. It’s also a necessary sacrifice. An administrator configuring a financial threshold cannot afford visual blind spots. The Inbuilt Card preserves complete peripheral vision of a user’s total access profile, preventing the exact type of overlapping privilege error this entire system exists to solve.

The Real Job: Handling edge cases and error states

Working on the UI and the happy path was the easier task. Figuring out the places a user can get stuck. The places user needs to be warned and the system defined roles- that they cannot edit/ configure or delete, was the most important task for the product to work in real environments, where errors happen all the time.

  1. User Management

  1. The user lifecycle, without the support inbox

Creating a user means three simultaneous assignments: identity, role(s), and organisational scope — which region(s) of the company's own configured structure this person belongs to. The system validates assignments against that structure, so an admin in Kenya can't quietly grant someone access in Rwanda.

While assigning roles to users means we had to make sure that users can select the roles they want even from 100s of roles that have been created. Simple search did not surfice. We needed filters like department type and access level to make them reach their required role quicker.

The Create User form breakdown

  1. If a role had certain pre set scope restrictions, they will be visible while the user is being created. And while setting up organisational unit, the ones out of scope will be clearly displayed.

  2. Selected roles remain visible throughout the form, even when you close the roles module. The user can edit/remove the roles anytime they want during the process.

  3. Reducing cognitive load and making discovery fast by filtering roles by department and access type.

Demo Video of Creating a New User

A snippet for the happy path of user creation.

Handling edge cases and error states

Once the happy path was complete. The edge cases were visible very naturally. Various edit options like deactivating a user, re-activating a user and deleting a user were the next steps to take. Letting users know why they can't perform a certain action by giving them all the information they need.


Over- communicating was a style I followed throughout the journey of making error states and edge cases. Making sure the user does not feel confused or lost at any given point was my goal. If they can't perform an action - the why should be very clear to them

Closing beat for the act- conflicts: with four instruments in play, roles can contradict each other. Rather than a generic error, we wrote actionable microcopy: "Accountant and Account Officer have conflicting permissions. Assigning both will grant permissions for both roles." The system explains the collision and the consequence.

  1. Temporary Access

  1. Temporary access: elevation with an expiry date

The riskiest moment in any access system is the exception. An auditor needs a week of read access. A contractor covers a claims backlog for ten days. In the old model these became permanent grants that someone was supposed to remember to remove. Nobody remembers.

  1. Blacklist Permissions

  1. Blacklist: a word for "no, never"

The riskiest moment in any access system is the exception. An auditor needs a week of read access. A contractor covers a claims backlog for ten days. In the old model these became permanent grants that someone was supposed to remember to remove. Nobody remembers.

6· Constrain Navigation

What didn't make in V1

7· Clients using Ginja.ai

Outcomes and Insights

Old Mutual evaluated the system, tested it internally, and signed on as Ginja.ai's enterprise partner. Their team is actively using the platform today, and their feedback is shaping the next iteration.

The honest early signal: in the test environment, administrators have filed only 2–3 access-related tickets while testing against a previous model where every role, user, or region change was a ticket by definition. Self-service is doing what it was designed to do. This module's real-world impact is tied to how cleanly it integrates with Claims, Underwriting, and Product Configuration as they roll out; we're tracking that dependency as adoption grows.

8· What I'll carry forward

The Learnings

Research changes the question, not just the answer. The brief we started with and the problem we ended with are not the same question. The gap between them is where the design work actually happened.

Context beats aesthetics in regulated systems. The Floating vs. Inbuilt Card decision is the cleanest example: the "prettier" choice would have introduced exactly the kind of blind spot this system exists to eliminate.

Resume