Vijay Gupta

Data Movement Service to move and sync warehouse data in real time, error-free.

A visual pipeline service for enterprise data platforms to configure, govern, and sync high-throughput warehouse data between Postgres and Redshift without manual ETL scripts.

Role

Product designer, end to end

What I designed

Research, user flows, visual pipelines, and handoff

Company

Innovaccer

Built around

Reusable data syncs in a standalone service

Impact

Made data syncs reusable, monitored, and easier to govern, based on early feedback

Goals

The data movement process should be automated, transparent & error-free so that overall data-ingestion time can be reduced.

Due to NDA restrictions, I can't share the final product screens here. Happy to discuss the problem, process, and decisions instead.

Quick background

The Innovaccer platform consists of multiple applications that consume and transform data. Each of these applications expects data to be in a specific format to function.

In enterprise healthcare, applications require data in different warehouse formats—analytics workloads run on Redshift, while operational services and dashboards read from Postgres. Previously, data engineers had to write and maintain custom Python scripts to bridge these databases. The process was unmonitored, difficult to govern, and broke frequently during schema changes.

My goal was to validate this pipeline bottleneck and design a dedicated service that automated data synchronization with built-in logging and schema validation.

What is Data Movement Service (DMS)

Innovaccer Platform diagram showing raw data flowing through acquisition, standardization, movement, interoperability and consumption stages, with Data Movement Service called out at the movement stage

The Problems

High maintenance overhead: Engineers had to write custom ETL scripts for every single data transfer. Writing repetitive plumbing pulled them away from core data modeling.

Zero pipeline observability: There was no centralized monitoring, error logging, or alert framework for active syncs. When a sync failed, downstream teams only noticed when their dashboards went blank.

Inconsistent code quality and fragile integration: Every data engineer had a different skill set and approach to writing transfer code, making quality difficult to maintain and causing integration failures later. Without standardized validation, different coding styles and unhandled edge cases could also cause silent batch ingestion failures downstream.

My role

End-to-end ownership and stakeholder alignment: Independently handled the UX and UI design process, defining the problem and finalising requirements with the Product Manager and Engineering Manager. Together, we evaluated whether to embed sync within the workflow canvas or build a standalone platform service.

User Research with Technical Personas: Interviewed data engineers and audited customer support JIRA queues to map how ad-hoc Python scripts, Cron jobs, and VM dependencies were stalling onboarding.

Flows, journeys, and interface design: Created user flows, journeys, wireframes, and high-fidelity designs, including workflows for source configuration, field-level schema mapping, recurring schedules, and execution monitoring.

Validation and documentation: Validated the final design, conducted user testing, and created design documentation.

Design System Integration: Documented and delivered high-density data tables and pipeline status components aligned with Innovaccer's Masala Design System.

Developer handoff: Supported implementation through handoff and completed design sign-off for the developed application.

What I did

Three-part breakdown: understanding the problem, coming up with a solution, and validating solutions with dev handoff

Impact

Reduced manual script maintenance

Standardized visual workflows reduced the need to create and maintain one-off Python scripts for supported warehouse transfers.

Improved process visibility

Error logging, monitoring, and alerts gave teams visibility into the process and led to fewer support tickets in early feedback.

Centralized governance & job reusability

Decoupling the tool into a standalone service enabled data teams to reuse warehouse connections and schedules across different downstream healthcare apps.

More reliable integrations

Better reuse of existing jobs and almost zero errors reduced overall integration time, based on initial user feedback.

Potential server-cost savings

Reducing integration time was expected to significantly lower server costs.

Detailed process

Understanding the problem – research

The Innovaccer Data Platform consists of multiple applications and each application uses a different type of database to function properly. For example, the default data format is in Postgres, and to run analytics functions, data should be in Redshift. Similarly, to create dashboards out of that data, it should be in Postgres format again. Therefore, we want a service that makes this data movement process fast, easy and transparent.

Initial discussions and alignment with stakeholders

I had multiple discussions with the product and engineering manager to understand the problem and requirements. I also went through the related JIRA issues created by the customer support team.

Sticky notes board covering pain points, requirements and features, and open questions gathered from stakeholders

Conducted user interviews

To understand the current user journey of moving the data and users' problems, I did some user interviews with data engineers (primary user persona).

Notes from user interviews covering tools used, the data analyst persona, and how data moves between Postgres, Redshift and Elasticsearch

Created a quick user journey to understand the current process.

Flowchart of the existing manual process for moving data, with pain points like no way to check code output or see what is happening behind the scenes

Gathering all research data and observations

After user interviews and feedback sessions, I organised all data points into similar groups to find common patterns and themes. I documented all observations in a document to discuss further with the stakeholders (PMs, EMs, and the Leadership team).

Research board summarizing current tool usage, user tasks, the current process, and a list of observations

Coming up with a Solution

After having multiple discussions with the team, we came up with two approaches to solve the problem:

Create a data-sync node inside our existing workflow builder that users can use whenever they want to move data from one format to another.

Another approach is to create a standalone application to move and sync the data.

Solution 1: A new node inside the existing workflow builder

To start, I created a user flow for the 1st solution – creating a node inside the existing workflow builder. The benefit of this approach was that users can move data across the data stores without leaving the workflow builder. The downside of this approach is the lack of reusability and governance because each data movement job couples tightly with its respective workflow.

Initial user flow – adding a new data-sync node

Detailed flow for adding a new data-sync node, covering DAP workflows, FaaS functions, and moving data between Postgres, Redshift and Elasticsearch

I created wireframes using the existing application screenshots to validate the 1st solution quickly with the users and other stakeholders.

Workflow builder wireframes showing the new Data sync node added to a workflow, the template picker, the data sync configuration modal, and a completed run

The Core Trade-off: Workflow Node vs Standalone Service

We evaluated two architectural models to solve the sync problem:

Approach 1: An inline Data-Sync node inside the existing canvasThe Pro: Kept all pipeline steps inside a single visual canvas without introducing a new tool. The Trade-off: Data movement jobs became tightly coupled to specific workflows, making it impossible to reuse sync configurations across teams. Implementing it directly in the canvas engine would also require a heavy architectural rewrite that risked frontend performance.

Approach 2: A dedicated Data Movement Service (Selected)The Decision: We opted to build DMS as an independent service decoupled from the canvas. This allowed data engineers to manage standalone sync schedules, reuse connection configs across multiple platforms, and establish central governance and audit logs without bloating the main workflow builder.

Solution 2: Create a standalone data movement application

Created another user flow for having a standalone data movement application.

User flow for a standalone data movement application, from login through the pipelines listing page to creating, scheduling and reporting on a pipeline

Created quick wireframes using the existing application screenshots to validate the solution.

Wireframes of the standalone pipelines list, a new pipeline form, and run reports showing sync progress and quality checks

Final high-fidelity designs and interactions aren't included here due to confidentiality. Happy to discuss the work in detail instead.