Hi! This is a continuation from #178 which I see replaced. I'm starting a new discussion because I feel like a cut makes sense. You can read the backlog, but it is not necessary.
The design workflows have changed organically recently, and I appreciate that a lot more contributors have engaged in the user-research and design issue trackers. Especially @earl-warren has increasingly asked users to explain their first-hand experience in issues, and I feel like this has not only simplified my work as a user researcher (so I can just look at text and don't have to send the same questions everywhere), but also helped other Forgejo contributors get inspiration from the actual problems users are facing.
I find the first-hand experience very inspiring and easier to reason about than some of the "Needs and benefits" section of feature requests. Many users still write the text in this section based on the common understanding of feature requests, thinking from the solution space instead of the problem space. I believe that "I run an organization and we use Y as a signin for all our services; we'd like to add Forgejo; we have already investigated these options" is much more valuable than "I want to integrate sign in with Y, because It will allow using your Y account to login to Forgejo".
Hereby, I have a proposal on how to integrate this into the normal Forgejo development cycle.
My vision for a workflow
Going forward, issues in Forgejo should take the following steps.
I'll introduce the following terms:
- Problem: The user-facing part of a change. Users explain what they are struggling with.
- Enhancement: The contributor-facing part of a change. Used for UX design or technical discussions.
- A user has a problem.
- They go to the issue tracker and search for related problems.
- If they find one, they add their own experience to it.
- If not, they create a new issue from the "Problem" template, which guides them into explaining the actual problem they are facing.
- Contributors triage the problem.
- If it is an obvious issue ("bug"), it will be marked a bug.
- If it is a bug that cannot be solved without design work (e.g. "This feature does not work", but it is not clear how it should actually work), it will get a different marker for needing design.
- If the problem is not clear, it will remain in the "Problem" state, open for input from other users or the user research team
- The severity of a problem can be classified (how many users are affected? How "bad" is it? Are workarounds available?) A severity label could be introduced.
- If someone got an inspiration, they
- Create a new issue from the "Enhancement" template
- An "Enhancement" MUST reference at least one existing problem, but can address multiple
- Enhancements are not only specific to feature requests, they could also address confirmed scaling issues (e.g. a user reports slowness and the problem contains some investigation and logs; the related enhancement discusses whether a certain refactoring of a table solve the specific issue)
- Enhancements are classified by contributors
- Does it indeed solve the problems?
- How is the complexity? Is it feasible?
- The enhancement can be iterated or an enhanced enhancement proposed :)
- Enhancements get classified gains.
- Contributors are encouraged to pick enhancements with high gain. New contributors are encouraged to additionally filter for low complexity.
- Pull requests need to reference either an accepted enhancement OR a trivial problem ("bug" in step 3.1)
- It is important that the workflow does not reduce productivity for obvious cases like regressions or simple bugs.
- However, fast-tracking should only be done for few and small changes.
- Problems can be closed if Forgejo contributors do not plan to actively look for a solution to clear the backlog. However, closed problems are still valid user experience reports and can still allow to justify an enhancement, as long as an enhancement does not only address closed problems.
- It is not valid to propose an enhancement to address a problem that was considered low severity.
- However, it is valid to propose an enhancement that, among others, also improves the situation for a problem that was previously ignored.
Which problems does this solve?
- Since Problems are the required first step, we get rid of feature requests and pull requests that serve no clear value
- Currently, taking a step back and asking about the actual problem behind an idea requires "someone to be the bad guy", e.g. forgejo/forgejo#157 (comment) or forgejo/forgejo#10007 (comment)
- Going forward, new contributors can simply be hinted towards a defined workflow and asked to complete the required steps to justify their idea or patch
- The workflow focuses on having a clear workflow that every Forgejo contributor can follow and does not create a user-research bottleneck.
- All contributors get a better understanding of how the design work should be conducted.
- There is less confusion about "bugs" vs "feature requests" in some cases. The focus is on demonstrating that a change is worth the effort.
- I feel like this is particularly important and addresses the "an existing behavior that is demonstrated to be confusing for users is considered to be a bug" from #337#
- A small quality of life fix is equally suited as a first contribution, important is the confirmed gain and the complexity
- Problems that are not severe enough to deserve a fix (e.g. "cannot integrate Forgejo with third-party platform xyz" or "I would like to schedule a meeting with Forgejo contributors") can get discarded earlier, before too much discussion went into the solution and technical details ("I need a calendar and an appointment feature")
- Problems serve as an archive. Contrary to rejecting a feature request, closing a problem can still convey it as being acknowledged. Future enhancements can still refer to the first hand user experience of closed problems to justify the relevance.
- Some requests, especially highly technical needs, are sometimes hard to be judged by the user research team, because it requires significant understanding of a certain domain (for example, I sometimes struggle to perform reasonable user research in the domain of CI/CD integrations)
How to get there?
- The issue templates are being reworked.
- Labels are created to allow classifying problems for the severity and enhancements for the complexity.
- The
gain/* labels could be kept for the enhancements.
- New
severity/* labels are introduced for problems.
- New
complexity/* labels are created.
- The good first issue label could be renamed into
complexity/easy-starter (or similar); or it could be kept additionally to not only mark simple fixes but ones that are good learning opportunities.
- Existing feature requests (~800) are triaged.
- If they seem valuable and clear, existing feature requests get relabeled as an enhancement with no further adjustments.
- If they seem valuable and can be clarified, a new enhancement is created referencing the previous feature request, and the old feature request is marked a problem
- If they seem valuable but not clear, the issue remains open and the author is asked to clarify the problem using the new template.
- Otherwise, the issue is closed and the author also asked to clarify the problem using the new template.
- My goal would be to classify 100 issues, then consider adjustments to the workflow (e.g. if some issue was still unclear on how to proceed); then proceed with the other backlog of issues over the next 6 months
- I am not yet sure how to proceed with the ~250 bug reports
Open questions
- Should everything be done in the forgejo/forgejo repository?
- I think it would be good enough with the use of labels and would avoid the need to tell people about the additional repositories.
- What about forgejo/design?
- I think I would prefer to move the discussions happening there back into the main issue tracker. It was a nice experiment, and now that contributors have picked it up, I feel like it's time to move the discussions where everyone can easily find them.
- Who does the work?
- Well, as indicated in #178, I'm very motivated to do a huge chunk of work related to this, including the preparation (labels + issue templates) and sorting the backlog (in many cases copy-pasting the same text and quickly deciding whether the issue gets closed or not)
- I feel like the approach is good for distributing the work and reducing bottlenecks. Going forward, the work can be handled by everyone, even contributors with little free time.
- What about bug reports?
- Since my proposal will still have the bug labels, I think it's fine to keep them untouched at first.
- They can still be classified later (maybe some bugs are rather problems and it is not yet clear if and how they should be fixed, but I think it is not urgent to do this work)
I'm looking forward to hearing your opinions. I'm very happy to refine the proposal, but I'd like to finally reach a conclusion. I have spent a lot of time thinking about this during the summer months and I hope the revised proposal will soon become a reality. Thank you!
Hi! This is a continuation from https://codeberg.org/forgejo/discussions/issues/178 which I see replaced. I'm starting a new discussion because I feel like a cut makes sense. You can read the backlog, but it is not necessary.
The design workflows have changed organically recently, and I appreciate that a lot more contributors have engaged in the [user-research](https://codeberg.org/forgejo/user-research/issues/) and [design](https://codeberg.org/forgejo/design/issues/) issue trackers. Especially @earl-warren has increasingly asked users to explain their first-hand experience in issues, and I feel like this has not only simplified my work as a user researcher (so I can just look at text and don't have to send the same questions everywhere), but also helped other Forgejo contributors get inspiration from the actual problems users are facing.
I find the first-hand experience very inspiring and easier to reason about than some of the "Needs and benefits" section of feature requests. Many users still write the text in this section based on the common understanding of feature requests, thinking from the solution space instead of the problem space. I believe that "I run an organization and we use Y as a signin for all our services; we'd like to add Forgejo; we have already investigated these options" is much more valuable than "I want to integrate sign in with Y, because [It will allow using your Y account to login to Forgejo](https://codeberg.org/forgejo/forgejo/issues/7436)".
Hereby, I have a proposal on how to integrate this into the normal Forgejo development cycle.
### My vision for a workflow
Going forward, issues in Forgejo should take the following steps.
I'll introduce the following terms:
* Problem: The user-facing part of a change. Users explain what they are struggling with.
* Enhancement: The contributor-facing part of a change. Used for UX design or technical discussions.
1. A user has a problem.
2. They go to the issue tracker and search for related problems.
* If they find one, they add their own experience to it.
* If not, they create a new issue from the "Problem" template, which guides them into explaining the actual problem they are facing.
3. Contributors triage the problem.
* If it is an obvious issue ("bug"), it will be marked a bug.
* If it is a bug that cannot be solved without design work (e.g. "This feature does not work", but it is not clear how it should actually work), it will get a different marker for needing design.
* If the problem is not clear, it will remain in the "Problem" state, open for input from other users or the user research team
* The severity of a problem can be classified (how many users are affected? How "bad" is it? Are workarounds available?) A severity label could be introduced.
4. If someone got an inspiration, they
* Create a new issue from the "Enhancement" template
* An "Enhancement" MUST reference at least one existing problem, but can address multiple
* Enhancements are not only specific to feature requests, they could also address confirmed scaling issues (e.g. a user reports slowness and the problem contains some investigation and logs; the related enhancement discusses whether a certain refactoring of a table solve the specific issue)
5. Enhancements are classified by contributors
* Does it indeed solve the problems?
* How is the complexity? Is it feasible?
6. The enhancement can be iterated or an enhanced enhancement proposed :)
7. Enhancements get classified gains.
8. Contributors are encouraged to pick enhancements with high gain. New contributors are encouraged to additionally filter for low complexity.
9. Pull requests need to reference either an accepted enhancement OR a trivial problem ("bug" in step 3.1)
* It is important that the workflow does not reduce productivity for obvious cases like regressions or simple bugs.
* However, fast-tracking should only be done for few and small changes.
10. Problems can be closed if Forgejo contributors do not plan to actively look for a solution to clear the backlog. However, closed problems are still valid user experience reports and can still allow to justify an enhancement, as long as an enhancement does not only address closed problems.
* It is not valid to propose an enhancement to address a problem that was considered low severity.
* However, it is valid to propose an enhancement that, among others, also improves the situation for a problem that was previously ignored.
### Which problems does this solve?
* Since Problems are the required first step, we get rid of feature requests and pull requests that serve no clear value
* Currently, taking a step back and asking about the actual problem behind an idea requires "someone to be the bad guy", e.g. https://codeberg.org/forgejo/forgejo/issues/157#issuecomment-8199287 or https://codeberg.org/forgejo/forgejo/pulls/10007#issuecomment-8165240
* Going forward, new contributors can simply be hinted towards a defined workflow and asked to complete the required steps to justify their idea or patch
* The workflow focuses on having a clear workflow that **every** Forgejo contributor can follow and does not create a user-research bottleneck.
* All contributors get a better understanding of how the design work should be conducted.
* There is less confusion about "bugs" vs "feature requests" in some cases. The focus is on demonstrating that a change is worth the effort.
* I feel like this is particularly important and addresses the "an existing behavior that is demonstrated to be confusing for users is considered to be a bug" from https://codeberg.org/forgejo/discussions/issues/337#
* A small quality of life fix is equally suited as a first contribution, important is the confirmed gain and the complexity
* Problems that are not severe enough to deserve a fix (e.g. "cannot integrate Forgejo with third-party platform xyz" or "I would like to schedule a meeting with Forgejo contributors") can get discarded earlier, before too much discussion went into the solution and technical details ("I need a calendar and an appointment feature")
* Problems serve as an archive. Contrary to rejecting a feature request, closing a problem can still convey it as being acknowledged. Future enhancements can still refer to the first hand user experience of closed problems to justify the relevance.
* Some requests, especially highly technical needs, are sometimes hard to be judged by the user research team, because it requires significant understanding of a certain domain (for example, I sometimes struggle to perform reasonable user research in the domain of CI/CD integrations)
### How to get there?
1. The issue templates are being reworked.
2. Labels are created to allow classifying problems for the severity and enhancements for the complexity.
* The `gain/*` labels could be kept for the enhancements.
* New `severity/*` labels are introduced for problems.
* New `complexity/*` labels are created.
* The good first issue label could be renamed into `complexity/easy-starter` (or similar); or it could be kept additionally to not only mark simple fixes but ones that are good learning opportunities.
3. Existing feature requests (~800) are triaged.
* If they seem valuable and clear, existing feature requests get relabeled as an enhancement with no further adjustments.
* If they seem valuable and can be clarified, a new enhancement is created referencing the previous feature request, and the old feature request is marked a problem
* If they seem valuable but not clear, the issue remains open and the author is asked to clarify the problem using the new template.
* Otherwise, the issue is closed and the author also asked to clarify the problem using the new template.
4. My goal would be to classify 100 issues, then consider adjustments to the workflow (e.g. if some issue was still unclear on how to proceed); then proceed with the other backlog of issues over the next 6 months
5. I am *not yet* sure how to proceed with the ~250 bug reports
### Open questions
* Should everything be done in the forgejo/forgejo repository?
* I think it would be good enough with the use of labels and would avoid the need to tell people about the additional repositories.
* What about forgejo/design?
* I think I would prefer to move the discussions happening there back into the main issue tracker. It was a nice experiment, and now that contributors have picked it up, I feel like it's time to move the discussions where everyone can easily find them.
* Who does the work?
* Well, as indicated in https://codeberg.org/forgejo/discussions/issues/178, I'm very motivated to do a huge chunk of work related to this, including the preparation (labels + issue templates) and sorting the backlog (in many cases copy-pasting the same text and quickly deciding whether the issue gets closed or not)
* I feel like the approach is good for distributing the work and reducing bottlenecks. Going forward, the work can be handled by everyone, even contributors with little free time.
* What about bug reports?
* Since my proposal will still have the bug labels, I think it's fine to keep them untouched at first.
* They can still be classified later (maybe some bugs are rather problems and it is not yet clear if and how they should be fixed, but I think it is not urgent to do this work)
---
I'm looking forward to hearing your opinions. I'm very happy to refine the proposal, but I'd like to finally reach a conclusion. I have spent a lot of time thinking about this during the summer months and I hope the revised proposal will soon become a reality. Thank you!