76629bf4aba052c097c6ecd1c8243e1c2437323d
[libreriscv.git] / HDL_workflow / libresoc_bug_process.mdwn
1 [[!toc ]]
2
3 ---
4
5 # LibreSOC Bug Process
6
7 * [Bug #1126](https://bugs.libre-soc.org/show_bug.cgi?id=1126)
8
9 * HDL workflow guide page: [[HDL_workflow]]
10
11 This page describes in detail how to raise new tasks (bugs) and how to approach
12 development within the project in order to get appropriate amount of funding
13 for the tasks completed.
14
15 # Why raise issues
16
17 * [Bug #1126](https://bugs.libre-soc.org/show_bug.cgi?id=1126)
18
19 If you have discovered a problem in Libre-SOC (software, hardware, etc.),
20 please raise a bug report!
21 Bug reports allow tracking of issues, both to make the developers lives easier,
22 as well as for tracking completed grant-funded work.
23
24 It is **extremely** important to link the new bug to previous ones. As Luke
25 mentioned on [this bug](https://bugs.libre-soc.org/show_bug.cgi?id=1139#c3),
26 "it is a mandatory project requirement that the graph from any bug
27 contain all other bugs (one "Group")".
28
29 The primary reason for this is to ensure bugs don't get buried and lost,
30 and will aid those tackling similar problems at a later time.
31
32 Also, for project management and financing purposes, it helps developers
33 to keep an up-to-date list of their tasks.
34
35 ##How to raise issues
36
37 1. Create a bug report.
38 2. Add in any links from the mailing list or IRC logs to the bug report for
39 back tracking (this is mandatory). Also fill in the URL field if there is a
40 relevant wiki page.
41 3. CC in relevant team members
42 4. Make absolutely sure to fill in "blocks", "depends on" or "see also" so
43 that the bug is not isolated (otherwise bugs are too hard to find if isolated
44 from everything else)
45 5. Ping on IRC to say a bug has been created
46 6. Unless you know exactly which milestone to use, leave blank initially. This
47 also applies when editing milestone, budget parent/child, toml fields. See
48 section [[HDL_workflow#Task management guidelines]] further down.
49 7. After setting the milestone, it is **absolutely required** to run
50 [budget-sync](https://git.libre-soc.org/?p=utils.git;a=blob;f=README.txt;hb=HEAD),
51 as it will point out any discrepancies. The budget allocations will be used for
52 accounting purposes and **MUST** be correct. *Note you can only get paid for
53 stuff done **after the nlnet grant is approved** (before the MOU is signed)*
54
55 If a developer ever needs to check which bugs are assigned to them, go to the
56 Libre-SOC bug tracker
57 [advanced search page](https://bugs.libre-soc.org/query.cgi?format=advanced),
58 and in the "Search by People" section, check "Bug Assignee" and "contains"
59
60 # Adding sub-tasks to tasks under existing milestone
61
62 * notify Michiel and the relevant NNNN-NN@nlnet.nl team of
63 advance notice of intent to add new sub-tasks, cc'ing bob
64 goudriaan
65 - confirm with them that this is NOT a change in the AGREED
66 MILESTONE BUDGETs, because it is just sub-task allocation.
67 - confirm that they are happy to add the sub-tasks to the MoU
68 (this needs approval of bob goudriaan)
69 * *re-generate* the JSON file
70 * make a DIFF against the *PREVIOUS* JSON file
71 * create a MANUAL report/summary of "changes" that
72 NLnet may easily action
73 - "add the following task X to parent Y of amount W",
74 - and if any: "change parent Z available amount to V as a WRAPUP")
75 (this latter is because occasionally there are subtasks **not**
76 totalling the full parent amount, usually because a summary
77 report is needed. Michiel and I privately agreed to call
78 this "wrapup")
79 * obtain a confirmation that this has been actioned
80 * **double-check** that the RFP database correctly matches the new
81 bugzilla status.
82
83 PLEASE NOTE: YOU CANNOT ACTION THE ABOVE UNDER THE FOLLOWING CIRCUMSTANCES
84
85 1. to make a change to the actual budgetary amounts of the
86 Grant Milestones, without written authorization from Bob
87 and Michiel. a DIFFERENT PROCEDURE is needed.
88 this is because NLnet had to go through a 3rd party Verification
89 Process with the European Union: changing the amounts without
90 consent is therefore tantamount to fraud.
91
92 2. if there has been an RFP already submitted under a given Milestone,
93 it becomes NO LONGER POSSIBLE to change the JSON file in NLnet's
94 system because it is too complex.
95
96 there is one Grant in this complex situation: bug #690, the crypto
97 grant. it is made much more complex because it *pre-dates* NLnet's
98 current RFP system, where RFPs were submitted by EMAIL and there
99 are manual records not fully integrated into the database.
100
101 also note: as the addition of sub-tasks *requires a change to the MOU*
102 it should NOT be taken lightly, i.e. should not be arbitrarily done
103 one by one, but only in "batches".
104
105 considerable care therefore has to be taken to ensure that NLnet are
106 not overloaded, nor that the EU Auditor is given grounds to become
107 "suspicious" because of a dozen or more alterations to the MOU.
108 and write your nickname (i.e. andrey etc.).
109
110 # Budget Estimation
111
112 Working out a time taken (and budget) for a sub-tasks requires
113 guestimating. A small self-contained task should take
114 approximately **1/2 a day up to 8 days (+/- 40%)**.
115
116 The total for a group of sub-tasks should be approximately
117 **5-25 days**. If a single tasks looks like it might take
118 longer than 8 days, it is **required** to break it into
119 smaller subtasks. Big tasks can quickly get out of hand, so
120 if in doubt, splitting a task is the better option.
121
122 Assume *1 month is appx EUR 3000* (this is an average; the value
123 may be higher depending on circumstances) and back-calculate.
124
125 These numbers come from Luke's
126 [comment #8 on bug #1126](https://bugs.libre-soc.org/show_bug.cgi?id=1126#c8)
127
128 Statistically speaking using the +/- 40% variance for each task,
129 and adding up over 20+ tasks will give a time estimate
130 **that is accurate to +/- 10%**.
131
132 *(Any sources on this?)*
133
134 However it is very important to have a *clear idea of what is
135 actually needed*, and to *not leave anything out*.
136
137 For example, when determining the task of adding instructions:
138
139 - For each instruction perform a thought experiment:
140 "how many lines of HDL, how many unit tests?"
141 - Then from *- past experience -* estimate the total number
142 of days.
143 - Assume 1 month is appx EUR 3000 and back-calculate.
144 - Put that number for each instruction (or group)
145 into comment 0, add them up, and make that the total
146 for the task.
147
148 *(Luke has used this method for the last 5 years based on 20 years
149 of project management, and it is **expected for the team to familiarise
150 themselves with it**)*
151
152 Also, make sure not to forget including **documentation** in your
153 estimate. This ensures a portion of grant money is allocated
154 to actually documenting the work involved.
155
156 Without documentation, it is not only difficult to teach newcomers about
157 the code in question, it makes it difficult to come back to the code
158 6-12 months later for maintenance and/or improvement
159 (not a rare situation in LibreSOC).
160
161 Don't forget to ask fellow project for help, they might be able
162 to help determine the scope of the work involved.
163
164 # "I'm thinking of doing... procedure"
165
166 ## Preamble
167
168 Given the scale of this project and the critical reliance on certain parts
169 of it (such as devscripts, ISA csv files, ISACaller, etc.) on the work done
170 by the team, it is extremely important to raise any proposed changes and/or
171 improvements, and to wait for feedback *before* implementing said changes.
172
173 Going forward, we all need to keep this in mind when working on
174 critical parts of the codebase.
175
176 To make good use of available time and budget, the LibreSOC team should
177 focus on:
178
179 1. Completing tasks under grant budget
180 2. Make small, incremental changes which keep the overall codebase functional.
181 3. When coming up with fixes or improvements which are intrusive to the
182 *current* workflow (which may slow the team down from completing tasks
183 under grant budget), assign them to 'Future' milestone for grant
184 applications going forward.
185
186 Why these three points?
187
188 1. Work that cannot be related to grant sub-tasks (even if indirectly, by
189 bringing us closer to eventual completion), should be put aside *until
190 future funding is secured/confirmed*.
191 2. Small changes make it easier and quicker to find mistakes. That's one of
192 the reasons Luke has specified on [[/HDL_workflow]] to stick to small
193 commits. *(Andrey: I need to improve on this myself)*
194 3. Big changes are inherently risky. When LibreSOC was just a few people
195 (Luke and Jacob), it was easier to keep track of each other's progress.
196 5 years down the line, the situation has changed.
197 Keep in mind that changes to critical parts (whether big or small) will
198 now affect at minimum Luke, Dmitry, Jacob, Sadoon, myself
199 (perhaps also Cesar and Konstantinos, and so on).
200 By going through the process of documenting a change in a new bug report,
201 not only there's an opportunity to take a pause and think about
202 repercussions, it also adds to the list of work for future grant
203 applications (which will make it easier to draft focussed grants with
204 realistic timescales and budget).
205
206 ## Procedure
207
208 - If you discover a problem in code, raise a bug report, and use a
209 corresponding 'importance' setting depending on how serious you perceive the
210 issue to be. This will start a *discussion*.
211
212 **No work is to be started yet.**
213
214 - Based on generated discussion, determine if the issue is a *blocker to
215 current tasks under budget*. If it is a blocker , then the task 'importance'
216 to be set to 'major' or 'critical (or 'blocker').
217 *Andrey: need to clarify this*
218 If possible, a budget may be assigned after discussion and confirmation with
219 Luke and Andrey (depends on remaining budget/tasks).
220
221 - If the issue is *not a blocker*, but useful in future work, then the
222 'Future' milestone is to be assigned. The issue will be evaluated at a later
223 stage. At this point, no further time should be spent on this issue
224 (to prioritise outstanding tasks).
225
226 *(Andrey): Sometimes determining whether to use WONTFIX or INVALID is
227 difficult. Perhaps more examples would help?*
228
229 - If the issue is not a blocker, and the discussion shows that it is not
230 an issue at all, it is to be set to either of the following:
231 - `RESOLVED DUPLICATE` - If the issue raised already exists.
232 [Example, bug #962](https://bugs.libre-soc.org/show_bug.cgi?id=962)
233 - `RESOLVED WONTFIX` - If the issue requires too much time or budget.
234 [Example, bug #921](https://bugs.libre-soc.org/show_bug.cgi?id=921)
235 - `RESOLVED INVALID` - If the issue does not align with project goals or
236 methodology.
237 [Example, bug #76](https://bugs.libre-soc.org/show_bug.cgi?id=76)
238 - The final status will be confirmed after *at least two other people* (other
239 than the reporter) look at the bug report.
240 For cases considered to be `WONTFIX` or `INVALID`, 48h should be given
241 before the bug report is closed. This ensures the team has enough time to
242 see the discussion before the issue disappears.
243
244 - Once the issue has been discussed and determined to be critical to current
245 grant sub-task/s, and budget considered, *then* work can proceed in a separate
246 branch. Only after fixes have been confirmed to keep the CI tests passing,
247 can they be rebased (to keep commit history) into the master branch.
248
249 This procedure adds a time delay between the issue discovery and
250 start of work. This is important however because it allows for team members
251 to read bug updates without being overwhelmed and have time to add input.
252