Stack edit

Graphite, 2023

In the process of developing Stack Edit, we aimed to create a visual, streamlined approach for managing your PR stack, including bulk actions like adding reviewers. By bridging Graphite’s CLI with its web tool, we focused on driving user retention. This project marked my initial foray into zero-to-one endeavours at Graphite, where I, as a designer took the lead—from pinpointing user value and defining features to prototyping and setting key metrics.


This case study only lists high level decisions and considerations. Let's chat in detail – there's several design choices and technicalities to this project.

Impact

56%

of all net PR submissions

Role

Product design and prototyping

Timeframe

3 weeks for design and 6 weeks for implementation and QA

Target user

Graphite users primarily using the CLI


Our primary goal was to transition all CLI users, particularly those not yet reviewing code on Graphite, to our web tool. The number of such users was notably high, and many we spoke with were unaware that a web tool even existed.

Business goal

Our objective was to increase the number of users actively reviewing with Graphite. At that point, Graphite’s pricing model was based on active user engagement, meaning a user counted if they created, reviewed, or merged a PR using the platform. Data also indicated that users who performed multiple key actions tended to stay with Graphite longer, making retention the primary goal.


Success with this feature would pave the way for a future vision: the introduction of AI-generated titles and descriptions tailored to the context of each PR—a capability that was ultimately implemented.

Hypothesis

Introducing the web app to users will help them become more familiar with it, ultimately increasing their engagement with our web interface.

Identifying value through user research

The business goal was clear, but this wasn’t a feature users had asked for. They were content creating PRs through the CLI. My challenge was to identify the value for users and determine what functionality would make them want to use this feature.


An additional challenge was the tight timeline. I had just three weeks to go from research to hand-off while also learning a completely new domain: developer tools.

Insights

I conducted informal interviews with current Graphite users, particularly those who were CLI power users. From these discussions, several key capabilities emerged:

  1. Adding reviewers across the stack

  2. Adding labels across the stack

  3. Marking all PRs in the stack as ‘merge-when-ready’

  4. Adding titles and descriptions

  5. Seamlessly navigating across the stack


Internal conversations with our dev-relations team also highlighted that many users were new to stacking and struggled to fully grasp the concept.


Another important user value was to utilize the UI and navigation of this feature to help users visualise their stack.

Kickstarting design

Once I had some direction, I began exploring various layouts.

Key flows

Eventually, we discovered that users who favoured this feature preferred not to navigate to the PR inbox after a stack. Instead, they wanted to go directly to the last PR in their stack to self-review and double-check their work. As a result, we revised the core CTA from the modal.

Key decisions

  1. Opening stack edit with all PRs in draft mode – Since the main entry point was the CLI, I treated the entire interface as a draft stack. I assumed that this approach would make users feel secure and comfortable adding details before publishing. It also ensured that default reviewers from GitHub wouldn’t receive notifications immediately but only after the PR was published. However, I encountered technical issues where this setup wasn’t possible, either because users were on personal accounts or had a feature flag enabled.

  2. Keyboard accessible – My intuition was that making the entire experience keyboard accessible would be crucial since users were coming from the CLI. To achieve this, I ensured that users could navigate the entire stack in either direction using keyboard shortcuts. Additionally, the title was pre-added based on the commit message to speed up the process, with the focus then shifting directly to the description in edit mode.

  1. Templates in descriptions – PR descriptions are often pulled from templates provided by GitHub, reflecting team culture and requirements. I decided to pre-fill these relevant templates into the description. However, due to the broad scope of the project, we ultimately had to remove this feature from the implementation.

  2. PR page to stack edit – My vision for the PR page was to create a stack view and ensure that the interface wasn't ephemeral. To complete the experience, I decided to add a link back to Stack Edit from the PR page, providing a consistent access point.

User testing and removing features

Since this was an experimental feature with many uncertainties around its visuals and effectiveness in conveying the stack concept, I conducted several rounds of user testing with prototypes.

