Sales blocked
There was no way to validate the changes made to an agent and release it safely in the workspace
Agent Studio’s canvas is where an assembles an agentic workflow. For eg, a (CRA) responsible for monitoring a set of trials can build an agent, connect it to their organisation’s data sources, and put it to work without involving engineering.
Currently, editing an agent simply overwrote it and the changes went live immediately. As a result, there was no way to implement any governance which allowed customers to validate the changes before releasing it.
This was blocking implementation of agent studio at big pharma companies and CROs.
Studying existing platform patterns
Study studio's status change mechanisms didn't apply to agents
Before diving into ideation, I studied an existing pattern for status change in
(another product in the Medable platform) to see if I can use it in the context of agents. I found it inadequate for agents because…
- More UI manoeuvring: A builder will receive updates on dependencies frequently. To change the status first, and then accept the new update would be intrusive UX.
- Misleading Mental modal: Changing status from published to draft doesn’t unpublish the agent (unlike the study, which becomes unavailable). For agents, changing state to draft is expected to create an identical version of the agent which user can modify, while the previous version stays published and available for use simultaneously.
Builder's requirements
Agent builders should be able to view updates, accept the ones they want (except the mandatory ones) and roll back to a previous version
I began by mapping how versioning will change the existing workflow for AI builders based on my product knowledge of agent studio.
After versioning, whenever a is modified, the agent using it receives an update. I arrived at the following requirements for them.
- They should be able to view it
- They should be able to accept it only if they want to
- In case the update is mandatory, they shouldn’t be able to update the agent without accepting it
- They should be able to rollback to a previous agent version
Designing new agent lifecycle patterns
Version number is irrelevant. To help user track agent's lifecycle, anchor their attention to state
While ideating how to visualise agent’s lifecycle, I realised the version number is not important. The version can be v237. Therefore, user’s mental model should be anchored in canvas state so that it’s clear which actions are allowed.
Therefore, the experience of versioning boils down to helping the user:
- identify which state they are in currently, and as a result what they can do
- clearly show when the state has changed
- understand they have to republish for changes to take effect
Designing the dependency card component to handle updates uniformly
Users want to know what changed in the update and both the previous and the latest version number
The dependency card was already crucial for editing the configuration of a dependency. Now versioning was adding another layer of complexity.
To keep it simple, I began with a simple Y/N affordance to accept of dismiss updates (iteration 1). But on viewing it with the user lens, it fell short because it didn’t…
- give any info to decide whether the new update was important
- afford editing while it was also showing an update
- accommodate multiple files under each dependency type
These points became the requirements for the 2nd iteration. But now the component felt too busy. So for iteration 3, I took out the current version thinking it didn’t add any value.
But on user testing iteration 3 with internal users, I learnt that they confused the version number shown to be the existing version, not the new version. This was rectified in the final iteration, which handled all requirements and scaled to all dependency types.
Enforcing mandatory updates
Bring it up at the moment of publish, otherwise it adds unnecessary cognitive load
are crucial for security, and made by workspace admins, hence builders have to accept it.
The key UX driver here was when to bring the mandatory updates up and doing it without being intrusive. If the user doesn’t accept them on the canvas, instead of highlighting it, the more thoughtful way to enforce it would be to bring them up at the point of publish so that the user can accept them all in one shot.
I also debated whether mandatory updates should be highlighted on the canvas, exploring various layouts like accordions and grids to list them. Finally, I decided the optimal UX was to accept all mandatory updates in one go at the time of publish. A carousel works best because it does not force the user to see all the updates, yet does not prevent them to go through them if they want — .
Showing versions and rollback
Modal can handle large number of versions. Arranging the version configuration in tabs keeps it easy to find for the user
Regarding versions, I knew the list could grow long, that’s why I opted to navigate user to a modal, where I can show large numbers of versions.
The meta data on version card was decided based on what users want to know—when was the version created and by whom.
At first, I decided not to put the “published” tag assuming it would be obvious that the version on top of the pile is the published, but during stakeholder discussion, I realised the topmost version could be draft.
The content of each version was arranged in tabs for the following reasons:
- make it easy for users (likely auditor or builder) to find what they are looking for
- to avoid long scroll
Designing visual cues for state change and updates
Use colour and motion to direct user's attention to nodes with updates and state changes subtly
I wanted to convey important information to the user about updates and state changes on the canvas in a subtle way without demanding too much cognition from them. I achieved this using…
- accent border to visually differentiate nodes with updates, making it easier to scan for updates.
- a floating tab to convey total updates and accept all updates in one go.
- a banner moving at the top when canvas changes to draft, clearly giving feedback of state change.
Meeting engineering constraints
To meet the release date, I reduced scope by cutting the side panel because even though it was better UX, it wasn't crucial to versioning
Engineering assessed the complete design (including the side panels) would take longer than the release deadline. Instead of pushing the dates, I was asked for a middle ground.
They agreed the side panel was better UX, but because it involved new components, implementing it within the deadline wasn’t possible.
So I cut the settings side panel designed to fix consistency issues because it wasn’t crucial to versioning. Consequently, I had to redesign the dependency card again to fit it to the inconsistent modal design.
Post launch refinement
Shipped a fix to a UI bug by designing it directly in code
Post launch feedback revealed the version cards were breaking in production because double-digit version numbers were bleeding out of their borders. Even the draft tag looked too cramped.
I didn’t involve devs because this was a purely frontend change. I opened a branch in cursor, tried a few iterations directly in code, finalised one and raised a merge request in under an hour.
Outcome
Designed the versioning UX, including fixing UI bugs found in production, in a month to meet business goals
Shipped versioning in a month to meet the release deadline, fixing UI bugs found in productions and alleviating compliance concerns expressed by existing and potential customers alike.

Reflections
From the next time when meeting a deadline forces me to compromise on design, I’ll get explicit agreement from PM to pick it up for the following release, with a ticket raised, so that the better UX stays visible.
I also got to experiment with designing in code in this project. Based on this experience, I have the following thoughts:
- I feel designing in code is not suited for exploring diverse concepts; pen on paper is still the fastest
- On the contrary, it shines when it comes to small problems with known solution patterns
- It will empower design teams to own more of the frontend
At the end of the day, it is another tool in a designer’s belt which they can reach for depending on the situation.
Oh, I also learned about code reviews and testing. I reviewed my code and took screenshots for testing, getting a small taste of developing and pushing something end to end.

