# Core Concepts

### Feature Flags

Feature flags (aka feature toggles, controlled rollouts, experiments) are a development technique that allows you to ship code and features before they are finished and allow teams to modify system behaviour without changing code.

Feature toggles fit well with the practice of Continuous Integration and Delivery (CI/CD) and with techniques like A/B testing, remote config and canary releases.

{% hint style="info" %}
Learn more about feature flags

* [Feature Flags](https://martinfowler.com/articles/feature-toggles.html)
* [Benefits of feature toggles](https://apiumhub.com/tech-blog-barcelona/benefits-feature-toggles-feature-flags/)
{% endhint %}

### Release Toggle

> A release toggle enables the developers to quarantine off their unfinished feature from the rest of the codebase and turn on and off the feature in different environments for testing.

> Release Toggles allow incomplete and un-tested codepaths to be shipped to production as latent.

![](https://1873622848-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK4yy7MeiUC0w8GtqSH%2F-MMLg2ItYtK1SRsBb322%2F-MMLjI4-qifyMKsGpmt1%2FFeature%20Flag%20Image%205-1.jpeg?alt=media\&token=43c81beb-b2b4-4f29-8218-2b68e0517f4c)

Let's describe a typical release toggle scenario:

1. We are going to implement a new offers section on our site.
2. Create a new release toggle in Koople. By default, the feature is disabled on all the environments. Set it to enable on your development environment.&#x20;
3. Now, you can start working on your feature, wrapping it in a conditional statement. Only show the new section if the flag is set to `true`.
4. You can deploy your code to other environments safely. The flag hides the new feature.
5. You can allow other members (developers, QAs, POs...) to see the feature by adding their identifiers to the release toggle.
6. When the new feature is ready to be released, enable the release toggle to all users.

Learn more about managing [release toggles](using-koople/managing-release-toggles).

### Remote Configs

Remote configurations are a development technique where the behaviour of features of an application can be changed remotely without publishing an application update.

![](https://1873622848-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK4yy7MeiUC0w8GtqSH%2F-MMLjK5XkMBrdepRCMyW%2F-MMLoWp24yUkC1wkTIZB%2FRemote%20Config%203-1.jpeg?alt=media\&token=5c72b135-96e7-4005-a769-7c04718440bb)

Learn more about managing [remote configs](using-koople/remote-config)

### Target groups

Target groups allow you to segment your users into different groups based on common attributes. Target groups allow you to set different setting values for other users in your application, grouping your users based on a set of rules.&#x20;

You can set inline rules or define a set of rules as a target group to reuse in different toggles.

These target groups can be used to identify the users who toggle apply.

![](https://1873622848-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK4yy7MeiUC0w8GtqSH%2F-MM_AUBI-DIVZCC4DqwO%2F-MM_BEaYz8V_MGcVCq-8%2FFeature%20Flag%20Target%20Image%204-1.jpeg?alt=media\&token=d584dd92-0237-46fc-b17b-20f4554d8835)

Learn more about managing [target groups](using-koople/target-groups).

### Users

A user is an identified unique individual evaluated in each project environment. Each time your application sends via SDK a new user with ID and attributes, it is created as a user in the Koople platform.

Learn more about how to get [more info from the users](using-koople/users).

### Members

The people in your team (organization members or outsider collaborators) are allowed to manage the different Koople options. It's possible to control the member permission at three levels: organization, project and environment.

Learn more about managing [member permissions](using-koople/member-permissions).

### Organizations

The highest level in the Koople hierarchy. Organizations group projects and allow to invite members to work in. [Learn more](using-koople/first-steps).

### Projects

All projects must pertain to an organization. It represents your working project and allows you to create multiple environments inside. [Learn more](using-koople/first-steps).

### Environments

Represent your project environments and allow you to configure the toggle behaviours individually for each of them. [Learn more](using-koople/first-steps).



