Jan 2026

Jan 2026

Jan 2026

IBM

Repository Scan Progress Indicator

overview

overview

A progress tracking experience for IBM Concert's Developer Quickstart to give users real-time visibility into their repository scans as they run in the background.

A progress tracking experience for IBM Concert's Developer Quickstart to give users real-time visibility into their repository scans as they run in the background.

role

UX designer + developer

UX designer + developer

team

UX Lead, PM, Backend engineers, Director

UX Lead, PM, Backend engineers, Director

product

IBM Concert (AI-driven observability platform)

IBM Concert (AI-driven observability platform)

focus

designing progress indicator and working with backend to ensure a seamless experience

designing progress indicator and working with backend to ensure a seamless experience

what is the "Developer Quickstart" experience?

what is the "Developer Quickstart" experience?

what is the "Developer Quickstart" experience?

In the "Developer Quickstart" experience for IBM Concert, first-time users can upload their repositories.


The system then kicks off a scan process that runs multiple child scans in the background, each of which analyzes a different dimension of the repository at different speeds.

In the "Developer Quickstart" experience for IBM Concert, first-time users can upload their repositories.


The system then kicks off a scan process that runs multiple child scans in the background, each of which analyzes a different dimension of the repository at different speeds.

In the "Developer Quickstart" experience for IBM Concert, first-time users can upload their repositories.

The system then kicks off a scan process that runs multiple child scans in the background, each of which analyzes a different dimension of the repository at different speeds.

problem

problem

The original experience goes as follows:

  1. User uploads a repository and submits it for scanning.

  2. The system confirms the submission with a "Your scan has been submitted" message, but the scan is already running in the background.

  3. A "View scan status" button appears after a short delay.

  4. Clicking it, or waiting for an automatic countdown, redirects the user to an event log, where individual child scan statuses could be seen.

The original experience goes as follows:

  1. User uploads a repository and submits it for scanning.

  2. The system confirms the submission with a "Your scan has been submitted" message, but the scan is already running in the background.

  3. A "View scan status" button appears after a short delay.

  4. Clicking it, or waiting for an automatic countdown, redirects the user to an event log, where individual child scan statuses could be seen.

what are the issues with this process?

what are the issues with this process?

The director flagged this after going through the Developer Quickstart herself and raised a task for this. To see the problem, I ran the flow from the perspective of a first-time user and documented where it broke down, then walked the existing experience through with our UX architect to display what I'd found before starting the redesign.

The three main issues were:

  1. no sense of progress

  1. no sense of progress

  • Users were told that their submission had been completed but there was no visibility into what was actually happening after this.

  • Users were told that their submission had been completed but there was no visibility into what was actually happening after this.

  • Users were told that the their submission had been completed but there was no visibility into what was actually happening after this.

  1. misleading automatic redirect

  1. misleading automatic redirect

  • The automatic countdown before the redirect implied that the scan was done.

  • Instead the users were redirected to the event log with some scans still in progress and others completed, and with no further direction.

  • The automatic countdown before the redirect implied that the scan was done.

  • Instead the users were redirected to the event log with some scans still in progress and others completed, and with no further direction.

  1. no exit

  1. no exit

  • Users also had no way to exit the developer quickstart mid-flow.

  • Users also had no way to exit the developer quickstart mid-flow.

scoping the design

scoping the design

Would this replace the existing "View scan status" button?

Yes. It would be replaced by an exit button, giving users the option to leave the Developer Quickstart and return to the homepage while scans continue in the background.

Would there be an overarching progress indicator alongside per-repo progress?

Initially yes: the idea was a top-level indicator showing overall progress, with each repo showing its own progress, something like "3/10 operations complete" beneath it.

This constraint became the central design problem, and shaped the decision to move away from determinate progress entirely.

Would this replace the existing "View scan status" button?

Yes. It would be replaced by an exit button, giving users the option to leave the Developer Quickstart and return to the homepage while scans continue in the background.

Would there be an overarching progress indicator alongside per-repo progress?

Initially yes: the idea was a top-level indicator showing overall progress, with each repo showing its own progress, something like "3/10 operations complete" beneath it.

This constraint became the central design problem, and shaped the decision to move away from determinate progress entirely.

design iterations

design iterations

The design went through two distinct structural approaches before landing on the right pattern. Throughout these iterations, it was assumed that the backend capability was working as it should and the data was fetched as soon as the scan was submitted.

The design went through two distinct structural approaches before landing on the right pattern. Throughout these iterations, it was assumed that the backend capability was working as it should and the data was fetched as soon as the scan was submitted.

Iteration #1: Flat list of operations per repo

Iteration #1: Flat list of operations per repo

The first approach displayed each repository's scan operations as a flat list in the chat, incrementing numerically as they completed.

For example, "3/10 operations done", with child events shown inline beneath each repo.

The first approach displayed each repository's scan operations as a flat list in the chat, incrementing numerically as they completed.

For example, "3/10 operations done", with child events shown inline beneath each repo.

Cognitive load. With multiple repositories processing in parallel, users would be presented with several expanding lists simultaneously, with no way to gauge overall progress at a glance.

Understanding how far along the entire job required mentally adding up numbers.

Cognitive load. With multiple repositories processing in parallel, users would be presented with several expanding lists simultaneously, with no way to gauge overall progress at a glance.

Understanding how far along the entire job required mentally adding up numbers.

PROBLEM: Cognitive load. With multiple repositories processing in parallel, users would be presented with several expanding lists simultaneously, with no way to gauge overall progress at a glance.

Understanding how far along the entire job required mentally adding up numbers.

