Description
In #119 and other places, we have discussions that ultimately come down to optimising for different goals.
I am opening this issue to propose and discuss a manifest that states goals and non-goals and rates properties amongst each other.
From the current issue description, xtra wants to be safe, small and performant. Taking inspiration from the agile manifest, we can thus perhaps say that we value:
- Safety over performance
Example: We would rather not use unsafe code to achieve a more performant implementation.
- Small API surface over performance
Example: We would rather not add a "special" function to the public API that makes certain use cases more efficient if the use case can already be achieved with a different API.
- Small API surface over "batteries-included"
Example: We would rather not include a convenience feature that can already be expressed with existing public APIs.
- Convenient APIs over ordering-guarentees
Example: async-await style APIs are convenient to use but it is hard to provide ordering guarantees once a task is spawned into an executor. Ordering guarantees more or less imply poll
style APIs down to user-handlers but those are less convenient to use.
- Orthogonal APIs over additional features
Example: We would rather not add a feature to xtra if it introduces APIs that are not orthogonal to an existing API. In other words, all APIs should be as orthogonal and modular as possible.
Same as with the Agile manifesto, this list doesn't mean that we don't optimise for the items on the right but when in conflict with the left, we will favor the left.