entity-framework/core/what-is-new/release-planning.md
We often get questions about how we choose specific features to go into a particular release. This document outlines the process we use. The process is continually evolving as we find better ways to plan, but the general ideas remain the same.
Different kinds of release contain different kinds of changes. This in turn means that the release planning is different for different kinds of release.
Patch releases change only the "patch" part of the version. For example, EF Core 3.1.1 is a release that patches issues found in EF Core 3.1.0.
Patch releases are intended to fix critical customer bugs. This means patch releases do not include new features. API changes are not allowed in patch releases except in special circumstances.
The bar to make a change in a patch release is very high. This is because it is critical that patch releases do not introduce new bugs. Therefore, the decision process emphasizes high value and low risk.
We are more likely to patch an issue if:
We are less likely to patch an issue if:
This bar gradually rises through the lifetime of a long-term support (LTS) release. This is because LTS releases emphasize stability.
The final decision about whether or not to patch an issue is made by the .NET Directors at Microsoft.
Major releases change the EF "major" version number. For example, EF Core 3.0.0 is a major release that makes a big step forward over EF Core 2.2.x.
Major releases:
GitHub (https://github.com/dotnet/efcore) is the source-of-truth for all EF Core planning.
Issues on GitHub have:
closed- labels indicate other reasons for closing an issue. For example, duplicates are tagged with closed-duplicate.The planning process is more involved than just taking the top-most requested features from the backlog. This is because we gather feedback from multiple stakeholders in multiple ways. We then shape a release based on:
Some of the questions we ask are:
How many developers we think will use the feature and how much better will it make their applications or experience? To answer this question, we collect feedback from many sources — Comments and votes on issues is one of those sources. Specific engagements with important customers is another.
What are the workarounds people can use if we don't implement this feature yet? For example, many developers can map a join table to work around lack of native many-to-many support. Obviously, not all developers want to do it, but many can, and that counts as a factor in our decision.
Does implementing this feature evolve the architecture of EF Core such that it moves us closer to implementing other features? We tend to favor features that act as building blocks for other features. For instance, property bag entities can help us move towards many-to-many support, and entity constructors enabled our lazy loading support.
Is the feature an extensibility point? We tend to favor extensibility points over normal features because they enable developers to hook their own behaviors and compensate for any missing functionality.
What is the synergy of the feature when used in combination with other products? We favor features that enable or significantly improve the experience of using EF Core with other products, such as .NET Core, the latest version of Visual Studio, Microsoft Azure, and so on.
What are the skills of the people available to work on a feature, and how can we best leverage these resources? Each member of the EF team and our community contributors has different levels of experience in different areas, so we have to plan accordingly. Even if we wanted to have "all hands on deck" to work on a specific feature like GroupBy translations, or many-to-many, that wouldn't be practical.