Iteration #2: The proposed design

Iteration #2: The proposed design

Per-repo progress bars with an overall indicator

The second and decided approach was a two-level structure:

An overarching progress bar at the top showing overall scan completion, with each repo underneath displaying its own progress bar.

The second and decided approach was a two-level structure:

An overarching progress bar at the top showing overall scan completion, with each repo underneath displaying its own progress bar.

The second and final design approach was a two-level structure:

An overarching progress bar at the top showing overall scan completion, with each repo underneath displaying its own progress bar.

This design solved these issues:

  1. Users had a high-level answer to "how far along is this scan?" without needing to go through individual repo details

  2. Parallel bars correctly implied processing was happening at the same time rather than sequentially.

This became the structural foundation moving forward, though a technical constraint would later shift how the progress bars themselves behaved.

This design solved these issues:

  1. Users had a high-level answer to "how far along is this scan?" without needing to go through individual repo details

  2. Parallel bars correctly implied processing was happening at the same time rather than sequentially.

This became the structural foundation moving forward, though a technical constraint would later shift how the progress bars themselves behaved.

With the approach confirmed, I moved into implementing this in the interface.

With the approach confirmed, I moved into implementing this in the interface.

backend capability constraints

backend capability constraints

When I began implementing, a core backend constraint surfaced.

Detailed child scan data wasn't available immediately from the backend, making accurate real-time progress tracking difficult to implement.

When I began implementing, a core backend constraint surfaced.

Detailed child scan data wasn't available immediately from the backend, making accurate real-time progress tracking difficult to implement.

The proposed solution was a percentage-based bar that filled intermittently and jumped to 100% once the overall status flipped to complete.


I pushed back on this because scans start and finish at different times, so any number shown mid-process would be an estimate at best and fabricated at worst.

For a first-time user going through the developer quickstart, watching a progress bar jump unexpectedly to 100% doesn't just feel jarring, it breaks trust in the tool at exactly the moment when trust matters most.

The proposed solution was a percentage-based bar that filled intermittently and jumped to 100% once the overall status flipped to complete.


I pushed back on this because scans start and finish at different times, so any number shown mid-process would be an estimate at best and fabricated at worst.

For a first-time user going through the developer quickstart, watching a progress bar jump unexpectedly to 100% doesn't just feel jarring, it breaks trust in the tool at exactly the moment when trust matters most.

The proposed solution was a percentage-based bar that filled intermittently and jumped to 100% once the overall status flipped to complete.


I pushed back on this. Since scans start and finish at different times, any number shown mid-process would be an estimate at best. For a first-time user going through the Developer Quickstart, watching a progress bar jump unexpectedly to 100% doesn't just feel jarring, it breaks trust in the system at the moment when the user's trust matters the most.

I proposed a third and final design iteration that solved the problem within the constraint rather than worked against it:

  • While child scan data is being fetched: display an indeterminate progress bar that communicates that work is happening without implying a specific completion point

  • Once data becomes available: display a determinate progress bar that shows actual state (number of operations completed out of the total), only resolving to 100% when all child scans reach completion

I proposed a third and final design iteration that solved the problem within the constraint rather than worked against it:

  • While child scan data is being fetched: display an indeterminate progress bar that communicates that work is happening without implying a specific completion point

  • Once data becomes available: display a determinate progress bar that shows actual state (number of operations completed out of the total), only resolving to 100% when all child scans reach completion

I proposed a the third and final design iteration that solved the problem within the constraint rather than worked against it:

  • While child scan data is being fetched, display an indeterminate progress bar that communicates that work is happening without implying a specific completion point

  • Once data becomes available, display a determinate progress bar that shows actual state (number of operations completed out of the total), only resolving to 100% when all child scans reach completion

exiting from the experience

exiting from the experience

There was a side effect of the indeterminate progress bar:

Because the backend took a while to fetch child scan data, users would find themselves waiting for a period of time before the progress bar converted to a determinate one, all without a way to leave.


A "Go to developer focus" button that let users exit the quickstart without waiting for scans to complete.

Underneath it would be a subtext that would clearly state that the scans would continue to run in the background and that the user would be notified once all of them were complete / if any had failed.

There was a side effect of the indeterminate progress bar:

Because the backend took a while to fetch child scan data, users would find themselves waiting for a period of time before the progress bar converted to a determinate one, all without a way to leave.

A "Go to developer focus" button that let users exit the quickstart without waiting for scans to complete.

Underneath it would be a subtext that would clearly state that the scans would continue to run in the background and that the user would be notified once all of them were complete / if any had failed.

impact

impact

This feature shipped as part of IBM Concert's 2.2 release.

For first-time users going through the "Developer Quickstart" experience, the most impactful changes were visibility and control: a process that previously ran invisibly in the background was now clear in real time, and users had an exit path.

The indeterminate-to-determinate indicator also established an honest baseline for the team to build on. As backend capabilities mature and more real-time scan data becomes available, the experience can evolve incrementally, without needing to adapt to a misleading pattern.

This feature shipped as part of IBM Concert's 2.2 release.

For first-time users going through the "Developer Quickstart" experience, the most impactful changes were visibility and control: a process that previously ran invisibly in the background was now clear in real time, and users had an exit path.

The indeterminate-to-determinate indicator also established an honest baseline for the team to build on. As backend capabilities mature and more real-time scan data becomes available, the experience can evolve incrementally, without needing to adapt to a misleading pattern.

Kavya Verma

Contact

kavya.verma@gmail.com

Kavya Verma

Contact

kavya.verma@gmail.com

Kavya Verma

Contact

kavya.verma@gmail.com