Key findings

  1. Users did not see value in applying the same description across the stack.

    The original intention was to let users add a summary of the stack's content to each PR description, as part of our broader goal to make stacks a key feature in our product. However, users found no benefit in duplicating descriptions across the stack. Moreover, without a dedicated section for a stack description, this approach lacked clarity and would not have been intuitive.


  1. Animation was crucial for helping users understand the stack's direction and navigate it effectively. The challenge here is that while a stack of PRs moves upward, they are technically referred to as downstack PRs. Therefore, it was essential to address both the keyboard shortcuts and the visual direction to ensure clarity.

  2. Users generally publish/ keep as draft one PR at a time, instead of publish all at once.

Prototypes and stack direction

Below are various UI and animation explorations that I tested both internally and externally.

Technical workarounds

This project was an ambitious zero-to-one endeavor for a small, fast-moving team working on an early-stage product. To prevent exceeding our allocations, we had to cut several elements from the scope.


As noted, the description templates posed challenges. I also discovered that the description code was legacy code, which made modifications difficult (though this is no longer the case). Consequently, we opted for having the description selected but not editable. User feedback confirming the need for an editable description validated my original assumption, and we are now including this feature in our scope, as the description code is now clearer.


One of the biggest compromises was the removal of the scroll functionality. Initially, users could navigate through the stack using buttons or keyboard shortcuts one PR at a time. For users who wanted to scan or jump to different PRs in a large stack, I had added scroll functionality. However, the initial implementation was problematic, and fine-tuning it would have taken an unacceptable amount of time. Therefore, we decided to remove this feature during QA.

Data analytics

Almost every function was new to us. Product and data science were ramping up at the same time I was, which explains the limited product involvement in the design process. Our team’s data scientist had also just joined and was focused on setting up analytics for various projects. I provided a list of metrics I wanted to measure for this project, similar to what a product manager would. While most critical pieces were tagged, we could not track the review rate directly from Stack Edit due to how the data was structured, which would have made it unclear.

Core business & product

  1. Total number of users who submitted on web

  2. Of all CLI users, % of users who landed on our UI after being posed the question to submit on web

  3. Web UI usage

  4. Of all users who submitted on web, % of users who returned to our web UI

  5. Of all users who submitted on web, % of users who took their first key action on our web UI after submitted through web

  6. Number of users who took their first key action on our web UI after submitted through web

  7. Drop-off

  8. % of users who landed on the web submit UI, but didn't "publish all PRs" or take any action on all PRs in the stack (proxy for drop-off)

AI generate title + description

Graphite’s vision is to accelerate software development. Automating title and description generation leveraging falls well within this vision. The stack edit surface, as much as the PR page are apt canvases. Stack edit in particular is an author/ creator focussed surface (PR page is reviewer focussed), which makes it the ideal real estate for this feature.

Reduce negative space to improve description readability

Due to legacy code in the description, I couldn’t modify the split view design, which restricted its active real estate despite having more available space. After a user flagged this issue, I redesigned the margins and breakpoints to optimise the layout.

User reception and bold product changes

When users executed the 'gt submit' command in the CLI, they were asked if they wanted to enter the web UI, with the option to decline. Initially, we received feedback from several users who were frustrated by being automatically directed to the web UI and requested an option to disable this feature. To address their concerns, we implemented a flag that allowed users to bypass the web UI prompt entirely.


However, the product team suspected that we were hearing primarily from vocal critics and not from those who might support the feature. As a result, the team made the decision to remove the prompt entirely and automatically direct users to the web tool, unless they had a special flag to opt out. Since this change, approximately 50% of PRs have been submitted through this feature and we haven’t heard any more negative feedback.

tibrewala.kanika@gmail.com

tibrewala.kanika@gmail.com

Kanika Tibrewala

tibrewala.kanika@gmail.com