Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[APM] Service Inventory: Ensure perf improvements don't hurt UX #125789

Closed
sorenlouv opened this issue Feb 16, 2022 · 8 comments
Closed

[APM] Service Inventory: Ensure perf improvements don't hurt UX #125789

sorenlouv opened this issue Feb 16, 2022 · 8 comments
Assignees
Labels
apm:performance APM UI - Performance Work apm:service-inventory discuss Team:APM All issues that need APM UI Team support v8.2.0

Comments

@sorenlouv
Copy link
Member

In #125646 we reduced the number of services displayed on the inventory page from 500 to 50. This should improve performance for customers with many services but will hide services outside top 50.

We need to make sure this doesn't impact the UX too much. Some ideas:

  • Make sure that sorting happens on the server side. This is important since the user will think that they are seeing the top 50 services by a specific dimension when sorting, but in reality they are just shifting the currently loaded services around.
  • Convert the kql search bar to a type-ahead search specifically suggesting service names.
  • Investigate what fields users normally filter by to find the service(s) they need and make sure the UI supports this

@alex-fedotyev @formgeist

@botelastic botelastic bot added the needs-team Issues missing a team label label Feb 16, 2022
@chrisdistasio
Copy link

what does it mean to "hide" services beyond "maxNumServices"? how will the customer access these?

@sqren

@sorenlouv sorenlouv added apm:performance APM UI - Performance Work Team:APM All issues that need APM UI Team support labels Feb 16, 2022
@elasticmachine
Copy link
Contributor

Pinging @elastic/apm-ui (Team:apm)

@botelastic botelastic bot removed the needs-team Issues missing a team label label Feb 16, 2022
@sorenlouv
Copy link
Member Author

what does it mean to "hide" services beyond "maxNumServices"? how will the customer access these?

The idea is that users would have to sort by a dimension (throughput, response time, error rate) or apply a filter (environment or kql search bar) to specify which services they want to see.

@alex-fedotyev
Copy link

alex-fedotyev commented Feb 17, 2022

In my mind I split this discussion into two experiences:

Default view (when user opens services inventory):

  1. As SRE, I would like to see top N unhealthy services first (during the time window selected).
  2. As SRE, I would like to see quickly access top N services state by their latency, error rates and throughput and understand how those metrics are trending/compared to normal.
  3. As SRE, I would want to have access to my complete inventory of services.

image

Today, we provide ability to perform those via:

  1. Health state which is determined by anomaly detection
  2. Ability to sort by KPI columns and the values, spark lines and comparisons enabled for high level service performance metrics.
  3. Pagination and kuery bar to understand the size of entire scope.

Secondary actions (which use will perform on the services inventory page):

  1. Drill down to the service.
  2. Find a set of services or a specific service.

Searching for a services could be via pagination or a search bar.
I don't think we have enough observations how users prefer doing that today.

Suggested next steps

Here is what I suggest to consider:

  1. I think it would be a bad experience if we stop showing total inventory scope indication via pagination. Can we find a way to make it work without limiting to top N? I mean that if there are 999 services, there should be corresponding number of pages visible.
  2. Instead of introducing N (limit) into configuration, could we make it dynamic? I.e. if user navigates to page M in the inventory - then we pull more data. It would still improve default experience, and arguably most of the users won't ever go further than page 3.
  3. Replacing kuery bar to a search bar is a great suggestion. This should be something we as @elastic/apm-pm should collect more feedback from the customers to better understand real use cases and feedback!

@cauemarcondes
Copy link
Contributor

My suggestion would be:

  1. Fetch the top 50 services, sorting it by anomaly or any other statistic if it's not available,
  2. Fetch the remaining services, excluding the top 50 found in the previous query, but only return the service name (and it wouldn't be sorted)

With this approach, I think we will have:

  • Performance improvement.
  • We will keep showing the navigation with all services available (not only top 50).
  • And once the user navigates to a certain page, we lazy load the data only for the services visible.

@sorenlouv
Copy link
Member Author

sorenlouv commented Feb 18, 2022

I think it would be a bad experience if we stop showing total inventory scope indication via pagination. Can we find a way to make it work without limiting to top N? I mean that if there are 999 services, there should be corresponding number of pages visible.

I can totally see the problem. If a customer knows they have 999 services, and we only show 50 without any explanation, they'll wonder where the remaining 949 are.

However, this is already a limitation in the product today. The limit is just much higher (500) so fewer customers are hitting this limit today than if we lower it to 50.

Instead of introducing N (limit) into configuration, could we make it dynamic? I.e. if user navigates to page M in the inventory - then we pull more data. It would still improve default experience, and arguably most of the users won't ever go further than page 3.

Although I haven't looked into whether it's possible to lazy load data with EUI tables I expect this to be possible, yes. Another option we could consider is replacing the pagination with a "Load more" button.

Replacing kuery bar to a search bar is a great suggestion. This should be something we as https://github.com/orgs/elastic/teams/apm-pm should collect more feedback from the customers to better understand real use cases and feedback!

Replacing the advanced kuery bar with a simple filter bar (for service name) makes even more sense when we launch service groups where the search bar filters on service group name:

image

I really hope we can make a decision for 8.2 🤞

As a rule of thumb, I think there should always be a filter bar above tables with high cardinality data to filter on the primary name (eg. table of containers / hosts / pods). This will make it easier for users to find what they need if they know the name (or a subset of it) and will improve perf because we don't feel we have to show everything up front.

@kpatticha
Copy link
Contributor

The change was reverted back and merged into main #126325. The maximum number is back to 500 🥳

@sorenlouv
Copy link
Member Author

This issue is no longer needed:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
apm:performance APM UI - Performance Work apm:service-inventory discuss Team:APM All issues that need APM UI Team support v8.2.0
Projects
None yet
Development

No branches or pull requests

7 participants