One of the frequent complaints from our intellij users is it is slow, unresponsive.
We cannot classify Intellij UI slowness events based on just response time. (ie, we cannot simply say any UI response >1 second is a slow event). User expectations play a major role in classifying whether UI response is acceptable or not. Here is snip from Improving Interactive System Performanceusing TIPME
Given two operations with the same response time, the user’s definition of “ acceptable” depends heavily on the user’s expectation. Users are surprisingly forgiving when they are waiting for operations they expect to take a long time but are unforgiving when an operation that they expect to complete quickly does not. For example, a user would happily wait for 5 seconds for a program to start up, but the same user would be irritated waiting just one second for a character that s/he typed to echo.
Similar is the case with Intellij users. When users are typing code or switching tabls, users expect intellij to respond quickly. Instead, if Intellij starts indexing in foreground blocking UI thread, as users did not expect this kind of slow response during typing code/switching tabs they get irritated.
Where as during project refresh/indexing, users are aware that Intellij takes time - so, to a certain extent these delays are acceptable to users.
Whenever UI is not responsive we can say user is blocked. We can classify these blocked times as follows:
1. Anticipated Vs. un-anticipated block times:
Examples for anticipated block times: project creation, refresh etc are anticipated blocking events. Users know that till project creation or refresh is completed they cannot do much.
Examples for un-anticipated block times: Intellij indexing in foreground blocking UI thread when user is switching tabs, coding etc. User never expects UI to hang when he/she is typing code or switching tabs.
2. Acceptable Vs. un-acceptable block times:
Example for acceptable block times: Indexing a 100-200 files projects <1 min.
Examples for un-acceptable block times: Indexing a 100-200 files projects taking >10mins. [anything which is not norm.]
Eliminating un-anticipated block times, reducing un-acceptable block times improves user experience a lot.
I would like to know whether jetbrains has any framework which collects these kind of metrics. What would be best approach to built such a capability in Intellij - is it through a plugin or by enhanching community edition code?