— Case study details have been adapted to comply with an NDA

Redesigning Embraer’s enterprise structure across more than 25,000 records

Redesigning the navigation and entity management experience in a GRC platform, connecting information architecture, performance, and close collaboration between design and engineering.

Role

Staff Product Designer

Period

2025 - Q1 e Q2

Product

Enterprise SaaS (B2B)

Team

Product + Architecture

Results · Q1 2026

14x Faster Rendering

Optimized the enterprise tree to reduce slowdowns and improve navigation across high-volume record structures.

80% Fewer API Endpoints

Simplified the entity query and operation architecture, reducing fragmented calls between the front end and back end.

35% Faster Support Resolution

Reduced the effort required to diagnose, guide, and resolve navigation and structure-maintenance tickets.

— Neste Post

— Neste Post

01 — Overview

From a slow, fragmented tree to a scalable operational foundation.

Embraer relied on a hierarchical structure with more than 25,000 records within a GRC platform, connecting companies, business units, processes, people, technologies, risks, and controls. The tree’s scale and complexity slowed navigation, made entities harder to find, and increased the effort required for support and technical maintenance.


02 — Context

Enterprise B2B SaaS for GRC: Governance, Risk, Compliance, and Audit

Perinity is a GRC SaaS platform used by large enterprises and highly regulated organizations, including banks, public-sector institutions, private companies, and multinational organizations, to map and manage risks, define controls, track audits, and support governance and compliance processes.

The product originated from a legacy Java/JSF architecture and is still undergoing a gradual migration to Angular. My initial work focused on evolving the entity record screens within the corporate tree, as part of a broader effort to reduce legacy dependencies and modernize the system experience.

Within the platform, this tree is one of the most critical structures. It represents each client’s corporate architecture, connecting companies, business units, processes, macro-processes, technologies, key people, and other entities. From this structure, users link risks, controls, tests, audits, evidence, and action plans.

imagem-modelo-auditoria
Day-to-day work of auditors and compliance managers

03 — Problem

The bottleneck went beyond the interface

The project scope began with the modernization of entity record screens for entities registered in the corporate tree. The initial goal was to reduce dependencies on the legacy Java/JSF system, improve the entity-management experience, and advance the product’s gradual migration to Angular.

Before that, we had already improved the tree’s visual and usability layer, enhancing navigation, search, and hierarchy. However, as the customer base grew and larger structures were introduced, the initial lazy-loading approach was no longer enough to solve the emerging scalability issue.

The most critical customer in this scenario was Embraer, which was operating with more than 25,000 records in the tree by the end of its onboarding. The structure was continuously expanding with new entities, including hundreds of records per day, updates, and relationships across companies, business units, processes, technologies, people, risks, and controls. At that scale, loading the full tree in the browser created performance loss, slowdowns, freezing, and difficulty locating specific information.

What should have enabled faster operations had become a bottleneck. The root cause was not limited to the UI, but extended to how the structure was organized, loaded, queried, and maintained.

projeto-anterior-arvore-v2
Corporate Tree Sidebar Evolution: V1 → V2

04 — My Role

From a modernization initiative to a structural solution

My initial role was to modernize the entity record screens within the corporate tree, as part of the broader product modernization effort and the reduction of legacy Java/JSF dependencies.

However, as I investigated how the tree behaved in client environments, it became clear that modernizing the record screens alone would not solve the problem. The operation would still be constrained by performance issues, fragmented entity structures, multiple endpoints, and a model that was difficult to scale.

At that point, my role expanded. I worked as a bridge between product, design, engineering, and leadership to distinguish symptoms from root causes, map the existing structure, and propose a more viable path for the business, users, support, and technology teams.

This broader contribution was possible because I had already been leading key design maturity initiatives at Perinity, including the introduction of discovery practices, component standardization, Design System evolution, and closer collaboration between design and engineering. That track record built trust, allowing my contributions to extend beyond the interface into information architecture, componentization, entity modeling, and technical feasibility.

What differentiated my contribution

Beyond redesigning the experience, I brought technical and systems-thinking expertise to build flexible solutions from design through implementation. At Perinity, I helped establish the Design System and component architecture, introduced technologies and market practices such as Tailwind CSS, BEM conventions, and design methodologies that created a more predictable foundation for engineering, QA, and future automation.

This standardization also became more valuable as AI tooling and MCP-based workflows evolved, making it easier to introduce automated testing and other quality practices over time.

In short, my contribution transformed a request initially focused on modernizing record screens into a broader opportunity: reducing the complexity of the corporate tree and creating a more performant, flexible, and sustainable foundation for product evolution.


05 — Discovery & Insights

When reviewing entity records revealed a problem larger than the interface

The starting point was a review of the entity record screens in the corporate tree. There were seven primary entity types: Company, Business Unit, Process, Technology, Activity, Environment, and Person.

Each entity type had its own record form, with distinct fields, flows, rules, and screens. On average, a single entity could spread its information across up to 14 different screens, requiring extensive clicking before users could review, edit, or validate important data.

estrutura-de-entidades-perinity-2-compress
Entity record flow

The first step was to understand the existing flow and identify points of friction. I began by analyzing the current screens, navigation paths, and support tickets related to the tree. Recurring feedback pointed to a longstanding issue: too many clicks, too many screens, and difficulty finding specific information.

Based on that, I sketched an initial visual and functional reorganization of the record screens. Because I typically create high-fidelity wireframes from the start, I was able to move quickly toward a more concrete version of the solution, reducing information fragmentation and grouping related data into a more direct experience.

In this first iteration, we reduced the number of screens and clicks needed for the main entity review and maintenance flows by approximately 50%.

primeira-rodada-de-prototipo-3
Initial refactoring concepts

