Increasing development speed: Experimental features #1909
Replies: 6 comments 3 replies
-
I think the easiest and most flexible implementation of this is to just add a warning to any experimental feature (and add it to the docstring). warnings.warn(
"The method 'experimental_method' is experimental. It may be changed or removed in any and all future releases, including patch releases.\n
We would love to hear what you think about this new feature. If you have any thoughts, share them with us here: https://github.com/projectmesa/mesa/discussions/1909"
FutureWarning,
) |
Beta Was this translation helpful? Give feedback.
-
Pre-releases is another powerful tool we can use. Pre-releases don’t get installed by accident, but can easily by installed with |
Beta Was this translation helpful? Give feedback.
-
And to conclude, aside from the warnings, we have the
I would say the following things:
Maybe you get somethings like this. But things also can be combined. |
Beta Was this translation helpful? Give feedback.
-
Shall we have a dedicated page in ReadtheDocs for all experimental features? This is to introduce cool experimental features (such as #1916) to users. It'll also be easier to migrate from experimental to stable later. |
Beta Was this translation helpful? Give feedback.
-
@projectmesa/maintainers I think we succeeded quite well on this topic. Contributions are up, release cadence is up, automated testing is more robust (with example testing etc.). However, I'm really pissed #2006 slipped through the cracks. It happens, but it really shouldn't happen too often. So, after a bit of thinking I think we need the opposite approach to very stable features than experimental features: we should be very conservative with those. When you touch core components like frequently use schedulers (RandomActivation), the main Grids, or the DataCollector for example, we should be a lot more careful and mostly just test a lot more and wider. Pre-releases could help, especially if we can find a small pool of people willing to test existing models. Anyway, I would invite everyone to think about what we can do to make these unfortunate events less likely. I don't think one layer is perfect, so I think we need a swiss cheese model approach. So let's see if we can add some layers or improve some current ones! |
Beta Was this translation helpful? Give feedback.
-
Python 3.13 now as a new |
Beta Was this translation helpful? Give feedback.
-
Currently, the Mesa ABM project faces the problem that maintenance is fully done by volunteers. Those volunteers have very varying availability, so the time they can spend on the project is not always synchronized between them. This limits development speed, because when one developer has a lot of time, it can take a long time to wait on reviews and releases.
Simultaneously, it's important to keep development speed high and get new potential features to users quickly to be able to get feedback from the community. This requires a quick turnaround on PR merging processes and releases.
Currently, we only have one process: A diligent review. This is because every feature is directly assumed to be API stable and
Therefore, I would like to propose a second grade of features: The introduction of experimental features.
An experimental feature is a new or improved feature that doesn't break backward compatibility. Therefore it can be included even in a patch release, as long as it's marked as experimental and primarily aimed at getting feedback. If uses in production, it should be accepted that behavior can break when upgrading Mesa.
Proposed approach
This not only increases development speed, but it will also increase the robustness of new functionality, since more people can be exposed to it before the feature stabilized, thus gaining wider community support.
Let's be wrong more often, so we can be less wrong in the long-term.
Beta Was this translation helpful? Give feedback.
All reactions