Skip to content

Commit 4faa2de

Browse files
authored
Add enhancement proposal document and template (#680)
Problem: NKG does not have a process defined for enhancement proposals. Solution: Add a document that describes our Enhancement Proposal process.
1 parent dc7dcfa commit 4faa2de

File tree

7 files changed

+230
-44
lines changed

7 files changed

+230
-44
lines changed

.github/ISSUE_TEMPLATE/enhancement.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
name: Enhancement Request about: Suggest an idea for this project title: ''
3+
labels: 'proposal' assignees: ''
4+
---
5+
6+
<!--
7+
WARNING: Prior to submitting an enhancement request, we ask that you create a discussion. If you have not yet
8+
created a discussion related to your request, please do so now: https://github.com/nginxinc/nginx-kubernetes-gateway/discussions/new?category=ideas
9+
-->
10+
11+
**Is your enhancement request related to a problem? Please describe.**
12+
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
13+
14+
**What would you like to be added**:
15+
A clear and concise description of what you would like to be added.
16+
17+
**Why this is needed**:
18+
Explain why this enhancement is needed.
19+
20+
**Additional context**
21+
Add any other context or screenshots about the enhancement request here.
22+
23+
<!--
24+
NOTE: depending on the scope of the enhancement, you may be asked to use the Enhancement Proposal
25+
process to document your work: https://github.com/nginxinc/nginx-kubernetes-gateway/blob/main/eps/README.md
26+
-->

.github/ISSUE_TEMPLATE/feature_request.md

Lines changed: 0 additions & 20 deletions
This file was deleted.

CONTRIBUTING.md

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,7 @@ Follow our [Installation Instructions](/docs/installation.md) to get the NGINX K
5151
#### Open a Discussion
5252

5353
If you have any questions, ideas, or simply want to engage in a conversation with the community and maintainers, we
54-
encourage you to open a [discussion](https://github.com/nginxinc/nginx-kubernetes-gateway/discussions) on GitHub. We
55-
highly recommend that you open a discussion about a potential enhancement before opening an issue. This enables the
56-
maintainers to gather valuable insights regarding the idea and its use cases, while also giving the community an
57-
opportunity to provide valuable feedback.
54+
encourage you to open a [discussion](https://github.com/nginxinc/nginx-kubernetes-gateway/discussions) on GitHub.
5855

5956
#### Report a Bug
6057

@@ -63,14 +60,20 @@ reporting a bug, make sure the issue has not already been reported.
6360

6461
#### Suggest an Enhancement
6562

66-
To suggest an enhancement, create an issue on GitHub with the label `proposal` using the available feature issue
67-
template.
63+
To suggest an enhancement, [open an idea][idea] on GitHub discussions. We highly recommend that you open a discussion
64+
about a potential enhancement before opening an issue. This enables the maintainers to gather valuable insights
65+
regarding the idea and its use cases, while also giving the community an opportunity to provide valuable feedback.
66+
67+
In some cases, the maintainers may ask you to write an Enhancement Proposal. For details on this process, see
68+
the [Enhancement Proposal](/docs/proposals/README.md) README.
69+
70+
[idea]: https://github.com/nginxinc/nginx-kubernetes-gateway/discussions/new?category=ideas
6871

6972
#### Issue lifecycle
7073

7174
When an issue or PR is created, it will be triaged by the maintainers and assigned a label to indicate the type of issue
72-
it is (bug, feature request, etc) and to determine the milestone. See the [Issue Lifecycle](/ISSUE_LIFECYCLE.md)
73-
document for more information.
75+
it is (bug, proposal, etc) and to determine the milestone. See the [Issue Lifecycle](/ISSUE_LIFECYCLE.md) document for
76+
more information.
7477

7578
### Development Guide
7679

@@ -87,7 +90,7 @@ Before beginning development, familiarize yourself with the following documents:
8790
- [Pull Request Guidelines](/docs/developer/pull-request.md): A guide for both pull request submitters and reviewers,
8891
outlining guidelines and best practices to ensure smooth and efficient pull request processes.
8992
- [Go Style Guide](/docs/developer/go-style-guide.md) A coding style guide for Go. Contains best practices and
90-
conventions to follow when writing Go code for the project.
93+
conventions to follow when writing Go code for the project.
9194

9295
## Contributor License Agreement
9396

ISSUE_LIFECYCLE.md

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,56 @@
11
# Issue Lifecycle
22

3-
To ensure a balance between work carried out by the NGINX engineering team while encouraging community involvement on this project, we use the following issue lifecycle. (Note: The issue *creator* refers to the community member that created the issue. The issue *owner* refers to the NGINX team member that is responsible for managing the issue lifecycle.)
3+
To ensure a balance between work carried out by the NGINX engineering team while encouraging community involvement on
4+
this project, we use the following issue lifecycle. (Note: The issue *creator* refers to the community member that
5+
created the issue. The issue *owner* refers to the NGINX team member that is responsible for managing the issue
6+
lifecycle.)
47

58
1. New issue created by community member.
69

710

8-
2. Assign issue owner: All new issues are assigned an owner on the NGINX engineering team. This owner shepherds the issue through the subsequent stages in the issue lifecycle.
11+
2. Assign issue owner: All new issues are assigned an owner on the NGINX engineering team. This owner shepherds the
12+
issue through the subsequent stages in the issue lifecycle.
913

1014

11-
3. Determine issue type: This is done with automation where possible, and manually by the owner where necessary. The associated label is applied to the issue.
15+
3. Determine issue type: This is done with automation where possible, and manually by the owner where necessary. The
16+
associated label is applied to the issue.
1217
#### Possible Issue Types
13-
`needs more info`: The owner should use the issue to request information from the creator. If we don't receive the needed information within 7 days, automation closes the issue.
18+
`needs more info`: The owner should use the issue to request information from the creator. If we don't receive the
19+
needed information within 7 days, automation closes the issue.
1420

1521
`bug`: The implementation of a feature is not correct.
1622

17-
`proposal`: A new feature, tackling technical debt, documentation changes, or improving existing features.
23+
`enhancement`: An enhancement, tackling technical debt, documentation changes, or improving existing features. In cases
24+
where the enhancement requires an [Enhancement Proposal](/docs/proposals/README.md), the additional
25+
label `enhancement-proposal` will be added.
1826

1927
`question`: The owner converts the issue to a github discussion and engages the creator.
2028

2129

22-
4. Determine milestone: The owner, in collaboration with the wider team (product management & engineering), determines what milestone to attach to an issue. Generally, milestones correspond to product releases - however there are two special milestones not tied to a specific release:
30+
4. Determine milestone: The owner, in collaboration with the wider team (product management & engineering), determines
31+
what milestone to attach to an issue. Generally, milestones correspond to product releases - however there are two
32+
special milestones not tied to a specific release:
2333

24-
- Issues assigned to `backlog`: Our team is in favour of implementing the feature request/fixing the issue, however the implementation is not yet assigned to a concrete release. If and when a `backlog` issue aligns well with our roadmap, it will be scheduled for a concrete iteration. We review and update our roadmap at least once every quarter. The `backlog` list helps us shape our roadmap, but it is not the only source of input. Therefore, some `backlog` items may eventually be closed as `out of scope`, or relabelled as `backlog candidate` once it becomes clear that they do not align with our evolving roadmap.
34+
- Issues assigned to `backlog`: Our team is in favour of implementing the feature request/fixing the issue, however
35+
the implementation is not yet assigned to a concrete release. If and when a `backlog` issue aligns well with our
36+
roadmap, it will be scheduled for a concrete iteration. We review and update our roadmap at least once every
37+
quarter. The `backlog` list helps us shape our roadmap, but it is not the only source of input. Therefore,
38+
some `backlog` items may eventually be closed as `out of scope`, or relabelled as `backlog candidate` once it
39+
becomes clear that they do not align with our evolving roadmap.
2540

26-
- Issues assigned to `backlog candidate`: Our team does not intend to implement the feature/fix request described in the issue and wants the community to weigh in before we make our final decision.
41+
- Issues assigned to `backlog candidate`: Our team does not intend to implement the feature/fix request described in
42+
the issue and wants the community to weigh in before we make our final decision.
2743

28-
`backlog` issues can be labeled by the owner as `help wanted` and/or `good first issue` as appropriate.
44+
`backlog` issues can be labeled by the owner as `help wanted` and/or `good first issue` as appropriate.
2945

3046

31-
5. Promotion of `backlog candidate` issue to `backlog` issue: If an issue labelled `backlog candidate` receives more than 30 upvotes within 60 days, we promote the issue by applying the `backlog` label. While issues promoted in this manner have not been committed to a particular release, we welcome PRs from the community on them.
47+
5. Promotion of `backlog candidate` issue to `backlog` issue: If an issue labelled `backlog candidate` receives more
48+
than 30 upvotes within 60 days, we promote the issue by applying the `backlog` label. While issues promoted in this
49+
manner have not been committed to a particular release, we welcome PRs from the community on them.
3250

33-
If an issue does not make our roadmap and has not been moved to a discussion, it is closed with the label `out of scope`. The goal is to get every issue in the issues list to one of the following end states:
51+
If an issue does not make our roadmap and has not been moved to a discussion, it is closed with the
52+
label `out of scope`. The goal is to get every issue in the issues list to one of the following end states:
3453

35-
- An assigned release.
36-
- The `backlog` label.
37-
- Closed as `out of scope`.
54+
- An assigned release.
55+
- The `backlog` label.
56+
- Closed as `out of scope`.

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,14 @@ The following table lists the software versions NGINX Kubernetes Gateway support
5353

5454
## Contacts
5555

56-
We’d like to hear your feedback! If you have any suggestions or experience issues with our Gateway Controller, please create an issue or send a pull request on GitHub. You can contact us directly via kubernetes@nginx.com or on the [NGINX Community Slack](https://nginxcommunity.slack.com/channels/nginx-kubernetes-gateway) in the `#nginx-kubernetes-gateway` channel.
56+
We’d like to hear your feedback! If you experience issues with our Gateway Controller, please [open a bug][bug] in
57+
GitHub. If you have any suggestions or enhancement requests, please [open an idea][idea] on GitHub discussions. You can
58+
contact us directly via kubernetes@nginx.com or on the [NGINX Community Slack][slack] in the `#nginx-kubernetes-gateway`
59+
channel.
60+
61+
[bug]:https://github.com/nginxinc/nginx-kubernetes-gateway/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=
62+
[idea]:https://github.com/nginxinc/nginx-kubernetes-gateway/discussions/categories/ideas
63+
[slack]: https://nginxcommunity.slack.com/channels/nginx-kubernetes-gateway
5764

5865
## Contributing
5966

docs/proposals/README.md

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
# Enhancement Proposal
2+
3+
This document describes the process of submitting an Enhancement Proposal. Enhancement Proposals are a way to propose,
4+
communicate, and coordinate on enhancements for the NGINX Kubernetes Gateway. It is based off of
5+
the [Gateway Enhancement Proposals][gep]. Their purpose is to:
6+
7+
- Make changes and proposals discoverable (current and future).
8+
- Provide a common place to discuss design, architecture, and impacts of a particular change.
9+
- Document design ideas, tradeoffs, and decisions for historical reference.
10+
11+
[gep]: https://github.com/kubernetes-sigs/gateway-api/blob/c8b54a05c850cd717eb852c4874c6c89d02a5ef8/geps/overview.md
12+
13+
## When to Write an Enhancement Proposal
14+
15+
You should only write an Enhancement Proposal if a maintainer has requested one for a particular issue. All enhancement
16+
requests should start as an idea on [GitHub Discussions][discussion]. Not all enhancement requests will require an
17+
Enhancement Proposal. For example, here are some examples of requests that may not need an Enhancement Proposal:
18+
19+
* Gateway API fields. However, some larger Gateway API fields may require Enhancement Proposals if they require
20+
significant changes to the architecture of the code.
21+
* Small changes (validation, documentation, fixups). It is always possible that the maintainers will determine a "small"
22+
change ends up requiring a Enhancement Proposal.
23+
24+
[discussion]: https://github.com/nginxinc/nginx-kubernetes-gateway/discussions
25+
26+
## Process
27+
28+
The diagram below shows the Enhancement Proposal process:
29+
30+
```mermaid
31+
flowchart TD
32+
D([Open Discussion]) --> C
33+
C([Issue Created]) --> Provisional
34+
Provisional -->|Enhancement Proposal<br /> Doc PR done| Implementable
35+
Implementable -->|Work completed| Completed
36+
```
37+
38+
### 1. Open a GitHub Discussion
39+
40+
Before creating an issue or Enhancement Proposal, [open an idea][idea] on GitHub discussion. Describe the enhancement
41+
you would like, any use cases you have, and other relevant details. Beginning with a discussion allows you to get
42+
feedback from the maintainers and the community before you invest time in writing an Enhancement Proposal.
43+
44+
[idea]: https://github.com/nginxinc/nginx-kubernetes-gateway/discussions/new?category=ideas
45+
46+
### 2. Create an Issue
47+
48+
If there is consensus on the discussion post that the enhancement is important and should be included in the roadmap, a
49+
maintainer will ask you to [open an issue][issue] on GitHub.
50+
51+
Not every enhancement warrants an Enhancement Proposal. _If_ the enhancement issue requires an Enhancement Proposals,
52+
the maintainers will add the label `enhancement-proposal` to the issue.
53+
54+
[issue]: https://github.com/nginxinc/nginx-kubernetes-gateway/issues/new?assignees=&labels=proposal&projects=&template=enhancement.md&title=
55+
56+
### 3. Agree on the Goals (Provisional)
57+
58+
Write the first version of your Enhancement Proposal using the [template](/docs/proposals/template.md), including only
59+
the summary of the enhancement and the sections addressing the "Goals" and "Non-Goals". The purpose of this initial
60+
Enhancement Proposal is to achieve consensus on the objectives before filling out the details of implementation. Set the
61+
[status](#status) field in the Enhancement Proposal document to "Provisional".
62+
63+
Open a Pull Request with your Enhancement Proposal and work with the reviewers to get the necessary approvals. All
64+
Enhancement Proposals should be placed in the [docs/proposals](/docs/proposals) directory.
65+
66+
### 4. Document Implementation Details
67+
68+
Once the goals are set and the Provisional Enhancement Proposal has been merged, you can begin filling out the
69+
implementation details of the [template](/docs/proposals/template.md). Set the [status](#status) field in the
70+
Enhancement Proposal document to "Implementable".
71+
72+
Make your changes to the existing Provisional Enhancement Proposal and open a Pull Request. Work with the reviewers to
73+
get the necessary approvals.
74+
75+
### 5. Implement
76+
77+
Once the Implementable Enhancement Proposal is merged, you can start implementing the proposed changes. In some cases it
78+
may be beneficial to open a draft Pull Request with a prototype of the changes. Otherwise, open a standard Pull Request
79+
with the changes and update the status field of the corresponding Enhancement Proposal to "Completed".
80+
81+
> Note:
82+
>
83+
> Make sure to read the [Development Guide](/CONTRIBUTING.md#development-guide) before making any code changes.
84+
85+
## Status
86+
87+
Each Enhancement Proposal has a status field that defines its current state. Each transition will require a PR to update
88+
the Enhancement Proposal.
89+
90+
* **Provisional:** The goals described by this Enhancement Proposal have consensus but implementation details have not
91+
been agreed to yet.
92+
* **Implementable:** The goals and implementation details described by this Enhancement Proposal have consensus but have
93+
not been fully implemented yet.
94+
* **Completed:** This Enhancement Proposal has been implemented.
95+
96+
Although less common, some Enhancement Proposals may end up in one of the following states:
97+
98+
* **Deferred:** We do not currently have bandwidth to handle this Enhancement Proposal, it may be revisited in the
99+
future.
100+
* **Rejected:** This proposal was considered but ultimately rejected.
101+
* **Replaced:** This proposal was considered but ultimately replaced by a newer proposal.
102+
* **Withdrawn:** This proposal was considered but ultimately withdrawn by the author.

docs/proposals/template.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
2+
# Enhancement Proposal-\<issue number\>: Enhancement Proposal Template
3+
4+
* Issue: \<link to issue\>
5+
* Status: Provisional|Implementable|Completed|Deferred|Rejected|Withdrawn|Replaced
6+
7+
(See status definitions [here](README.md#status).)
8+
9+
## Summary
10+
11+
(1-2 sentence summary of the proposal.)
12+
13+
## Goals
14+
15+
(Primary goals of this proposal.)
16+
17+
## Non-Goals
18+
19+
(What is out of scope for this proposal.)
20+
21+
## Introduction
22+
23+
(Can link to external doc -- but we should bias towards copying the content into the EP as online documents are easier
24+
to lose -- e.g. owner messes up the permissions, accidental deletion)
25+
26+
## API, Customer Driven Interfaces, and User Experience
27+
28+
(Details of API or interfaces, analysis of customer workflow impact, impacts to installation, etc. )
29+
30+
## Use Cases
31+
32+
(Describe the use cases for this enhancement. )
33+
34+
## Testing
35+
36+
(How this enhancement will be tested, any complexities, performance tests, etc. )
37+
38+
## Security Considerations
39+
40+
(Potential assets, mitigations, justification for why security is unchanged, not threatened, and not impacted. )
41+
42+
## Alternatives
43+
44+
(List other design alternatives and why we did not go in that direction. )
45+
46+
## References
47+
48+
(Add any additional document links. Again, we should try to avoid too much content not in version control to avoid
49+
broken links. )

0 commit comments

Comments
 (0)