This progress improved the experience, but it did not address the root cause. When I compared the entity record forms, I noticed that many fields were repeated across different entity types. That raised a key question: were all of these fields actually being completed, and were all entity types truly being used?

To validate that hypothesis, I requested a SQL query from the engineering team across client environments to use actual data to understand which entities were genuinely used and which fields were filled out in practice.

This step was important because, in GRC, each organization can adopt its own methodology for mapping risks, processes, and controls. Conceptually, having seven entity types made sense. In practice, we needed to understand whether clients were actually using that level of separation or whether it was introducing unnecessary complexity.

The results showed that many non-required fields were rarely completed. We also identified entity types with low adoption or highly limited usage, including Technology, Activity, Environment, and Person.

The analysis revealed that the cost of maintaining each entity type separately was high. Each required its own CRUD operations, API endpoints, documentation, specific business rules, maintenance, and separate implementation work. In other words, any change had to be replicated or adapted across multiple structures, even when their behavior was very similar.

That made the opportunity clearer: the issue was not only about reducing screens, but rethinking how entities were modeled, queried, and maintained.


06 — Product Decisions & Solution

From seven rigid entity types to one flexible, scalable foundation

We had an opportunity not only to redesign the screens, but to address the core issue: a fragmented structure made up of seven different entity types, each with its own record form, rules, CRUD flow, endpoint, documentation, and maintenance requirements.

The question that guided the solution was:

What if we could reduce this to a single entity model?

a-grande-entidade
The emergence of the unified entity model

The inspiration came from my prior experience building flexible forms and custom content types in WordPress. Rather than treating every entity type as a completely separate structure, I introduced the concept of a single, configurable foundation that could adapt to each client’s context.

The proposal was to create one primary entity, a kind of unified entity model, capable of representing companies, business units, processes, technologies, activities, environments, people, and any new entity types a client might need.

In practice, the previous entity types would no longer exist as isolated structures. Instead, they would become categories or classifications applied to a shared base entity.

This would give the system:

– 1 core entity model;
– 1 base CRUD flow;
– 1 primary endpoint;
– simpler maintenance logic;
– a more consistent user experience;
– greater flexibility for different GRC methodologies.

prototipo-aba-contexto-variavel
Form completion and additional-field display
prototipo-parametrizacao-de-entidades
Entity type setup
prototipo-parametrizacao-de-campos
Flexible template setup
The proposed solution

This was not just a new interface for entity record forms. It was a change in how the product modeled, organized, and operated its entities.

Previously, each entity was treated as an isolated structure. The new model proposed a shared base entity that could take on different types, use configurable fields, and adapt to each client’s methodology.

This would create a simpler foundation for engineering, a clearer experience for users, and greater business flexibility by reducing delivery costs and supporting new client acquisition.


07 — Technical Validation & Impact

When the design solution had to stand up to architectural scrutiny

The engineering team was involved from the earliest stages of the investigation. The analysis of entities, endpoints, record forms, and legacy constraints was not conducted by design in isolation. The solution needed to address the user problem, but it also had to be viable within a monolithic product with Java/JSF dependencies, active external integrations, reports, business rules, and relationships across multiple platform modules.

When I presented the proposal to consolidate the entity types into a more flexible shared foundation, the response was positive. The team recognized that the solution addressed long-standing tree issues: heavy rendering, multiple endpoints, fragmented maintenance, and the difficulty of evolving the component without affecting other parts of the system.

The engineering team also brought new perspectives on the proposal’s technical impact. Simplifying the model could reduce integration complexity, make the tree easier to maintain, improve performance, and prevent the same issues from continuing to compound as new clients and methodologies were added to the product.

At the same time, the team identified critical considerations that needed to be addressed before implementation:

– impact on active external integrations;
– dependencies on existing reports;
– tree relationships with risks, controls, audits, and other records;
– migration of legacy data into the new structure;
– compatibility with clients already using their own methodologies;
– risk of data loss or inconsistencies during the transition;
– dependencies on the JSF legacy layer and the application’s monolithic architecture.

Solution presentation meeting

After the presentation, engineering began a deeper architectural assessment of the solution. For approximately two months, the team evaluated impact, effort, migration risks, and possible implementation paths that would avoid disrupting existing client operations.

The conclusion was that the effort would be significant, but the expected value justified the initiative. The solution was seen as a preventive evolution: instead of continuing to fix tree-related symptoms client by client, the proposal addressed the structure that was creating slowdowns, fragmentation, and ongoing maintenance costs.

The implementation was then planned as a gradual rollout, starting with the most critical clients and first in a staging environment. Because Perinity’s platform is broad and each client has its own configuration, migration required manual review, data validation, and careful preparation before production rollout.

Although still under development, the solution already indicated meaningful gains:

– up to 14x faster tree rendering in high-volume scenarios;
– 80% fewer endpoints required to operate entities;
– 35% faster support diagnosis and guidance for tree-related tickets;
– a more flexible foundation for clients with different methodologies;
– lower future cost for maintenance, evolution, and integration of the structure.

The main impact was turning a critical area of the platform into a more sustainable foundation for scaling the product, reducing rework, and enabling technical users to manage complex structures with greater clarity, performance, and confidence.


08 — Learnings

Complexity does not disappear. It needs to be organized.

In enterprise products, the best solution is not always about simplifying the interface in isolation. Often, the friction users experience is the result of structural decisions accumulated over time.

The experience affects more than the people using the interface. It also shapes implementation, support, engineering, and the cost of evolving the platform. That is why everyone involved in the operation needs clarity, control, and predictability when working with critical information.

Design needs to consider the full system. When a solution improves information architecture, data modeling, performance, and maintainability, it reduces rework, speeds up diagnosis, and turns complexity into a more reliable, scalable, and actionable experience.