diff --git a/docs/best-practices/edgedb-and-edge-flags/edge-db-via-api-simple.md b/docs/best-practices/edgedb-and-edge-flags/edge-db-via-api-simple.md index 8608093c..b02d03ac 100644 --- a/docs/best-practices/edgedb-and-edge-flags/edge-db-via-api-simple.md +++ b/docs/best-practices/edgedb-and-edge-flags/edge-db-via-api-simple.md @@ -40,7 +40,7 @@ To test it yourself, here is the data: Next, we need to supply the auth. Switch to the authorization tab and change the type to API Key. -For the “Value”, supply the server SDK key found in your [environments & keys tab.](/essentials/keys) +For the “Value”, supply the server SDK key found in your [environments & keys tab.](/platform/account-management/keys) ![Untitled](/sept-6-2022-edge-flags-api-3.png) diff --git a/docs/best-practices/edgedb-and-edge-flags/import-from-anywhere.md b/docs/best-practices/edgedb-and-edge-flags/import-from-anywhere.md index 680262b3..166b33b3 100644 --- a/docs/best-practices/edgedb-and-edge-flags/import-from-anywhere.md +++ b/docs/best-practices/edgedb-and-edge-flags/import-from-anywhere.md @@ -9,7 +9,7 @@ Super Segments are collections of users that are targeted by data from any exter This means that users or their data can be “imported” into DevCycle for targeting in experiments or features by making use of EdgeDB. -While this can all be handled via the [EdgeDB API](/bucketing-api/#tag/EdgeDB), as outlined in [here](/platform/edgedb), DevCycle has created a Zapier integration which allows for easy sending of data directly to the desired EdgeDB environment in a project. This makes connecting any tools (like [Amplitude](https://amplitude.com/), [Segment](https://segment.com/) and others) with Zapier integrations directly to DevCycle extremely simple! +While this can all be handled via the [EdgeDB API](/bucketing-api/#tag/EdgeDB), as outlined in [here](/platform/feature-flags/targeting/edgedb), DevCycle has created a Zapier integration which allows for easy sending of data directly to the desired EdgeDB environment in a project. This makes connecting any tools (like [Amplitude](https://amplitude.com/), [Segment](https://segment.com/) and others) with Zapier integrations directly to DevCycle extremely simple! ## Salesforce Guide @@ -61,7 +61,7 @@ If you connect your account, the following fields will require input. ![Authorize DevCycle](/sept_6_2022_zapier_guide_8.png) -[These keys can be found directly on your Organization’s setting page within DevCycle.](/essentials/keys) +[These keys can be found directly on your Organization’s setting page within DevCycle.](/platform/account-management/keys) ![Keys Successful](/sept_6_2022_zapier_guide_9.png) @@ -98,7 +98,7 @@ Now, any time a new lead enters SalesForce, it will be sent to EdgeDB with their Now that we’ve got data in EdgeDB, it can be used for targeting in any feature within DevCycle. :::info -Any data saved to EdgeDB is considered a “Custom Property” within DevCycle and can be targeted by simply adding that same property in the dashboard. To find out more about Custom Properties, [read here.](/platform/advanced-targeting/custom-properties) +Any data saved to EdgeDB is considered a “Custom Property” within DevCycle and can be targeted by simply adding that same property in the dashboard. To find out more about Custom Properties, [read here.](/platform/feature-flags/targeting/custom-properties) ::: To use the SalesForce data from above, simply create a new custom property in the dashboard (if it does not already exist): diff --git a/docs/best-practices/engineering-led-experiments.md b/docs/best-practices/engineering-led-experiments.md index faa76e32..3617c2fb 100644 --- a/docs/best-practices/engineering-led-experiments.md +++ b/docs/best-practices/engineering-led-experiments.md @@ -14,10 +14,10 @@ While experimentation is often associated with marketing and revenue, experiment To complete this guide, you may want to review the following topics: -- [Creating and Managing Variations](/essentials/variables) -- [Random Distribution Targeting](/essentials/targeting) -- [Feature Experimentation](/essentials/feature-experimentation) -- [Creating a Metric](/platform/metrics/creating-and-managing-metrics) and [Metric Types](/platform/metrics/creating-and-managing-metrics#types) +- [Creating and Managing Variations](/platform/feature-flags/variables-and-variations/variations) +- [Random Distribution Targeting](/platform/feature-flags/targeting/random-variations) +- [Feature Experimentation](/platform/experimentation/feature-experimentation) +- [Creating a Metric](/platform/experimentation/creating-and-managing-metrics) and [Metric Types](/platform/experimentation/creating-and-managing-metrics#types) ## Metrics in DevCycle @@ -25,7 +25,7 @@ Metrics are how DevCycle measures data based on the custom events you choose to When you create a metric, it is not tied to a specific feature; they can be defined once and applied to as many features as desired. For instance, we could use the same error metric to determine the error rate of other features. -To learn how to create a metric, read [Creating and Managing Metrics](/platform/metrics/creating-and-managing-metrics#creating-a-metric). +To learn how to create a metric, read [Creating and Managing Metrics](/platform/experimentation/creating-and-managing-metrics#creating-a-metric). :::info Metrics are available to all customers on any plan. However, Metrics rely on custom events that incur extra costs. These costs will be added to your existing plan. To learn more, read about our pricing, or contact us at support@devcycle.com. @@ -53,7 +53,7 @@ The `type` field in the object must correspond to the Event Type you defined whe ::: ![Use the Event Type, not the Type](/august-2022-event-type-not-metric-type.png) -If your Metric was a [numerical Type](/platform/metrics/creating-and-managing-metrics#types) (such as Sum Per User, Total Average, etc.) you may want to provide a value within your `event`. Some numerical data you may want to track are latency, load time, number of API calls, etc. Adding a numerical value to your object in JavaScript would look something like this: +If your Metric was a [numerical Type](/platform/experimentation/creating-and-managing-metrics#types) (such as Sum Per User, Total Average, etc.) you may want to provide a value within your `event`. Some numerical data you may want to track are latency, load time, number of API calls, etc. Adding a numerical value to your object in JavaScript would look something like this: ```jsx const event = { @@ -65,7 +65,7 @@ devcycleClient.track(event) You can include other data within the `event` object such as date, target, and metadata. For more information about tracking custom events with our other SDKs, refer to [Tracking Custom Events](/sdk/features). -Once you have set up the SDK to send custom events, you can [apply your Metric to a feature](/platform/metrics/creating-and-managing-metrics#attaching-metrics-to-features). +Once you have set up the SDK to send custom events, you can [apply your Metric to a feature](/platform/experimentation/creating-and-managing-metrics#attaching-metrics-to-features). ## Suggested Metrics @@ -116,7 +116,7 @@ Some of the simplest and most precise experiments are basic A/B tests comparing For more complex features you may compare more variations with several combinations of variable values. You would then randomly distribute the variations according to the number of variations you are including in the experiment. -For more information about comparing multiple variations in an experiment, refer to [Feature Experimentation](/essentials/feature-experimentation#comparing-multiple-variations). +For more information about comparing multiple variations in an experiment, refer to [Feature Experimentation](/platform/experimentation/feature-experimentation#comparing-multiple-variations). ### Choosing Metrics diff --git a/docs/best-practices/feature-grouping.md b/docs/best-practices/feature-grouping.md index f6cead11..5997cf60 100644 --- a/docs/best-practices/feature-grouping.md +++ b/docs/best-practices/feature-grouping.md @@ -10,7 +10,7 @@ This guide describes how to manage large amounts of feature flags with DevCycle. ## Why Group Flags? -Feature Flags can accumulate very quickly. Without an organizational mechanism, the feature management dashboard would be extremely cluttered. Imagine developing a complex feature with various parts, such as the [Metrics and Experimentation feature in DevCycle](/essentials/feature-experimentation). Each piece of functionality needs a flag: There’s a flag for the API, the UI, each type of experimentation, string flags for naming, and so on. It would be helpful to have the ability to find all these flags in the same place. +Feature Flags can accumulate very quickly. Without an organizational mechanism, the feature management dashboard would be extremely cluttered. Imagine developing a complex feature with various parts, such as the [Metrics and Experimentation feature in DevCycle](/platform/experimentation/feature-experimentation). Each piece of functionality needs a flag: There’s a flag for the API, the UI, each type of experimentation, string flags for naming, and so on. It would be helpful to have the ability to find all these flags in the same place. Not only do we want flags for each part of a feature, but we also want the ability to turn off the entire feature, all at once, in case something goes wrong. Other Feature Flag management solutions require you to create complex feature flag dependencies to set up a “master switch” for a group of flags. In contrast, DevCycle allows you to easily group feature flags and disable them simultaneously with one switch. @@ -38,7 +38,7 @@ We should also rename our variation. Since our `show-metrics-api` flag is no lon ![Metrics API Variable is Off](/july-2022-metrics-api-false.png) -But what if we only want a specific group of users to have the API disabled? Let’s say we want our Internal QA users to continue seeing the API, but we want it to be hidden from external users. **This leads to the second method to disable Variables: creating a new [Variation](/essentials/variables).** We can create a new Variation called “General Users” and set the `show-metrics-api` variable to `false`. +But what if we only want a specific group of users to have the API disabled? Let’s say we want our Internal QA users to continue seeing the API, but we want it to be hidden from external users. **This leads to the second method to disable Variables: creating a new [Variation](/platform/feature-flags/variables-and-variations/variations).** We can create a new Variation called “General Users” and set the `show-metrics-api` variable to `false`. ![General users variation for Metrics Feature](/july-2022-general-users-variation.png) @@ -48,13 +48,13 @@ Doing so will hide the API from users receiving the General Users variation, whi **Managing multiple Variables and Variations:** -To learn more about managing multiple Variables and Variations within a feature, [Read here](/essentials/variables). +To learn more about managing multiple Variables and Variations within a feature, [Read here](/platform/feature-flags/variables-and-variations/variables). ::: ### Using Targeting as a “Master Switch” -One challenge with many Feature Flag management solutions is creating a switch that controls a whole feature and its feature flag dependencies. DevCycle, however, makes it easy to disable an entire Feature and its Remote Variables using [Targeting Rules](/essentials/targeting). +One challenge with many Feature Flag management solutions is creating a switch that controls a whole feature and its feature flag dependencies. DevCycle, however, makes it easy to disable an entire Feature and its Remote Variables using [Targeting Rules](/platform/feature-flags/targeting/targeting-overview). **Method 1: Disabling a feature for everyone** @@ -74,7 +74,7 @@ Targeting Rules also allow you to disable the entire feature for only a specific **Targeting Users:** -[Read here to learn more about how to Target Users](/essentials/targeting). +[Read here to learn more about how to Target Users](/platform/feature-flags/targeting/targeting-overview). ::: @@ -88,6 +88,6 @@ This guide explained how to manage large amounts of features flags by: Here are similar resources to help with organizing Feature Flags: -- [Feature Types](/essentials/features) +- [Feature Types](/platform/feature-flags/features) - [Effectively Organizing Your Feature Flags](/best-practices/effectively-organizing-feature-flags) -- [Creating Variables & Variations](/essentials/variables) +- [Creating Variables & Variations](/platform/feature-flags/variables-and-variations/variables) diff --git a/docs/best-practices/product-led-experimentation.md b/docs/best-practices/product-led-experimentation.md index 94440a28..c7f4c2bf 100644 --- a/docs/best-practices/product-led-experimentation.md +++ b/docs/best-practices/product-led-experimentation.md @@ -16,11 +16,11 @@ We've designed experimentation to be accessible across various roles within your To complete this guide, you may want to review the following topics: -- [DevCycle Feature Hierarchy](/introduction/core-concepts/feature-hierarchy) -- [Creating and Managing Variations](/essentials/variables) -- [Random Distribution Targeting](/essentials/targeting) -- [Feature Experimentation](/essentials/feature-experimentation) -- [Creating a Metric](/platform/metrics/creating-and-managing-metrics) and [Metric Types](/platform/metrics/creating-and-managing-metrics#types) +- [DevCycle Feature Hierarchy](/essentials/feature-hierarchy) +- [Creating and Managing Variations](/platform/feature-flags/variables-and-variations/variations) +- [Random Distribution Targeting](/platform/feature-flags/targeting/random-variations) +- [Feature Experimentation](/platform/experimentation/feature-experimentation) +- [Creating a Metric](/platform/experimentation/creating-and-managing-metrics) and [Metric Types](/platform/experimentation/creating-and-managing-metrics#types) ## Conducting Experiments: A Collaborative Approach @@ -34,7 +34,7 @@ Product managers often spearhead the creation of an experiment brief or structur - **Hypothesis**: A hypothesis should be specific, measurable, and iterative. The simplest and most effective template for hypotheses is: "By doing [X] to [Y], we expect [Z]." - **Description:** Provide a high-level description of the experiment, make sure to note the location of the experiment and any relevant context. -- **Target Audience:** Depending on your experiment, you may want to target all users or an audience defined by a [custom property](/platform/advanced-targeting/custom-properties) +- **Target Audience:** Depending on your experiment, you may want to target all users or an audience defined by a [custom property](/platform/feature-flags/targeting/custom-properties) - For example, you may want to run your experiment only on users in Canada or only those that have a certain subscription tier. - **Variations:** Decide how many variations you wish to test and what those variations are. - For example, will you be testing a red checkout button versus a blue checkout button, or will you be testing a red versus a blue versus a green checkout button? @@ -48,7 +48,7 @@ Engineers translate experiment structures into code and are often responsible fo ### Creating the Feature, Variables, & Variations: -Depending on the complexity of the experiment or Feature, the engineers responsible may want to create multiple Variables. For example, engineers may want a separate flag or Variable that controls the backend logic and a separate Variable(s) that control the frontend elements. See [Feature Hierarchy](/introduction/core-concepts/feature-hierarchy) for more information on how Features and Variables relate to each other. +Depending on the complexity of the experiment or Feature, the engineers responsible may want to create multiple Variables. For example, engineers may want a separate flag or Variable that controls the backend logic and a separate Variable(s) that control the frontend elements. See [Feature Hierarchy](/essentials/feature-hierarchy) for more information on how Features and Variables relate to each other. ![Variable Table](/mar-2024-example-variable-table.png) @@ -64,10 +64,10 @@ After creating the necessary Variations, select the appropriate Metrics for your For example, if we expect sorting search results to affect page load time significantly, we would create a Metric to track page load time and attach it to our Feature. -To calculate [Metrics](/platform/metrics/creating-and-managing-metrics), DevCycle uses custom events sent via the API or SDKs. Your team may already be passing events to DevCycle, but if not your engineering team may have to implement +To calculate [Metrics](/platform/experimentation/creating-and-managing-metrics), DevCycle uses custom events sent via the API or SDKs. Your team may already be passing events to DevCycle, but if not your engineering team may have to implement [custom event tracking](/best-practices/engineering-led-experiments#calculating-metrics-by-tracking-events) to capture all of the data you wish to use in your experiment. -Once you have set up the SDK to send custom events, you can [create Metrics](/platform/metrics/creating-and-managing-metrics#creating-a-metric) on the Metric tab in DevCycle. You define whether a decrease or an increase in values means improvement. Metrics uses this input to clearly show whether the results were positive or negative when you start your experiment. +Once you have set up the SDK to send custom events, you can [create Metrics](/platform/experimentation/creating-and-managing-metrics#creating-a-metric) on the Metric tab in DevCycle. You define whether a decrease or an increase in values means improvement. Metrics uses this input to clearly show whether the results were positive or negative when you start your experiment. ![Creating a Metric](/mar-2024-create-metric.gif) @@ -75,7 +75,7 @@ Once you have set up the SDK to send custom events, you can [create Metrics](/pl The **Event Type** in the modal must correspond to the `type` field defined in code. This is not to be confused with the Type selected from the dropdown. ::: -To [apply your Metric to a Feature](/platform/metrics/creating-and-managing-metrics#attaching-metrics-to-features), navigate to the Comparative Analysis section of the Feature page, and select the metric you wish to attach. +To [apply your Metric to a Feature](/platform/experimentation/creating-and-managing-metrics#attaching-metrics-to-features), navigate to the Comparative Analysis section of the Feature page, and select the metric you wish to attach. ![Attach a Metric](/mar-2024-attach-metric.gif) @@ -83,7 +83,7 @@ If your team wishes to conduct experiment analysis outside of DevCycle, you can ### QA & Testing -Product managers can still actively participate during the development process, conducting QA checks in each environment. DevCycle's [Self-Targeting feature](/platform/advanced-targeting/self-targeting), allows product managers to serve themselves different Variations of Features safely without altering targeting rules in each environment. +Product managers can still actively participate during the development process, conducting QA checks in each environment. DevCycle's [Self-Targeting feature](/platform/testing-and-qa/self-targeting), allows product managers to serve themselves different Variations of Features safely without altering targeting rules in each environment. Alternatively, you can turn on the Feature/experiment in pre-prod or prod environments & **only** target internal users so your team can test the end experience for users. @@ -97,7 +97,7 @@ Once you are ready to launch, navigate to Feature, and click on the Production e ![Random Distribution](/march-2024-random-distribution-experiment-.gif) -To run an experiment, you simply have to setup a [Random Distribution Targeting rule](/platform/advanced-targeting/random-variations) and decide roll-out strategy or schedule the launch of the experiment. +To run an experiment, you simply have to setup a [Random Distribution Targeting rule](/platform/feature-flags/targeting/rollouts) and decide roll-out strategy or schedule the launch of the experiment. ## 4. Monitor & Analyze Experiment Results @@ -111,7 +111,7 @@ Once the planned time has passed, you can review the graphs created by the Metri ![Feature Experiment Image](/feature-experiment-full.png) -After you decide which flag variation has the impact you want, you can roll that variation out to 100% of your customers by either [completing the Feature/experiment](/essentials/status-and-lifecycle#completed) or change the experiment targeting rule to serve the winning variation. +After you decide which flag variation has the impact you want, you can roll that variation out to 100% of your customers by either [completing the Feature/experiment](/platform/feature-flags/status-and-lifecycle#completed) or change the experiment targeting rule to serve the winning variation. ## Summary This guide on Product-Led Experimentation in DevCycle explains how to facilitate collaboration between product managers and engineers to conduct experiments, optimize software, and improve user experiences within the DevCycle. diff --git a/docs/best-practices/security/api-keys-secret-scanning.md b/docs/best-practices/security/api-keys-secret-scanning.md index bf655574..ebe3fcb3 100644 --- a/docs/best-practices/security/api-keys-secret-scanning.md +++ b/docs/best-practices/security/api-keys-secret-scanning.md @@ -25,13 +25,13 @@ To maintain the security of your API and SDK keys, follow these best practices: 2. **Limit key access**: Restrict access to your API and SDK keys only to the necessary personnel and services. 3. **Regularly review key usage**: Periodically review the usage of your API and SDK keys to detect any anomalies or unauthorized access. 4. **Rotate keys**: Rotate your API and SDK keys periodically, especially when team members leave the project or in case of a security breach as mentioned above. -5. **Use different keys for different environments**: Use separate API and SDK keys for different environments (e.g., development, staging, and production) to minimize the potential impact of a compromised key. [Luckily, this is made very easy within DevCycle](/essentials/environments) +5. **Use different keys for different environments**: Use separate API and SDK keys for different environments (e.g., development, staging, and production) to minimize the potential impact of a compromised key. [Luckily, this is made very easy within DevCycle](/platform/account-management/environments) ### Understanding SDK Key Types and their security implications DevCycle splits its SDK keys into 3 categories: -1. **Client**: Meant for single-user contexts, these keys are used in SDK's that have a persistent data store for the user while the SDK is being used. Evaluation of Features happens in the Client SDK API Worker, which then returns all valid variables for a given user. These SDKs also include the Mobile SDKs. For more information on the difference between mobile and standard client-side SDK keys, read [API and SDK keys](/essentials/keys). +1. **Client**: Meant for single-user contexts, these keys are used in SDK's that have a persistent data store for the user while the SDK is being used. Evaluation of Features happens in the Client SDK API Worker, which then returns all valid variables for a given user. These SDKs also include the Mobile SDKs. For more information on the difference between mobile and standard client-side SDK keys, read [API and SDK keys](/platform/account-management/keys). These keys are considered safe to be in a client facing application - but should not be checked into source control. 2. **Mobile**: These keys are used for Mobile SDKs and provide read-only access to the features accessible by a given user on your DevCycle environment. They grant access to the DevCycle SDK API, which returns user-customized configurations including feature information that they are permitted to access. These keys are the same degree of severity as the Client SDK Keys - but should be considered safe to be in built mobile application binaries, but not checked into source control. 3. **Server**: Used for server-side SDKs, these keys provide read-only access to the features on your DevCycle environment. They are used for SDKs that make continuous calls to the DevCycle APIs for each SDK interaction per user and have access to the full project configuration data. **These are considered the highest security keys, and should be immediately rotated if compromised.** diff --git a/docs/best-practices/serverless/azure.md b/docs/best-practices/serverless/azure.md index 1f4ea2e4..6f2d50d0 100644 --- a/docs/best-practices/serverless/azure.md +++ b/docs/best-practices/serverless/azure.md @@ -113,7 +113,7 @@ https://github.com/DevCycleHQ/azure-functions-example ![Screen Shot 2022-09-13 at 3.52.40 PM.png](/Screen_Shot_2022-09-13_at_3.52.40_PM.png) -6. Go back to your Azure Portal and set the environment variable `SERVER_KEY` in your function app configuration and save. [You can learn more about SDK keys and where to find them here.](/essentials/keys) +6. Go back to your Azure Portal and set the environment variable `SERVER_KEY` in your function app configuration and save. [You can learn more about SDK keys and where to find them here.](/platform/account-management/keys) ![Screen Shot 2022-09-13 at 3.55.40 PM.png](/Screen_Shot_2022-09-13_at_3.55.40_PM.png) @@ -137,7 +137,7 @@ https://github.com/DevCycleHQ/azure-functions-example ### Enable EdgeDB (NodeJS SDK Version) -[First, you need to enable EdgeDB in the DevCycle Dashboard](/platform/edgedb) +[First, you need to enable EdgeDB in the DevCycle Dashboard](/platform/feature-flags/targeting/edgedb) With the [DevCycle NodeJs SDK](/sdk/server-side-sdks/node) we use the `enableCloudBucketing` and `enableEdgeDB` options to enable EdgeDB usage. ([SDK initialization option details: ](/sdk/server-side-sdks/node/node-gettingstarted#initialization-options)) diff --git a/docs/best-practices/serverless/lambda.md b/docs/best-practices/serverless/lambda.md index 7158f80f..30df33d4 100644 --- a/docs/best-practices/serverless/lambda.md +++ b/docs/best-practices/serverless/lambda.md @@ -50,7 +50,7 @@ The [README in the example repo has more details regarding the Lambda Setup.](ht 1. Clone the [devcycle-lambda-example](https://github.com/DevCycleHQ/devcycle-lambda-example) repo 2. In this example, we are using a **_server_ key.** Copy your server key as the ``  in the `initializeDevCycle` call. - [(You can get your Server SDK key from the DevCycle dashboard)](/essentials/keys) + [(You can get your Server SDK key from the DevCycle dashboard)](/platform/account-management/keys) ```jsx const devcycleClient = await initializeDevCycle( diff --git a/docs/best-practices/serverless/serverless-cloud-functions.md b/docs/best-practices/serverless/serverless-cloud-functions.md index 7cda0fb2..532db2e8 100644 --- a/docs/best-practices/serverless/serverless-cloud-functions.md +++ b/docs/best-practices/serverless/serverless-cloud-functions.md @@ -65,7 +65,7 @@ To set the feature flags, make sure you have a [DevCycle](https://app.devcycle.c ![Screen Shot 2022-09-13 at 11.42.38 AM.png](/Screen_Shot_2022-09-13_at_11.42.38_AM.png) 3. Add the environment variable `SERVER_KEY` under “Runtime environment variables” ([Related Google Doc](https://cloud.google.com/functions/docs/configuring/env-var) -For getting the server-side SDK key from DevCycle, you can read this section ([https://docs.devcycle.com/essentials/keys](/essentials/keys)) +For getting the server-side SDK key from DevCycle, you can read this section ([https://docs.devcycle.com/platform/account-management/keys](/platform/account-management/keys)) ![Screen Shot 2022-09-13 at 11.51.57 AM.png](/Screen_Shot_2022-09-13_at_11.51.57_AM.png) 4. Click “Next” and enter the ([contents of the `index.js` from the example repo](https://github.com/DevCycleHQ/google-cloud-functions-example/blob/main/index.js)) into the Console @@ -100,13 +100,13 @@ EdgeDB is purpose built to work at edge, and when used in conjunction with a ser Here is some more reading: -[What is EdgeDB?](/platform/edgedb) +[What is EdgeDB?](/platform/feature-flags/targeting/edgedb) -[Use Cases of EdgeDB ](/platform/edgedb#use-cases) +[Use Cases of EdgeDB ](/platform/feature-flags/targeting/edgedb#use-cases) ### Enable EdgeDB (NodeJS SDK Version) -First, you need to [enable EdgeDB](/platform/edgedb#setup) in the DevCycle Dashboard +First, you need to [enable EdgeDB](/platform/feature-flags/targeting/edgedb#setup) in the DevCycle Dashboard With the [DevCycle NodeJs SDK ](/sdk/server-side-sdks/node) we use the `enableCloudBucketing` and `enableEdgeDB` options to enable EdgeDB usage. ([SDK initialization option details: ](/sdk/server-side-sdks/node/node-gettingstarted#initialization-options)) diff --git a/docs/best-practices/tech-debt.md b/docs/best-practices/tech-debt.md index ad7b0ab9..8bd1c783 100644 --- a/docs/best-practices/tech-debt.md +++ b/docs/best-practices/tech-debt.md @@ -92,7 +92,7 @@ DevCycle also includes the ability to mark a Feature as "completed", which is a a Feature and fully removing it from your code. Completion allows you to serve a single Variation of the Feature to all users and prevent further changes to its configuration. In this state, DevCycle will ensure your code continues to receive the correct final state of the Feature, like the "released" state of a Release-type Feature. For more information, -see [Feature Status & Lifecycle](/essentials/status-and-lifecycle) +see [Feature Status & Lifecycle](/platform/feature-flags/status-and-lifecycle) The next step is to remove the Feature's Variables from your code, and eventually archive the Feature in DevCycle so that it no longer appears in the list of active Features. diff --git a/docs/cli-guides/targeting.md b/docs/cli-guides/targeting.md index 9def8a49..b2472b08 100644 --- a/docs/cli-guides/targeting.md +++ b/docs/cli-guides/targeting.md @@ -76,10 +76,10 @@ You will be prompted to select a feature, environment and what you would like to You should then select `Add Targeting Rule` and will be prompted to define a Name, Variations to serve and a filter. For this case, if you have not yet created any filters, you should select `Add Filter`. -Here you will be prompted to select a definition of all (for all users), user (to target a specific user based on an identifier like email, country, etc.) or audienceMatch [(see Audiences)](/platform/advanced-targeting/audiences). +Here you will be prompted to select a definition of all (for all users), user (to target a specific user based on an identifier like email, country, etc.) or audienceMatch [(see Audiences)](/platform/feature-flags/targeting/audiences). :::info -Looking to reuse an audience in user targeting for features? Be sure to check out the our documentation explaining how to [create and manage Audiences via our API or within the DevCycle dashboard](/platform/advanced-targeting/audiences). +Looking to reuse an audience in user targeting for features? Be sure to check out the our documentation explaining how to [create and manage Audiences via our API or within the DevCycle dashboard](/platform/feature-flags/targeting/audiences). ::: Once you have chosen your relevant definition select `Continue` (twice) when prompted. If successful you should see a flow which resembles the following (which represents added a new targeting rule to `feature-a` in the `Staging Environment` for any users with the email address that contains `devcycle` and will serve them a variation named `New Variation` ): diff --git a/docs/essentials/_category_.yml b/docs/essentials/_category_.yml index f61e9afa..e3ca2192 100644 --- a/docs/essentials/_category_.yml +++ b/docs/essentials/_category_.yml @@ -1,2 +1,2 @@ label: 'Essentials' -position: 3 +position: 2 diff --git a/docs/introduction/architecture.md b/docs/essentials/architecture.md similarity index 98% rename from docs/introduction/architecture.md rename to docs/essentials/architecture.md index 1a3fa35f..95e68acf 100644 --- a/docs/introduction/architecture.md +++ b/docs/essentials/architecture.md @@ -82,7 +82,7 @@ and configuration data locally to bucket users into features and variations to d For most use cases, local bucketing SDKs provide superior performance and reliability. However, the cloud-bucketing SDKs can make integration easier for specific use cases where access to -[EdgeDB](/platform/edgedb) to integrate user data between client-side and backend applications is needed. +[EdgeDB](/platform/feature-flags/targeting/edgedb) to integrate user data between client-side and backend applications is needed. 1. On each `variableValue()` / `variable()` call, the Cloud Bucketing Server SDKs fetch data from the [Bucketing API](/bucketing-api/) served by Cloudflare Workers at the edge. diff --git a/docs/introduction/core-concepts/feature-hierarchy.md b/docs/essentials/feature-hierarchy.md similarity index 95% rename from docs/introduction/core-concepts/feature-hierarchy.md rename to docs/essentials/feature-hierarchy.md index 4bdca796..c315b1f4 100644 --- a/docs/introduction/core-concepts/feature-hierarchy.md +++ b/docs/essentials/feature-hierarchy.md @@ -1,6 +1,6 @@ --- title: Feature Hierarchy -sidebar_position: 1 +sidebar_position: 4 --- In a traditional feature flagging platform, there is only one type of entity to worry about: a `feature flag`! In these platforms, a `feature flag` contains the targeting rules and possible values for its respective key, all rolled into one. @@ -40,7 +40,7 @@ For more detail on each of these concepts, see below. Variables are the main "primitive" that you interact with using the DevCycle SDK. A `Variable` is identified by a unique `key`, has a particular data type, and can optionally be defined with a -more specific [schema](/platform/advanced-variables/variable-schemas) of possible allowed values. +more specific [schema](/platform/security-and-guardrails/variable-schemas) of possible allowed values. > Variables may be the following types: `Boolean`, `JSON`, `Number`, or `String`. @@ -71,7 +71,7 @@ A `Feature` can most simply be thought of as a "new product feature", but could > By default, upon creation of a Feature, a Boolean Variable will be created which has the same name as the Feature's key for easier reference. Variables cannot be used in multiple existing Features, so their keys must be unique. The Variable Type helps enforce consistent usage across the team to avoid type mismatches in different use cases. -When creating a Feature in the DevCycle, you will be able to choose a [Feature Type](/introduction/core-concepts/feature-types) which will pre-fill some options in the Feature and help kick-start your usage of the Feature. +When creating a Feature in the DevCycle, you will be able to choose a [Feature Type](/essentials/feature-types) which will pre-fill some options in the Feature and help kick-start your usage of the Feature. ## Variations diff --git a/docs/introduction/core-concepts/feature-types.md b/docs/essentials/feature-types.md similarity index 99% rename from docs/introduction/core-concepts/feature-types.md rename to docs/essentials/feature-types.md index fc3583ef..c9a58350 100644 --- a/docs/introduction/core-concepts/feature-types.md +++ b/docs/essentials/feature-types.md @@ -1,6 +1,6 @@ --- title: Feature Types -sidebar_position: 2 +sidebar_position: 5 --- Feature Types within the DevCycle dashboard are a way of describing and handling Feature Toggles / Feature Flags in more complex and diverse ways. diff --git a/docs/introduction/key-features.md b/docs/essentials/key-features.md similarity index 81% rename from docs/introduction/key-features.md rename to docs/essentials/key-features.md index e7d0c242..2810a8b6 100644 --- a/docs/introduction/key-features.md +++ b/docs/essentials/key-features.md @@ -13,9 +13,9 @@ Here are the core concepts and features behind them that we think make us differ For feature flagging to be effective, all team members need to be able to operate without fear of breaking production. We use a balance of guardrails, permissions and observability to ensure all users have confidence in the actions they are taking. Here's how: -- Govern who can modify flags in production using [Permissions](/platform/permissions). -- Allow non-technical users to modify flag values safely, by enforcing [schemas](/platform/advanced-variables/variable-schemas). -- Easily see a [detailed history](/platform/audit-log) of all changes to flags. +- Govern who can modify flags in production using [Permissions](/platform/security-and-guardrails/permissions). +- Allow non-technical users to modify flag values safely, by enforcing [schemas](/platform/security-and-guardrails/variable-schemas). +- Easily see a [detailed history](/platform/security-and-guardrails/audit-log) of all changes to flags. - Write type-safe code using our [Code Generators](/sdk/client-side-sdks/javascript/javascript-typescript). - Ensure a predictable process for changing flags using Gitops and [Terraform](/integrations/terraform). @@ -25,16 +25,16 @@ Excellent developer tools reduce context-switching away from code as much as pos Here's how: - Use the [CLI](/cli) and [Editor Plugins](/integrations#ide-plugins) to manage flags without interrupting your work. - Detect and jump to flag usages in code, and quickly see whether flags are enabled in each environment. -- [Override](/platform/advanced-targeting/self-targeting) your own flag values for development or testing in production. +- [Override](/platform/testing-and-qa/self-targeting) your own flag values for development or testing in production. ## Feature Flagging is a Team Sport Feature flags are most valuable when all team members are part of the process. A feature flag's purpose, state and impact should be obvious and discoverable to all users. Here's how: - We never [bill](https://devcycle.com/pricing) on seats. -- Group multiple related flags and change their values together using [Features](/introduction/core-concepts/feature-hierarchy). +- Group multiple related flags and change their values together using [Features](/essentials/feature-hierarchy). - Link your flags to productivity tools like [Jira](/integrations/jira) or [Slack](/integrations/slack). -- Safely QA your flags in development or right in production with [Self-Targeting](/platform/advanced-targeting/self-targeting). +- Safely QA your flags in development or right in production with [Self-Targeting](/platform/testing-and-qa/self-targeting). ## Features Aren't Complete Until Flags Have Been Removed Old, unused flags are tech-debt that create operational risk. This means that the process of removing flags is as important as creating them. @@ -42,20 +42,20 @@ Old, unused flags are tech-debt that create operational risk. This means that th Here's how you can keep your feature flagging environment clean in DevCycle: - Keep on top of which flags are actually being used in your codebase with [Code Usage Detection](/best-practices/tech-debt#code-usages). -- Mark flags as "[completed](/essentials/status-and-lifecycle)" when a feature is released. +- Mark flags as "[completed](/platform/feature-flags/status-and-lifecycle)" when a feature is released. - Automatically remove your flags with our [CLI Cleanup](/cli/docs/cleanup) command. ## Let Us Manage User Data Modern architecture means distributed systems running at the edge. Relevant targeting data isn't always available in all systems or services. So we've built ways to keep our platform fast while managing targeting data for you. Here's how: -- Store user attributes in a [fast, globally-replicated database](/platform/edgedb) and target flags based on those attributes. -- Easily add a full [feature opt-in](/platform/advanced-targeting/feature-opt-in) experience to your application to allow end users to control their experience. +- Store user attributes in a [fast, globally-replicated database](/platform/feature-flags/targeting/edgedb) and target flags based on those attributes. +- Easily add a full [feature opt-in](/platform/extras/feature-opt-in) experience to your application to allow end users to control their experience. ## Integrate with Any Other Tool Feature flagging is better when integrated into the rest of your critical tools. While we have a selection of [integrations](/integrations) built and ready for you to install, we understand you may need other integrations so we've made DevCycle as extensible as possible. See how to integrate your own tools: -- Notify external systems of changes to your flags using [Outbound Webhooks](/platform/webhooks). +- Notify external systems of changes to your flags using [Outbound Webhooks](/platform/extras/webhooks). - See changes in your [monitoring systems](/integrations#observability) and alert on potential issues. - A complete [API](/management-api) and [CLI](/cli) are available to run automations or scripts as necessary. diff --git a/docs/essentials/overview.md b/docs/essentials/overview.md index a4ca8128..2fe96f61 100644 --- a/docs/essentials/overview.md +++ b/docs/essentials/overview.md @@ -106,7 +106,7 @@ By default, Bucketing is performed consistently on DevCycle by leveraging a hash ## A/B Testing & Experimentation -Experimentation and A/B Testing are important parts of a Feature’s lifecycle. Experiments can be as simple as comparing any audiences against a metric or can be fully [randomized](https://docs.devcycle.com/essentials/targeting#serving-a-random-variation-experimentation--random-distribution) A/B tests using statistical methodologies. +Experimentation and A/B Testing are important parts of a Feature’s lifecycle. Experiments can be as simple as comparing any audiences against a metric or can be fully [randomized](https://docs.devcycle.com/platform/feature-flags/targeting/random-variations) A/B tests using statistical methodologies. The primary concept of an experiment is the need to have at least two different experiences to compare performance. Any Feature in DevCycle can be turned into an experiment, and it only requires the following: diff --git a/docs/index.mdx b/docs/index.mdx index 277a28a9..5a964e23 100644 --- a/docs/index.mdx +++ b/docs/index.mdx @@ -24,13 +24,13 @@ DevCycle is a feature flag platform built for teams of any size, helping you eas With tons of built-in features, DevCycle is ready to add to your project today! -**[Follow our Quickstart](/introduction/quickstart) to learn how everything works, or [install an SDK](sdk) for your favorite language to start adding feature flags to a new or existing project.** +**[Follow our Quickstart](/quickstart) to learn how everything works, or [install an SDK](sdk) for your favorite language to start adding feature flags to a new or existing project.**