Project: App Performance. Metrics + Improvement

type: #Project
status: ready to review
owner: @horacio

Problem

Up until now, we've been developing functionality and features to the app without caring about any performance implications or all the types of machines we are targetting. And this is ok for the first part of our development stage which was very distant from real users.
Now we are grateful to have a handful of users that are brave enough to use our app.
We have a major performance issue with machines with HDD that a couple of our users have complained about. After reviewing how the app works on those machines for this particular users, I noticed a big issue in the responsiveness of the app regarding opening windows, transition to other pages, response to user actions and others.
Now that we are investing resources into the HDD problem, I believe we can take advantage of this and also start measuring and taking some actions to improve the performance of low-end machines.

Solution

The purpose of Improving performance is of course have a better/faster app, but also have a system in place to make sure we don't suffer any performance regressions when adding new features.
Most of the performance problems/improvements this project will try to cover are Runtime performance of the Electron app.
In order to have accurate and actionable measurements, we need to set a goal for our specific use case. Here's a proposal of Metrics we can start with
1.
Render a publication in less than 1s
2.
Have a blink cursor on a draft in less than 1s

Measure performance

The first thing we need to set is a consistent way to measure. This could be manually but we need to setup a Baseline to measure so we can track it and see improvements/regressions.
The second thing is to dig into the app and see where could be some potential performance bottlenecks. This can be done by instrumenting key parts of the app and measure the results with a monitoring tool.

Sentry to the rescue

Sentry is the tool we use to gather app errors currently. Sentry has performance measurements too that will help us gather runtime performance for for the main process and the renderer processes.
More information about Sentry here. and Here's a basic example of the data we would be able to collect using it.

Measure performance in all three platforms

Some of the issues mentioned by our users and by personal experience comes from Windows specially. This means that we should have a system im place to measure windows machines performance and all the machines in general.

Scope

1 week to setup basic monitoring and find the baseline measurements for the Metrics proposed.

Rabbit Holes

Instrument every interaction in the app.

No-Go

Automatic performance testing

We can use Playwright to gather performance data too on CI. Since we don't have a clear way to get to different parts of the app without an account, setting this up could be very time consuming and can be out of scope for now.
Like I mentioned before, the goal is to setup a baseline for measurement and have a basic system in place to start the analysis.