Sandbox Management App
A streamlined solution for transferring sandbox objects.

Overview
Transferring objects between sandboxes in Adobe Experience Platform (AEP) is a manual process that relies on individual API calls. Currently, users cannot perform bulk transfers, monitor progress in a centralized view, or identify dependencies before initiating a transfer.The Sandbox Management App provides one UI for users to easily move successful configurations of AEP metadata (schemas, segments, datasets) from one sandbox to another.
Goals
- Allow users to seamlessly transfer objects and their dependencies between sandboxes.
- Reduce overall time and cost to manage sandboxes
Role
UX Designer and Developer | Wireframes, Prototyping, UI/UX Research, Front-End Development and API OptimizationScope
August 2022 - January 2023Tools
React, TypeScript, React Spectrum (React implementation of Adobe’s design system), Unified Shell (Adobe’s UI framework for internal apps), HTML/CSSExploration
Personas
- AEP customers with a technical background
- Solution architect
- Consultant
- Data engineer
Customer pain points
- Tedious and time-consuming to copy complex objects
- Slow set-up for new business implementations (need to deploy sandboxes with a baseline configuration)
- Need a separate set of APIs for AJO and migrating development work to higher sandboxes
Functional requirements
- Copy all foundation objects (schemas, datasets, segments, sources, destinations) and first level dependencies from one sandbox to another sandbox
- Review dependencies before copying
- Sync objects between the source and destination sandboxes
- Revert objects (once) after syncing
- Monitor actions for troubleshooting
Competitive Analysis
We explored features and gaps of existing object copy tools within Adobe. Gaps included not having a UI, only supporting certain objects, and not supporting bulk copy. In contrast to these offerings, Sandbox Management aims to provide a centralized experience for users to copy, sync, and revert one or more AEP objects.


Graph and table representation of root objects and their dependencies
Design Process
Based on requirements, I created a user flow diagram and sketches to illustrate the overall experience. From there, I drafted a mockup and gathered team feedback, which highlighted issues with scalability when copying multiple objects and challenges with debugging.

User flow for copying objects

Initial sketches
Version 1
Version 2
Given the feedback on Version 1, I decided to restructure the experience, focusing on scalability and organization.
Improvement | Before | After |
---|---|---|
ProblemUsers can only view one artifact's dependencies at a time.SolutionList all objects and their dependencies in a separate window.Thought ProcessPreviously, we used a dependency tree (plugin) to view all dependencies for a given object. During testing sessions, we realized the tool was lagging for object's with multiple dependencies and users wanted a more holistic view of all objects they selected. I decided to create a separate window to display all objects and their dependencies in an organized list. | ![]() | ![]() |
ProblemLack of modularization makes it hard to incorporate new features.SolutionSeparate the objects into their own tabs.Thought ProcessWe received two additional requests to sync and revert objects between sandboxes. Incorporating these features (each requiring multiple UI components) would've been time-consuming and unreliable in our single-page UI. Given that our highest priority was to implement these features for schemas and we already faced issues running asynchronous calls across different artifact types, we decided to move each object type to its own tab. | ![]() | ![]() |
ProblemThe audit log is too dense and hard to follow for troubleshooting.SolutionTurn the audit log into a table and put it on another tab.Thought ProcessThe audit log outputted asynchronous calls across all copy operations, which made it hard to trace what was actually happening for each copy workflow. Since we already created tabs for each object type, we decided to extend this to the audit log and put it on a separate tab. We also narrowed down the information to main actions taken in the app and organized it into a table. | ![]() | ![]() ![]() |

Revised user flow for copying objects
Final design
Development Process
I developed the final experience on Unified Shell using React/React Spectrum and worked closely with the backend team to accurately copy dependencies in the correct order and test the experience. Through testing and demos, we gathered user feedback and tracked all issues in JIRA.


Flow diagram for copying and syncing a schema

All transfer job statuses displayed in the UI
Limitations
Currently, users cannot copy more than 10 objects at a time. If a schema has a custom Identity Namespace as a dependency, users must first copy that object separately before copying the schema. In addition, only the top-level of dependent objects can be copied or synced to a destination.
Impact & Next Steps
Our audit logs indicate that over 100 internal consultants and solution architects have used our app. With the addition of a feature to copy objects across IMS orgs, feedback has been very positive, highlighting its impact on simplifying sandbox management in AEP.

- Syncs (60) → ~$20,000 saved
- Copies (4,000) → ~$1,000,000+ saved
In total, this represents over $1 million in savings, along with improved customer satisfaction.