-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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
Proposal for the API Review process #13938
Comments
An example of a good speclet would be useful. Other than that, LGTM. |
My initial comments:
|
That's an excellent suggestion. My psychic powers tell me you've some prior experience in this area ;-) Would you be willing to provide an example for your suggestion #13933?
Fully agreed. My thinking was that we'd publish the process in our wiki, link to good examples, and then simply point people to it in case they haven't done it.
That's a reaction we always got, including from internal folks. We don't think of the API review board as the framework police. API design is an art and as such there usually isn't a clear cut right or wrong answer. The board is more like a group of experts that help providing a lot of insight into how non-experts would be able to use the APIs and how they fit in the larger picture, given the existing API patterns that exist. Also, it may be worth pointing out that the API review board is the same set of people that are behind .NET Core and this GitHub project. So it's not like there is this super secret team in Microsoft :-)
Absolutely. The very idea of having an open development process is to empower contributors to be successful. In other words: it's the goal of this process :-)
That's exactly how we operate. API review feedback is virtually always like don't do this, do this, consider this etc.
We don't want to change the structure of our review board yet. We don't want to rock the boat, we want to change one piece at a time to make sure it works before we change the next piece. In other words: we want to start by exposing the API review process itself.
That's a interesting point; being able to search would be great. I'm currently thinking of publishing the notes and API diffs in a separate GitHub repo. We could probably use a Wiki sot that we can use a full text search. But we're open for suggestions, so please let us know if you have a better idea. |
|
I agree here. My comment was mostly regarding the wording/presentation. Even if the only thing you actually add to the proposal itself is a "We're here to help you out. If you have questions or concerns, please don't hesitate to ask.", it will go a long way towards engaging people who are uneasy about contributing to the project.
Just remember you are fighting a long history of this not being the case; you're going to have to point this out many times, for quite a while into the future I suspect. It will help to be ready with stats about number of community requests you've merged in. Having seen some early numbers, you should know they really build your case. Edit: You don't have to give stats in the proposal. See the first paragraph of this comment for what I'm looking for in the proposal itself. |
In addition to the speclet sample, it would be helpful to link from the Steps section to a page with example "output" from the review board for something that failed, something that partially succeeded, and something that fully succeeded. |
@terrajobst, this looks very good; one thing I was curious about was is there a preferred naming convention for community contributions of features that we would like to see that are not simply parts of existing frameworks? For example, a project I am working on uses a C# wrapper around a cross-platform C library and it would, in my opinion, be beneficial to other developers if it was part of the core; something similar would be desirable for cross-platform UI work as well, even if the majority of the comments on the .NET Framework team blog asking for WF/WPF seem to indicate otherwise. |
@n8ohu - We are working on a separate (but related) plan for valuable libraries that are not appropriate for corefx or have not been proven to be stable (in terms of API shape). This could be the answer for your issue. This is a separate topic to the main one being discussed, so I've forked the conversation into issue dotnet/corefx#307. Please share your thoughts there. |
The speclet is simply a structured issue description. @justinvp did a good job with issue #13933. We'll provide more detail there. We currently don't have good examples; I think part of the process is to create a few good examples and later on point to them from our dev wiki.
Yes. I can think of cases where one issue is the uber-issue that represents the feature set. It could then link to specific issues that are actionable and can be realized by a single PR.
We'll see. Internally, API reviews are designed not to bottleneck folks. It's just another thing that we have to do before we can ship. For GitHub, the act of shipping is essentially equivalent of being merged into master. We strongly believe in the value that API reviews provide so we're willing to risk moving a bit slower than we could.
We don't differentiate between trivial API changes and complicate API changes. It's the same as with code reviews: we review every change to the product, but the review itself might be super quick.
That's true and we talked about that. We currently settled on the approach that every PR that requires a public API warrants a dedicated issue. We may streamline this process later once we've more experience with how things work in the open. |
That's a good suggestion. Similar to the speclet, my goal would be that we'll use the first GitHub API reviews as those examples. |
I have to start by saying that as a .NET developer for more than 11 years, I am ecstatic that we are even having this conversation :) I like the overall direction of the process as outlined. I have a couple of comments:
|
Glad to hear that!
Our intent is to front-load as much work as possible while not doing big design up front. That's why we're asking for a speclet first, so that we can get consensus on what it is that you want to do, i.e. the big picture. The API review is designed to do a thorough pass to find the long tail of tiny issues here and there. However, this shouldn't result in a rewrite. If it does, then either the speclet wasn't good at capturing the controversial aspect or we didn't do a good job of giving feedback. Either outcome would be a learning for both, the community and us. It will likely take as few iterations to become good at this.
While the review board meeting is certainly happening outside of GitHub, our intent is to be as transparent as possible. On campus, we invite the author of an API and found this invaluable. However, on campus it's obviously easier because we're on site and in the same time zone. Currently, our goal is to compensate for the lack of involving the author in the API review process by asking the right questions when we review the speclet so that we can represent the author's intent during the review. It's certainly not perfect but probably a good enough approximation. If we find it doesn't work, we'll need to re-adjust. |
Thanks @terrajobst. I think I am not entirely understanding the separation between what the review board (which as I understand it is made up of people who are also contributors to the CoreFX repo and are communicating on this forum) will do, and what will happen prior to getting to the review board. Is the review board merely an official sign off for things that should have already happened on the issue/PR ahead of time? Perhaps the best thing is for me to just watch the process happen and I can try to pick up the nuance that way. |
The API review process is designed to focus on the APIs. We look at the API diff and at sample code using the APIs. Passing API review is essentially a sign-off, yes. But it's also designed to do the thorough pass as I mentioned. For open source, I'd hope that we can address ~60% of what the API review process does on GitHub. Internally, we'll often get only involved after the feature is implemented. That means we often see the APIs and the scenarios for the first time. On GitHub, this should be different because we already took a stab at the speclet as well as the PR review. I know that this is a bit hand wavy at this point, but that's because we never did API reviews on open source. So I think we just need to do a few reviews to see what it looks like and how it feels for all parties involved. Fair? |
Fair enough :) |
How does documentation like the MSDN Library get updated from an API change? Is Microsoft handling that or does it need to be a step in this process? |
Unferstood Sent from my Windows Phone From: Immo Landwerthmailto:[email protected] The API review process is designed to focus on the APIs. We look at the API diff and at sample code using the APIs. Passing API reviews is essentially a sign-off, yes. But it's also designed to do the thorough pass as I mentioned. For open source, I'd hope that we can address ~60% of what the API review process does on GitHub. Internally, we'll often get only involved after the feature is implemented. That means we often see the APIs and the scenarios for the first time. On GitHub, this should be different because we already took a stab at the speclet as well as the PR review. I know that this is a bit hand wavy at this point, but that's because we never did API reviews on open source. So I think we just need to do a few reviews to see what it looks like and how it feels for all parties involved. Fair? Reply to this email directly or view it on GitHub: |
Same as today, we'll update the MSDN documentation. We haven't defined the cadence yet; it's most certainly not instantaneous. We'll probably update them similar to how we'd update what we call distributions our meta packages, which is expected to be a few times a year (> 1, < 5). |
The ASP.NET team has been doing Community Standup meetings using Google Hangouts. Worth considering doing something similar for the API reviews. |
It would be awesome to use a shared broadcast (open for viewing but not public feedback) during API reviews, especially for API contributions submitted by non-Microsoft individuals. Even for people that aren't working on the API change itself, observing the process could be valuable as a learning experience for teams that want to become the most effective .NET developers they are can. |
Thanks for all the feedback!
|
The ASP.NET Community Standup meetings are live (as well as recorded). It'd be really cool if the API Reviews were live too. And if the API contributor was able to watch live, he/she could answer any questions or provide clarifications immediately in the chat room during the review. |
I was indeed able to record and you can find the recording here. |
I really appreciate the obvious effort that went into preparing and publishing the notes and video from the API Review. The notes were clear and helpful, and the direct links to the correct place in the video for the discussion of each PR was a nice touch. The video itself was very informative, not to mention utterly fascinating. I am sure it was business as usual for you guys, but as a long-time .NET developer who has always been curious about how these discussions happen inside DevDiv, I loved watching it. I also appreciate that there is a certain amount of risk in opening your internal conversations up to the world like that; I for one found it very valuable, and look forward to future episodes :) |
@eatdrinksleepcode, thanks a lot for the kind words and for taking the time giving us positive feedback! This is highly appreciated. |
👍 |
I agree with @eatdrinksleepcode, I found this a fascinating insight into the decisions you have to make. It must be extremely difficult having to maintain such strict backwards compatibility. |
The link is dead. Where should I look? Update: Found it https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/api-review-process.md |
A question about API review process described at https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/api-review-process.md If a proposal is approved, in which frameworks would the API be implemented? .NET Core? .NET Framework? Both (.NET Standard)? |
Now that we’re on GitHub we also get requests for new APIs. The current API review process is designed around the assumption that it is internal-only. We need to rethink this process for an open source world. This issue represents a proposal how this could be handled. It’s not final – any feedback is highly appreciated.
Process Goals
The key goals are:
Overall Process
GitHub is generally based around the pull-request model. The idea is that contributors perform their changes in their own fork and submit a pull request against our repository.
For trivial code changes, such as typo fixes, we want folks to directly submit a pull request rather than opening an issue. However, for bug fixes or feature work, we want contributors to first start a discussion by creating an issue.
For work that involves adding new APIs we'd like the issue to contain what we call a speclet. The speclet should provide a rough sketch of how the APIs are intended to be used, with sample code that shows typical scenarios. The goal isn't to be complete but rather to illustrate the direction so that readers can judge whether the proposal is sound.
Steps
API Design Guidelines
The .NET design guidelines are captured in the famous book Framework Design Guidelines by Krzysztof Cwalina and Brad Abrams.
A digest with the most important guidelines are available in our developer wiki. Long term, we'd like to publish the individual guidelines in standalone repo on which we can also accept PRs and -- more importantly for API reviews -- link to.
The text was updated successfully, but these errors were encountered: