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

[No QA] Add KSv2.md file #14342

Merged
merged 32 commits into from
Jan 30, 2023
Merged
Changes from 28 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
5386e3a
add KSv2 file
marcochavezf Jan 16, 2023
070a166
format text in markdown
marcochavezf Jan 16, 2023
a3393c2
link k2 repo
marcochavezf Jan 16, 2023
60d8f12
add header
marcochavezf Jan 16, 2023
34dc6d8
add sub-header Installation
marcochavezf Jan 16, 2023
7c52ca2
Update contributingGuides/KSv2.md
marcochavezf Jan 17, 2023
f374db8
Update contributingGuides/KSv2.md
marcochavezf Jan 17, 2023
5ca4862
Merge branch 'marco-addKSv2file' of github.com:Expensify/App into mar…
marcochavezf Jan 17, 2023
6c1bcea
re-write first sentence
marcochavezf Jan 17, 2023
0be2676
update first paragraph based on an existing SO
marcochavezf Jan 17, 2023
14eb88f
explain the k2 dashboard
marcochavezf Jan 17, 2023
08559ae
add sub-headers
marcochavezf Jan 17, 2023
2f0c21e
Update contributingGuides/KSv2.md
marcochavezf Jan 21, 2023
385a27e
Update contributingGuides/KSv2.md
marcochavezf Jan 21, 2023
0c424aa
update dashboard image and add PR reviewer explanation
marcochavezf Jan 21, 2023
50cacab
format a few words
marcochavezf Jan 21, 2023
6f69293
add your PR section and sub-headers
marcochavezf Jan 21, 2023
3f2abf7
add WAQ section
marcochavezf Jan 21, 2023
e453188
update wording
marcochavezf Jan 24, 2023
a6a7a3d
add explanation for label buttons and reviewer checklist
marcochavezf Jan 24, 2023
abb87b0
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
d9a6187
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
fc65b92
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
cac6bc5
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
6496102
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
54cc432
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
2fecd2a
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
501bbba
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
3e5f93a
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
439f5d7
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
b1745bc
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
05e4ef5
Update contributingGuides/KSv2.md
marcochavezf Jan 30, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions contributingGuides/KSv2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# KSv2

In Expensify, we use a prioritization system called called "Kernel Scheduler v2" (KSv2) to help us keep aligned on how frequently GitHub issues should be worked on, depending on their time priority:

**Hourly**: If a Github issue has the `Hourly` label, the assignee should update it *at least* once an hour

**Daily**: If a Github issue has the `Daily` label, the assignee should update it *at least* once a day

**Weekly**: If a Github issue has the `Weekly` label, the assignee should update it *at least* once a week

**Monthly**: If a Github issue has the `Monthly` label, the assignee should update it *at least* once a month.

## Dashboard

To help surface the issues and PRs that need the most `#urgency`, we've built a custom extension to use in GitHub. It looks like this:

<img src="https://user-images.githubusercontent.com/6829422/213875977-8ff4cf19-7690-4203-ae13-a8da259be7d0.png" />

Once you have the extension installed, you can access it by going to https://github.com/Expensify/Expensify#k2 or clicking on the K2 tab at the top of a repo (between pull requests and GH actions).
marcochavezf marked this conversation as resolved.
Show resolved Hide resolved

### Pull Requests for review

In the dashboard, you can first see the PRs assigned to you as `Reviewer`. As part of our engineering guidelines, an engineer (internal or external) should review other people's code before working on their own code.
marcochavezf marked this conversation as resolved.
Show resolved Hide resolved

### Issues assigned to you

In the next section you can see all issues assigned to you, prioritized from most urgent (on the left) to least urgent (on the right). Issues will also change color depending on other factors - e.g. if they have "HOLD" in the title or if they have the `Overdue`, `Planning`, or `Waiting for copy` labels applied.

If a GitHub issue has the `Overdue` label, the text will be red. This means that the issue hasn't been updated in the amount of time allotted for an update (ex - A weekly issue becomes overdue if it hasn't been updated in a week).

### Your Pull Requests

After the issues section you will find a section that lists the PRs you've created.

<img src="https://user-images.githubusercontent.com/6829422/213875978-3df6bcd0-ee9a-472a-9a9f-6db70486bcf0.png" />

### WAQ issues

This section displays a list of open issues in the App repo which are not on hold and don't have PRs yet, all ordered by their age (and grouped by how many weeks old they are):

<img src="https://user-images.githubusercontent.com/6829422/213875962-fb1f23d0-59b9-4d05-960e-160e34c83cf0.png" />

## Label buttons

The page for a GitHub issue will have buttons on the right side for the most common labels. Some of these labels are only for internal use, but there are other labels that can be used for public repos:

<img src="https://user-images.githubusercontent.com/6829422/214215474-e7f03411-dea1-44ea-9ca0-3780d7ea2740.png" />

## Reviewer Checklist button

Additionally, the extension provides a button that facilitates the creation of the Reviewer Checklist into a new comment:

<img src="https://user-images.githubusercontent.com/6829422/214215497-ac268e40-0830-43bf-967d-fe667bc2de71.png" />

## Installation

You can install the KSv2 extension from [here](https://github.com/Expensify/k2-extension/).

## Best Practices
- Look at the dashboard every day
- Look at the dashboard first before you start any work
marcochavezf marked this conversation as resolved.
Show resolved Hide resolved
- Work your way down from the top to the bottom (look at PRs you need to review first > provide updates for issues assigned to you > check the progress on PRs you've written > find something new to work on)
marcochavezf marked this conversation as resolved.
Show resolved Hide resolved

## Why is it called "Kernel Scheduler v2?"
KSv2 is a shout-out to Windows 95 improving the kernel scheduler used in Windows 3.1. In Windows 3.1, if a program was in the foreground, it was given 100% of the CPU time. This meant that if you watched a background application like the clock, it wouldn't update its time until the foreground application was no longer in the foreground. Then the clock could "catch up" and update to show the current time. Windows 95 made it so that background applications could update by dedicating a small amount of the foreground CPU usage as "spare cycles" for background apps to use. This meant that the clock could now update in real-time, even though it was running in the background.

marcochavezf marked this conversation as resolved.
Show resolved Hide resolved
We brought the same thinking to GitHub priority. A monthly issue is like the "background app". Rather than never getting any work done on it ever, we say that it should have _something_ done on it once a month. It doesn't need to be closed or completed, but it should have something done to it. That way most of a developer's bandwidth can be used on the high-priority items that are hourly and daily, yet still, make some progress on weekly and monthly issues.