### What is an Alpha API Feature?

Alpha API indicates that the best way for a particular feature to be presented hasn't been firmly settled on as of yet, and the current way is being introduced on a trial basis. Its spirit is not as much a warning that "this API might change", its more an invitation to the users saying, "heres a new idea I had. I'm not sure if this is the best way to do it. Do you like it ? Should we do this differently? Or is it good the way it is ?". Alpha API features are always small in scope and are presented in releases so that the greatest number of users get some hands-on experience with it; large-scoped API or architectural changes will always be discussed on the mailing list/Wiki first.

Reasons why a feature might want to change include:

- The API for the feature is too difficult to use for the typical task, and needs to be more "convenient"
- The feature only implements a subsection of what it really should be doing
- The feature's interface is inconsistent with that of other features which operate at a similar level
- The feature is confusing and is often misunderstood, and would be better replaced by a more manual feature that makes the task clearer
- The feature overlaps with another feature and effectively provides too many ways to do the same thing
- The feature made some assumptions about the total field of use cases which is not really true, and it breaks in other scenarios

A good example of what was essentially an "alpha feature" is the `private=True` flag. This flag on a `relation()` indicates that child objects should be deleted along with the parent. After this flag experienced some usage by the SA userbase, some users remarked that a more generic and configurable way was Hibernates `cascade="all, delete-orphan"`, and also that the term `cascade` was clearer in purpose than the more ambiguous `private` keyword, which could be construed as a "private variable".