Flagsmith / flagsmith

Open Source Feature Flagging and Remote Config Service. Host on-prem or use our hosted version at https://flagsmith.com/
https://flagsmith.com/
BSD 3-Clause "New" or "Revised" License
4.62k stars 353 forks source link

Implement transient traits and identities #4278

Open khvn26 opened 2 weeks ago

khvn26 commented 2 weeks ago

Goal

To support additional use cases, such as evaluating identities in different contexts or managing anonymous identities, we aim to enable our SDK users to:

  1. Evaluate flags against identities without persisting them.
  2. Evaluate flags against identities while persisting only a subset of identity traits.

Solution Proposal

Make /api/v1/identities endpoints support optional boolean "transient" attributes both for the top-level identity object and a trait object.

Don't persist identities and traits marked as transient.

In SDKs, support transient: bool and transientTraits: list[str] optional keywords for the getIdentityFlags interface.

Related issues and discussions

Customer requests and use case discussions:

API tasks:

SDK tasks:

novakzaballa commented 2 weeks ago

@khvn26 I understand that we should implement transient traits because it is a quick and cost-effective way to cover some of the use cases related to contexts. While it could also help with anonymous identities or other use cases, we should keep the scope restricted to transient traits since that is the reason we decided to move ahead with its implementation. Also, as mentioned in this Notion regarding Anonymous identities https://www.notion.so/flagsmith/Anonymous-identities-904943c595474ae3b792f935109fb6f6 I think that for most we should persist annonymous identities or at least offer that option for most of the real use cases.

novakzaballa commented 2 weeks ago

Regarding the implementation, I would rather suggest to add a boolean attribute to the trait model, so you can specify and persist whether it is transient or not. That would allow customers to design the behavior of flags, and would allow transient flags without changes to the SDKs. We could also allow SDKs to request a trait to be marked as transient, but that would be optional.

khvn26 commented 2 weeks ago

I would rather suggest to add a boolean attribute to the trait model, so you can specify and persist whether it is transient or no

@novakzaballa I agree with this. However, not all SDKs expose the trait model; some, mainly the server-side ones, accept a simple string to value mapping instead. I suggest we use the transientTraits: list[str] parameter for those and add a transient boolean property to the Trait model for SDKs that support them in their public interfaces.

novakzaballa commented 2 weeks ago

Agreed @khvn26