Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ dist
*.js

# Auto-generated disclaimer causes an eslint parsing error
docs/reference/technologies/**/*.mdx
docs/reference/sdks/**/*.mdx
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ yarn-error.log*
.idea
.wireit
.eslintcache
.cursor
5 changes: 3 additions & 2 deletions .markdownlint-cli2.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

config:
default: true

Expand Down Expand Up @@ -33,6 +32,8 @@ ignores:
- external-content
- docs/specification
# Fetched from each SDK's README.md
- docs/reference/technologies/@(client|server)/**/*.mdx
- docs/reference/sdks/@(client|server)/**/*.mdx
# Fetched from other technology repos
- docs/reference/other-technologies/*.mdx

fix: true
8 changes: 5 additions & 3 deletions blog/2022-10-21-hardening-and-1-0-sdks.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ The release includes stable versions the following features:

The specification documents associated with these features have been marked as `hardening`, meaning breaking changes are no longer allowed and usage of these features are encouraged in production environments.
The release of these SDKs and the stabilization of the specification represent a culmination of efforts by a dedicated group of vendors, practitioners and subject matter experts.
Providers are [already available](https://openfeature.dev/docs/reference/technologies/) for major vendors and popular community projects.
Providers are [already available](https://openfeature.dev/docs/reference/sdks/) for major vendors and popular community projects.
It's our hope that the efforts to stabilize the OpenFeature specification and SDKs will lead to more adoption of both OpenFeature and feature flagging in general, and promote a vibrant ecosystem around this increasingly important development pattern.

In addition to those mentioned above, experimental features available in the 1.0 SDKs include:
Expand All @@ -33,7 +33,9 @@ In addition to those mentioned above, experimental features available in the 1.0

## What's next?

Our goal in the upcoming months will be to harden our existing experimental features. Additionally, we'll work to develop and standardize new capabilities, including: client-side feature flagging, improved cloud native tooling, and implicit transaction-scoped data propagation of contextual attributes.
Our goal in the upcoming months will be to harden our existing experimental features.
Additionally, we'll work to develop and standardize new capabilities, including: client-side feature flagging, improved cloud native tooling, and implicit transaction-scoped data propagation of contextual attributes.
Furthermore, we're working on SDKs for additional languages, including [PHP](https://github.com/open-feature/php-sdk), [Python](https://github.com/open-feature/python-sdk), and [Ruby](https://github.com/open-feature/ruby-sdk).

If you're interested in contributing or learning more about OpenFeature, please join our expanding and friendly community. Visit our [GitHub](https://github.com/open-feature), join the [OpenFeature slack channel](https://cloud-native.slack.com/archives/C0344AANLA1) on the CNCF Slack instance, or hop into our [bi-weekly community meeting](https://github.com/open-feature/community#meetings-and-events).
If you're interested in contributing or learning more about OpenFeature, please join our expanding and friendly community.
Visit our [GitHub](https://github.com/open-feature), join the [OpenFeature slack channel](https://cloud-native.slack.com/archives/C0344AANLA1) on the CNCF Slack instance, or hop into our [bi-weekly community meeting](https://github.com/open-feature/community#meetings-and-events).
32 changes: 24 additions & 8 deletions blog/2023-03-27-feature-flags-if-statements.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ draft: false

Most feature flag explainers begin by explaining that feature flags are equivalent to environment variables.

While that’s true (to a point), feature flags wouldn’t be as versatile or as popular as they are, if that’s all they were. Indeed, you wouldn’t need a feature flag – you could easily achieve the same thing with an environment variable.
While that’s true (to a point), feature flags wouldn’t be as versatile or as popular as they are, if that’s all they were.
Indeed, you wouldn’t need a feature flag – you could easily achieve the same thing with an environment variable.

<!--truncate-->

Expand All @@ -26,47 +27,60 @@ if isPremiumMember {
return v1
}
```

Now try modeling this in code:

- If user is premium and located in Europe = v2 (purple)
- If user is premium and located in the US = v3 (red)
- If user is premium and located in Australia = v4 (orange)
- Everyone else gets v1 (green)

That’s 2 variables. Imagine how many variations a real system has. Now imagine trying to update these conditions in real time, without a redeployment.
That’s 2 variables.
Imagine how many variations a real system has.
Now imagine trying to update these conditions in real time, without a redeployment.

<img src={require('@site/static/img/blog/feature-flags-if-statements/feature-flag-context.png').default} />

The real power of feature flags:

- Simple or complex: Flag rules can be as simple or as complex as you wish. This makes getting started easy with plenty of room to grow and expand.
- Separation of concerns: Feature flags allow a deployment without a release. All new features are placed behind flags and those flags are disabled during deployment.
- Simple or complex: Flag rules can be as simple or as complex as you wish.
This makes getting started easy with plenty of room to grow and expand.
- Separation of concerns: Feature flags allow a deployment without a release.
All new features are placed behind flags and those flags are disabled during deployment.
- Shortcut to continuous delivery: If you can deploy anything at any time with zero risk, why not do it?
- Separation of responsibilities: Product managers take responsibility for feature flags, leaving DevOps teams to deal with their area of responsibility.

## So, are Feature Flags if Statements?
No, feature flagging is so much more powerful and dynamic than environment variables or if statements. But if you’re already using if statements, you already have enough knowledge to take your environment variables and if statements to the next level with feature flags.

No, feature flagging is so much more powerful and dynamic than environment variables or if statements.
But if you’re already using if statements, you already have enough knowledge to take your environment variables and if statements to the next level with feature flags.
If you’re stuck on the environment variable + if statement metaphor, feature flags are a very flexible if statement that you can **target**, **update**, **toggle** and **gain observability over**, in **real time** without a **re-deployment**.

## Where Do I Start?

Start with the OpenFeature hands-on tutorials.

These tutorials are provided by Killercoda, a third-party in-browser learning platform.

All tutorials are free to use and the [tutorial source code is open](https://github.com/open-feature/killercoda).

### 1: OpenFeature Demo

Never encountered feature flags?
This is the 30,000ft view showing the power and versatility of feature flags.
[Start here](https://killercoda.com/open-feature/scenario/openfeature-demo).

### 2: An Open Source Feature Flag Backend

Decided to adopt feature flags?

You will need a flag "backend" evaluation engine.

Any open source tool or vendor can support OpenFeature and many do. Check the [technologies section](https://openfeature.dev/docs/reference/technologies/) to see what tools and vendors are supported in your language.
Any open source tool or vendor can support OpenFeature and many do.
Check the [technologies section](https://openfeature.dev/docs/reference/sdks/) to see what tools and vendors are supported in your language.

If you don't already use a flag evaluation system, flagd is a good place to start without having to code your own backend solution. Try the [flagd demo on killercoda](https://killercoda.com/open-feature/scenario/flagd-demo).
If you don't already use a flag evaluation system, flagd is a good place to start without having to code your own backend solution.
Try the [flagd demo on killercoda](https://killercoda.com/open-feature/scenario/flagd-demo).

### 3. Instrument Your Application

Expand All @@ -77,8 +91,10 @@ Your application must now be modified to interact with your chosen flag evaluati
The [Five minutes to feature flags](https://killercoda.com/open-feature/scenario/five-minutes-to-feature-flags) tutorial walks through how to do this.

### 4: Feature Flags on Kubernetes?

Are you Kubernetes-native and want to manage and use feature flags entirely on Kubernetes?

Any open source or vendor tool which offers OpenFeature compliant k8s feature flagging will work.

The [Operator tutorial](https://killercoda.com/open-feature/scenario/openfeature-operator-demo) shows one option, using flagd. Flagd leverages Custom Resources to manage feature flags via GitOps and make feature flags available to your pods via annotations.
The [Operator tutorial](https://killercoda.com/open-feature/scenario/openfeature-operator-demo) shows one option, using flagd.
Flagd leverages Custom Resources to manage feature flags via GitOps and make feature flags available to your pods via annotations.
Loading