From 66d792c76a9329140f5d3b35e15243c51bb5e2b6 Mon Sep 17 00:00:00 2001 From: leslie-lau Date: Mon, 28 Oct 2024 18:09:23 -0400 Subject: [PATCH 1/9] Restructure Nav Bar and add redirects --- .../edge-db-via-api-simple.md | 2 +- .../import-from-anywhere.md | 6 +- .../engineering-led-experiments.md | 16 ++--- docs/best-practices/feature-grouping.md | 12 ++-- .../product-led-experimentation.md | 26 ++++---- .../security/api-keys-secret-scanning.md | 4 +- docs/best-practices/serverless/azure.md | 4 +- docs/best-practices/serverless/lambda.md | 2 +- .../serverless/serverless-cloud-functions.md | 8 +-- docs/best-practices/tech-debt.md | 2 +- docs/cli-guides/targeting.md | 4 +- docs/essentials/_category_.yml | 2 +- .../architecture.md | 2 +- docs/essentials/features.md | 12 ++-- .../key-features.md | 18 +++--- docs/essentials/overview.md | 2 +- docs/essentials/targeting/_category_.yml | 2 + .../targeting}/audiences.md | 2 +- .../targeting}/custom-properties.md | 8 +-- .../targeting}/edgedb.md | 2 +- .../targeting}/random-variations.md | 2 +- .../randomize-using-custom-property.md | 4 +- .../targeting}/rollouts.md | 4 +- .../targeting}/self-targeting.md | 2 +- .../targeting-overview.md} | 20 +++--- .../variables-and-variations/_category_.yml | 2 + .../feature-flag-reach.md | 2 +- .../variable-defaults.md | 2 +- .../variable-schemas.md | 2 +- .../variables.md | 8 +-- .../variations.md | 6 +- docs/index.mdx | 2 +- docs/introduction/quickstart.md | 10 +-- docs/platform/_category_.yml | 2 +- .../account-management/_category_.yml | 2 + .../account-management}/environments.md | 6 +- .../account-management}/keys.md | 4 +- .../account-management}/organizations.md | 10 +-- .../account-management}/projects.md | 4 +- docs/platform/custom-domains.md | 2 +- docs/platform/experimentation/_category_.yml | 2 + .../creating-and-managing-metrics.md | 14 ++-- .../feature-experimentation.md | 8 +-- .../how-metrics-are-calculated.md | 2 +- .../platform/feature-managment/_category_.yml | 2 + .../feature-managment}/feature-hierarchy.md | 4 +- .../feature-managment}/feature-types.md | 0 .../status-and-lifecycle.md | 4 +- .../security-and-guardrails/_category_.yml | 2 + .../approval-workflows.md | 4 +- .../audit-log.md | 8 +-- .../feature-obfuscation.md | 4 +- .../permissions.md | 4 +- .../sdk-visibility.md | 0 .../variable-schemas.md | 64 +++++++++++++++++++ docs/platform/testing-and-qa/_category_.yml | 2 + .../feature-opt-in.mdx | 2 +- .../platform/testing-and-qa/self-targeting.md | 32 ++++++++++ .../{ => testing-and-qa}/web-debugger.mdx | 4 +- docs/platform/webhooks.md | 2 +- .../client-side-sdks/android/android-usage.md | 2 +- .../client-side-sdks/flutter/flutter-usage.md | 2 +- docs/sdk/client-side-sdks/ios/ios-usage.md | 2 +- .../javascript/javascript-typescript.md | 2 +- .../react/react-typescript.md | 2 +- .../sdk/client-side-sdks/react/react-usage.md | 2 +- docs/sdk/client-side-sdks/roku/roku-usage.md | 2 +- docs/sdk/features.md | 14 ++-- .../server-side-sdks/dotnet/dotnet-usage.md | 2 +- docs/sdk/server-side-sdks/dotnet/dotnet.md | 2 +- docs/sdk/server-side-sdks/go/go-usage.md | 2 +- docs/sdk/server-side-sdks/go/go.md | 2 +- docs/sdk/server-side-sdks/java/java-usage.md | 2 +- docs/sdk/server-side-sdks/java/java.md | 2 +- docs/sdk/server-side-sdks/node/node-usage.md | 2 +- docs/sdk/server-side-sdks/node/node.md | 2 +- docs/sdk/server-side-sdks/php/php-usage.md | 2 +- docs/sdk/server-side-sdks/php/php.md | 2 +- .../server-side-sdks/python/python-usage.md | 2 +- docs/sdk/server-side-sdks/python/python.md | 2 +- docs/sdk/server-side-sdks/ruby/ruby-usage.md | 2 +- docs/sdk/server-side-sdks/ruby/ruby.md | 2 +- sidebars.js | 2 +- vercel.json | 62 ++++++++++++++---- 84 files changed, 333 insertions(+), 183 deletions(-) rename docs/{introduction => essentials}/architecture.md (98%) rename docs/{introduction => essentials}/key-features.md (82%) create mode 100644 docs/essentials/targeting/_category_.yml rename docs/{platform/advanced-targeting => essentials/targeting}/audiences.md (99%) rename docs/{platform/advanced-targeting => essentials/targeting}/custom-properties.md (96%) rename docs/{platform => essentials/targeting}/edgedb.md (99%) rename docs/{platform/advanced-targeting => essentials/targeting}/random-variations.md (99%) rename docs/{platform/advanced-targeting => essentials/targeting}/randomize-using-custom-property.md (78%) rename docs/{platform/advanced-targeting => essentials/targeting}/rollouts.md (98%) rename docs/{platform/advanced-targeting => essentials/targeting}/self-targeting.md (99%) rename docs/essentials/{targeting.md => targeting/targeting-overview.md} (94%) create mode 100644 docs/essentials/variables-and-variations/_category_.yml rename docs/{platform/metrics => essentials/variables-and-variations}/feature-flag-reach.md (98%) rename docs/{platform/advanced-variables => essentials/variables-and-variations}/variable-defaults.md (99%) rename docs/{platform/advanced-variables => essentials/variables-and-variations}/variable-schemas.md (99%) rename docs/essentials/{ => variables-and-variations}/variables.md (95%) rename docs/essentials/{ => variables-and-variations}/variations.md (88%) create mode 100644 docs/platform/account-management/_category_.yml rename docs/{essentials => platform/account-management}/environments.md (97%) rename docs/{essentials => platform/account-management}/keys.md (97%) rename docs/{essentials => platform/account-management}/organizations.md (92%) rename docs/{essentials => platform/account-management}/projects.md (83%) create mode 100644 docs/platform/experimentation/_category_.yml rename docs/platform/{metrics => experimentation}/creating-and-managing-metrics.md (96%) rename docs/{essentials => platform/experimentation}/feature-experimentation.md (98%) rename docs/platform/{metrics => experimentation}/how-metrics-are-calculated.md (99%) create mode 100644 docs/platform/feature-managment/_category_.yml rename docs/{introduction/core-concepts => platform/feature-managment}/feature-hierarchy.md (95%) rename docs/{introduction/core-concepts => platform/feature-managment}/feature-types.md (100%) rename docs/{essentials => platform/feature-managment}/status-and-lifecycle.md (96%) create mode 100644 docs/platform/security-and-guardrails/_category_.yml rename docs/platform/{ => security-and-guardrails}/approval-workflows.md (94%) rename docs/platform/{ => security-and-guardrails}/audit-log.md (80%) rename docs/platform/{ => security-and-guardrails}/feature-obfuscation.md (98%) rename docs/platform/{ => security-and-guardrails}/permissions.md (92%) rename docs/platform/{ => security-and-guardrails}/sdk-visibility.md (100%) create mode 100644 docs/platform/security-and-guardrails/variable-schemas.md create mode 100644 docs/platform/testing-and-qa/_category_.yml rename docs/platform/{advanced-targeting => testing-and-qa}/feature-opt-in.mdx (99%) create mode 100644 docs/platform/testing-and-qa/self-targeting.md rename docs/platform/{ => testing-and-qa}/web-debugger.mdx (95%) 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..5e11d7bf 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](/essentials/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.](/essentials/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..1bac5084 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](/essentials/variables-and-variations/variations) +- [Random Distribution Targeting](/essentials/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..7abe7099 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](essentials/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](/essentials/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](/essentials/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](/essentials/targeting/targeting-overview). ::: @@ -90,4 +90,4 @@ Here are similar resources to help with organizing Feature Flags: - [Feature Types](/essentials/features) - [Effectively Organizing Your Feature Flags](/best-practices/effectively-organizing-feature-flags) -- [Creating Variables & Variations](/essentials/variables) +- [Creating Variables & Variations](/essentials/variables-and-variations/variables) diff --git a/docs/best-practices/product-led-experimentation.md b/docs/best-practices/product-led-experimentation.md index 94440a28..e4fbe227 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](/platform/feature-management/feature-hierarchy) +- [Creating and Managing Variations](/essentials/variables-and-variations/variations) +- [Random Distribution Targeting](/essentials/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](/essentials/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](/platform/feature-management/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](/essentials/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-management/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..25ffa175 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](/essentials/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..e48fce41 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?](/essentials/targeting/edgedb) -[Use Cases of EdgeDB ](/platform/edgedb#use-cases) +[Use Cases of EdgeDB ](/essentials/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](/essentials/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..923bae64 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-management/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..c198d523 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)](/essentials/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](/essentials/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..f31da9e7 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](/essentials/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/essentials/features.md b/docs/essentials/features.md index bcf7316c..9a765698 100644 --- a/docs/essentials/features.md +++ b/docs/essentials/features.md @@ -6,7 +6,7 @@ sidebar_class_name: hidden > Features are the main elements that you want to control or experiment with in your application. They can be anything from a new UI element to a backend algorithm. :::info -When creating a Feature in 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 DevCycle, you will be able to choose a [Feature Type](/platform/feature-management/feature-types) which will pre-fill some options in the Feature and help kick-start your usage of the Feature. ::: --- @@ -18,11 +18,11 @@ The Feature Dashboard is where all of your features can be viewed, edited, and f | Column | Description | |--------|----------------------------| | Creator | This will show the icon of the user who created this Feature. | -| Status | The Feature's Current [Status](/essentials/status-and-lifecycle). This indicates the Feature's current position in the Development [LifeCycle](/essentials/status-and-lifecycle). | +| Status | The Feature's Current [Status](/platform/feature-management/status-and-lifecycle). This indicates the Feature's current position in the Development [LifeCycle](/platform/feature-management/status-and-lifecycle). | | Name | The Feature's name. This can be changed at any time by editing the Feature. | | Key | This is the feature's Key. Use this key to reference the Feature in the SDKs or APIs. | | Feature type | The selected type of the Feature. Use this to organize your Features. | -| # Of Variables | This will show a count of how many variables are used within this Feature. To learn more read [Creating Variables and Variations](/essentials/variables) | +| # Of Variables | This will show a count of how many variables are used within this Feature. To learn more read [Creating Variables and Variations](/essentials/variables-and-variations/variables) | | Edit | Click this to edit on the row the Feature. | Use the search input to search by Name, Key, or Description. The filters can be used to filter by Type or Creator. Each column header can be clicked to sort the column. @@ -37,7 +37,7 @@ Use the search input to search by Name, Key, or Description. The filters can be From this page, you can create a Feature Flag by clicking "Create New Feature" or the `+` in the top bar. -A screen for deciding your Feature Type will now appear. To read more about the feature types and their uses, read [DevCycle Feature Types](/introduction/core-concepts/feature-types). +A screen for deciding your Feature Type will now appear. To read more about the feature types and their uses, read [DevCycle Feature Types](/platform/feature-management/feature-types). After choosing a type, the information modal will appear prompting you to enter the following information: @@ -80,9 +80,9 @@ Feature settings including name, key, and type can be changed from feature page ## Archiving a Feature -Archiving is the terminal state for Features that have reached the end of their lifecycle, were never implemented in code, or have become entirely obsolete. See [Status & Lifecyle](/essentials/status-and-lifecycle) for more information on how to manage Feature Lifecycles in DevCycle. +Archiving is the terminal state for Features that have reached the end of their lifecycle, were never implemented in code, or have become entirely obsolete. See [Status & Lifecyle](/platform/feature-management/status-and-lifecycle) for more information on how to manage Feature Lifecycles in DevCycle. -Upon Archive, the Feature is put into a read-only mode, and its Audit Logs are accessible and available for teams to review. All [Variables](/essentials/variables) will be archived along with the Feature *but* can be re-used and associated to other Features. All Variables in this Feature will begin to serve Default values in code. +Upon Archive, the Feature is put into a read-only mode, and its Audit Logs are accessible and available for teams to review. All [Variables](/essentials/variables-and-variations/variables) will be archived along with the Feature *but* can be re-used and associated to other Features. All Variables in this Feature will begin to serve Default values in code. This action cannot be undone. diff --git a/docs/introduction/key-features.md b/docs/essentials/key-features.md similarity index 82% rename from docs/introduction/key-features.md rename to docs/essentials/key-features.md index e7d0c242..c280032b 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](/essentials/variables-and-variations/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](/platform/feature-management/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,15 +42,15 @@ 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-management/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](/essentials/targeting/edgedb) and target flags based on those attributes. +- Easily add a full [feature opt-in](/platform/testing-and-qa/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. diff --git a/docs/essentials/overview.md b/docs/essentials/overview.md index a4ca8128..de256a51 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/essentials/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/essentials/targeting/_category_.yml b/docs/essentials/targeting/_category_.yml new file mode 100644 index 00000000..b8ee357f --- /dev/null +++ b/docs/essentials/targeting/_category_.yml @@ -0,0 +1,2 @@ +label: 'Targeting' +position: 5 diff --git a/docs/platform/advanced-targeting/audiences.md b/docs/essentials/targeting/audiences.md similarity index 99% rename from docs/platform/advanced-targeting/audiences.md rename to docs/essentials/targeting/audiences.md index 70d04a69..add78c08 100644 --- a/docs/platform/advanced-targeting/audiences.md +++ b/docs/essentials/targeting/audiences.md @@ -1,6 +1,6 @@ --- title: Audiences -sidebar_position: 5 +sidebar_position: 2 --- This topic explains how to create and manage Audiences via our API or within the DevCycle dashboard. diff --git a/docs/platform/advanced-targeting/custom-properties.md b/docs/essentials/targeting/custom-properties.md similarity index 96% rename from docs/platform/advanced-targeting/custom-properties.md rename to docs/essentials/targeting/custom-properties.md index 381b8418..f328aba7 100644 --- a/docs/platform/advanced-targeting/custom-properties.md +++ b/docs/essentials/targeting/custom-properties.md @@ -1,9 +1,9 @@ --- title: Custom Properties -sidebar_position: 4 +sidebar_position: 3 --- -Custom Properties are properties on a user which can be used for [Targeting Users for Features](/essentials/targeting). +Custom Properties are properties on a user which can be used for [Targeting Users for Features](/essentials/targeting/targeting-overview). These properties are set on the user data that you provide to DevCycle when [identifying a user](https://docs.devcycle.com/sdk/features#identifying-a-user-or-setting-properties) in the SDK. @@ -40,7 +40,7 @@ Every time you identify a particular user, you must pass the custom data into th DevCycle's EdgeDB feature enables the saving of user data into DevCycle's EdgeDB storage, allowing you to segment by custom properties without having to repeatedly pass the same data to the SDK. -[View our EdgeDB docs to find out how it works](/platform/edgedb). +[View our EdgeDB docs to find out how it works](/essentials/targeting/edgedb). ::: @@ -95,7 +95,7 @@ Once a property has been created, it will be accessible in the definition dropdo ![property type open](/march-2022-property-dropdown-with-properties.png) -First, select your property to use it like any other targeting definition as outlined in [Targeting Users](/essentials/targeting) +First, select your property to use it like any other targeting definition as outlined in [Targeting Users](/essentials/targeting/targeting-overview) Then, finish your Targeting Rule by filling out the comparator and the value fields. diff --git a/docs/platform/edgedb.md b/docs/essentials/targeting/edgedb.md similarity index 99% rename from docs/platform/edgedb.md rename to docs/essentials/targeting/edgedb.md index 7001ad54..163e3401 100644 --- a/docs/platform/edgedb.md +++ b/docs/essentials/targeting/edgedb.md @@ -1,6 +1,6 @@ --- title: EdgeDB (Stored Custom Properties) -sidebar_position: 4 +sidebar_position: 8 --- # EdgeDB and Stored Custom Properties diff --git a/docs/platform/advanced-targeting/random-variations.md b/docs/essentials/targeting/random-variations.md similarity index 99% rename from docs/platform/advanced-targeting/random-variations.md rename to docs/essentials/targeting/random-variations.md index b8821b8e..758f38a6 100644 --- a/docs/platform/advanced-targeting/random-variations.md +++ b/docs/essentials/targeting/random-variations.md @@ -1,6 +1,6 @@ --- title: Random Variations -sidebar_position: 1 +sidebar_position: 4 --- ## Serving a Random Variation diff --git a/docs/platform/advanced-targeting/randomize-using-custom-property.md b/docs/essentials/targeting/randomize-using-custom-property.md similarity index 78% rename from docs/platform/advanced-targeting/randomize-using-custom-property.md rename to docs/essentials/targeting/randomize-using-custom-property.md index cbd47df4..c09beee3 100644 --- a/docs/platform/advanced-targeting/randomize-using-custom-property.md +++ b/docs/essentials/targeting/randomize-using-custom-property.md @@ -16,12 +16,12 @@ To use this functionality in conjunction with Server-Side SDKs you must ensure y DevCycle uses User ID as the primary key for delivering variations, rolling out a feature, and randomizing distribution. However, there are cases in which a User ID is not the primary identifier of the request to DVC, thus making the usage of DevCycle features, specifically Gradual Rollouts, difficult in these scenarios. -This functionality allows you to set a [Custom Property](docs/platform/advanced-targeting/custom-properties.md) as the key to roll out / distribute on rather than User ID, such as Account, Organization, Tenant or Store ID. For example, at DevCycle, we would use this feature to gradually roll out new functionality on an organization-by-organization basis rather than on a user-by-user basis to ensure all users in the org see the same features. +This functionality allows you to set a [Custom Property](docs/essentials/targeting/custom-properties.md) as the key to roll out / distribute on rather than User ID, such as Account, Organization, Tenant or Store ID. For example, at DevCycle, we would use this feature to gradually roll out new functionality on an organization-by-organization basis rather than on a user-by-user basis to ensure all users in the org see the same features. ## Setting Up a Targeting Rule using an Custom Property for Randomization Since this functionality is only relevant in specific Targeting Rule use cases, the option to randomize using a Custom Property will only appear when you: -* Serve `Random Distribution` (ie. [run an experiment](/essentials/feature-experimentation#experimentation-using-a-custom-property-for-randomization)) +* Serve `Random Distribution` (ie. [run an experiment](/platform/experimentation/feature-experimentation#experimentation-using-a-custom-property-for-randomization)) * Select a `Gradual Rollout` * Select a `Multi-Step Rollout` diff --git a/docs/platform/advanced-targeting/rollouts.md b/docs/essentials/targeting/rollouts.md similarity index 98% rename from docs/platform/advanced-targeting/rollouts.md rename to docs/essentials/targeting/rollouts.md index b5369619..0ed46e7b 100644 --- a/docs/platform/advanced-targeting/rollouts.md +++ b/docs/essentials/targeting/rollouts.md @@ -1,6 +1,6 @@ --- title: Scheduling & Rollouts -sidebar_position: 2 +sidebar_position: 5 --- ## Scheduling a Feature @@ -102,7 +102,7 @@ the user will *still* not receive a later target. :::info -For modifications to or additions of a gradual roll-out, entries in the [Audit Log](/platform/audit-log) will be marked as `Stage 1` and labelled as a `Linear` roll-out. +For modifications to or additions of a gradual roll-out, entries in the [Audit Log](/platform/security-and-guardrails/audit-log) will be marked as `Stage 1` and labelled as a `Linear` roll-out. ::: diff --git a/docs/platform/advanced-targeting/self-targeting.md b/docs/essentials/targeting/self-targeting.md similarity index 99% rename from docs/platform/advanced-targeting/self-targeting.md rename to docs/essentials/targeting/self-targeting.md index b226594f..f2a6c949 100644 --- a/docs/platform/advanced-targeting/self-targeting.md +++ b/docs/essentials/targeting/self-targeting.md @@ -1,6 +1,6 @@ --- title: Self-Targeting -sidebar_position: 3 +sidebar_position: 6 --- Self-Targeting is a DevCycle QA & debugging feature that allows you to easily serve yourself different variations of a feature without having to modify targeting rules in each environment. To leverage this feature, you must set up your DevCycle Identity by associating an SDK User ID to your DevCycle user profile. diff --git a/docs/essentials/targeting.md b/docs/essentials/targeting/targeting-overview.md similarity index 94% rename from docs/essentials/targeting.md rename to docs/essentials/targeting/targeting-overview.md index c352346e..95bd1166 100644 --- a/docs/essentials/targeting.md +++ b/docs/essentials/targeting/targeting-overview.md @@ -1,6 +1,6 @@ --- -title: Targeting -sidebar_position: 5 +title: Targeting Overview +sidebar_position: 1 --- Targeting rules can be used to grant features to specific user groups, @@ -8,11 +8,11 @@ incrementally roll out features for monitoring, or create and test different fea :::tip Already understand the targeting essentials? Be sure to check out our advanced targeting documentation which covers topics like: -- [Audiences](/platform/advanced-targeting/audiences) -- [Custom Properties](/platform/advanced-targeting/custom-properties) -- [Random Variations](/platform/advanced-targeting/random-variations) -- [Rollouts](/platform/advanced-targeting/rollouts) -- [Self-Targeting](/platform/advanced-targeting/self-targeting) +- [Audiences](/essentials/targeting/audiences) +- [Custom Properties](/essentials/targeting/custom-properties) +- [Random Variations](/essentials/targeting/random-variations) +- [Rollouts](/essentials/targeting/rollouts) +- [Self-Targeting](/platform/testing-and-qa/self-targeting) ::: ## Targeting Properties @@ -35,7 +35,7 @@ Below is a summary of the properties built into the platform, and how to specify | Country | Country the user is located in. Must be a valid 2 letter [ISO-3166 country code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) | Set "country" property | In addition to these built-in properties, you can specify any other property that suits your needs using the -[Custom Properties](/platform/advanced-targeting/custom-properties) feature. +[Custom Properties](/essentials/targeting/custom-properties) feature. Here is an example of a user object being passed to an SDK with these properties set: ```typescript @@ -147,13 +147,13 @@ From here you will be able to enable or disable the specific targeting rule by c :::tip -Looking to use DevCycle to help you QA a new feature? Be sure to check out [Self-Targeting](/platform/advanced-targeting/self-targeting). +Looking to use DevCycle to help you QA a new feature? Be sure to check out [Self-Targeting](/platform/testing-and-qa/self-targeting). ::: On the features dashboard page, select `Users & Targeting` from the left hand menu and choose which [environment](/essentials/overview#environments) it should apply to. If a feature is toggled `ON` for an environment, the rules defined within the environment will be followed. -Once the targeting rule is defined, the next step is to determine what Variation users targeted by this rule should receive. Note: The available variations will be determined by the chosen Feature Type, however, [these can](/essentials/variables) be modified and more variations can be added at any time. +Once the targeting rule is defined, the next step is to determine what Variation users targeted by this rule should receive. Note: The available variations will be determined by the chosen Feature Type, however, [these can](/essentials/variables-and-variations/variations) be modified and more variations can be added at any time. To choose the Variation for this targeted audience, use the "Serve" dropdown and choose the desired variation. When the environment is enabled, and if a user fulfills the targeting rule, they will then be served that variation and its associated variable values. diff --git a/docs/essentials/variables-and-variations/_category_.yml b/docs/essentials/variables-and-variations/_category_.yml new file mode 100644 index 00000000..52a71a05 --- /dev/null +++ b/docs/essentials/variables-and-variations/_category_.yml @@ -0,0 +1,2 @@ +label: 'Variables and Variations' +position: 4 diff --git a/docs/platform/metrics/feature-flag-reach.md b/docs/essentials/variables-and-variations/feature-flag-reach.md similarity index 98% rename from docs/platform/metrics/feature-flag-reach.md rename to docs/essentials/variables-and-variations/feature-flag-reach.md index 44c92bab..7c38307c 100644 --- a/docs/platform/metrics/feature-flag-reach.md +++ b/docs/essentials/variables-and-variations/feature-flag-reach.md @@ -1,6 +1,6 @@ --- title: Feature Flag Reach -sidebar_position: 1 +sidebar_position: 5 --- When a Feature is running, DevCycle automatically provides a quick way to view how the feature is running across all SDKs or APIs it is being used in by breaking down by variable. This document serves to explain this section in more depth. diff --git a/docs/platform/advanced-variables/variable-defaults.md b/docs/essentials/variables-and-variations/variable-defaults.md similarity index 99% rename from docs/platform/advanced-variables/variable-defaults.md rename to docs/essentials/variables-and-variations/variable-defaults.md index 77036c23..8c7d1c5c 100644 --- a/docs/platform/advanced-variables/variable-defaults.md +++ b/docs/essentials/variables-and-variations/variable-defaults.md @@ -1,6 +1,6 @@ --- title: Variable Defaults -sidebar_position: 2 +sidebar_position: 3 --- Variable defaults are the values you provide in code which tell DevCycle SDKs what value to assign to a Variable in diff --git a/docs/platform/advanced-variables/variable-schemas.md b/docs/essentials/variables-and-variations/variable-schemas.md similarity index 99% rename from docs/platform/advanced-variables/variable-schemas.md rename to docs/essentials/variables-and-variations/variable-schemas.md index f6233118..713c4f23 100644 --- a/docs/platform/advanced-variables/variable-schemas.md +++ b/docs/essentials/variables-and-variations/variable-schemas.md @@ -1,6 +1,6 @@ --- title: Variable Schemas -sidebar_position: 1 +sidebar_position: 4 --- Variable Schemas is a new DevCycle feature that lets you define allowable values for your variables when creating feature variations. Variable Schemas help developers ensure that team members can easily select allowable inputs for variable values without being nervous that a certain value might cause an application crash or negatively impact end user experience. diff --git a/docs/essentials/variables.md b/docs/essentials/variables-and-variations/variables.md similarity index 95% rename from docs/essentials/variables.md rename to docs/essentials/variables-and-variations/variables.md index 56dbf2ca..e3bfa15a 100644 --- a/docs/essentials/variables.md +++ b/docs/essentials/variables-and-variations/variables.md @@ -1,6 +1,6 @@ --- title: Variables -sidebar_position: 4 +sidebar_position: 1 --- Variables are the elements that can change within a Feature. @@ -11,7 +11,7 @@ By default, upon creation of a Feature, a `Boolean Variable`` will be created wh :::tip Already understand the variable essentials? Be sure to check out our advanced variable documentation which covers topics like: -- [Variable Schemas](/platform/advanced-variables/variable-schemas) +- [Variable Schemas](/essentials/variables-and-variations/variable-schemas) ::: --- @@ -26,7 +26,7 @@ On the Feature page, there are indicators for each Variable that inform you of t - if a Variable has been seen in code (if [Code References](/integrations/github/feature-usage-action) have been enabled) - if evaluations have been seen -These indicators are helpful when setting up features. They help to confirm proper setup, and aid in Variable cleanup once a Feature has completed it's [lifecycle](/essentials/status-and-lifecycle). +These indicators are helpful when setting up features. They help to confirm proper setup, and aid in Variable cleanup once a Feature has completed it's [lifecycle](/platform/feature-management/status-and-lifecycle). Hover over these indicators for more detail about a Variable's code references & evaluation information. @@ -47,7 +47,7 @@ To navigate to this page, use the `Variables` button on DevCycle dashboard's top | | | |--------|----------------------------| | **Variable Name** | The name given to the Variable upon its creation | -| **Feature** | The name of the Feature that is currently managing a variable. **Note** that Variables can only be managed by a single Feature at a time. If you wish to change what Feature is managing a Variable, first remove that Variable from a feature as outlined in [Creating Variables and Variations](/essentials/variables). If the Variable is NOT being managed by a Feature, this column will note the lack of Feature. **Click on a Feature name to navigate directly to the Feature managing this Variable** | +| **Feature** | The name of the Feature that is currently managing a variable. **Note** that Variables can only be managed by a single Feature at a time. If you wish to change what Feature is managing a Variable, first remove that Variable from a feature as outlined in [Creating Variables and Variations](/essentials/variables-and-variations/variables). If the Variable is NOT being managed by a Feature, this column will note the lack of Feature. **Click on a Feature name to navigate directly to the Feature managing this Variable** | | **Type** | The type of the feature flag. This type can one of: Boolean, JSON, Number, Boolean, or String. | | **Created At** | The time this Variable was first created. | diff --git a/docs/essentials/variations.md b/docs/essentials/variables-and-variations/variations.md similarity index 88% rename from docs/essentials/variations.md rename to docs/essentials/variables-and-variations/variations.md index 021c65dd..a66a0925 100644 --- a/docs/essentials/variations.md +++ b/docs/essentials/variables-and-variations/variations.md @@ -1,6 +1,6 @@ --- title: Variations -sidebar_class_name: hidden +sidebar_position: 2 --- Variations are different versions of a Feature. Each Variation can have different values for the Variables associated with the Feature. @@ -17,7 +17,7 @@ To view the Variables and Variations within a Feature, navigate to the 'Variable Depending on the Feature type, the default Variations will be pre-set. The most common of which will be the Variations of "Variation OFF" and "Variation ON", with the boolean Variable being set to false and true, respectively. -When a user is "Served" a Variation based on the [Targeting Rules](/essentials/targeting), the Variable Values the user receives on their devices or as an API response will be the values for the served Variation. +When a user is "Served" a Variation based on the [Targeting Rules](/essentials/targeting/targeting-overview), the Variable Values the user receives on their devices or as an API response will be the values for the served Variation. --- @@ -41,7 +41,7 @@ Give your new Variation a **name** as well as a **key**, as well as its **values - The Variable values will be what the Variable's value will be in SDK and API responses if a targeting rule is targeting those specific Variations. -Once this Variation is created, it will become available as an option within the "Serve" dropdown for [Targeting Rules](/essentials/targeting). Users who are served this new Variation will receive the Variable Values associated with this new Variation! +Once this Variation is created, it will become available as an option within the "Serve" dropdown for [Targeting Rules](/essentials/targeting/targeting-overview). Users who are served this new Variation will receive the Variable Values associated with this new Variation! --- diff --git a/docs/index.mdx b/docs/index.mdx index 277a28a9..61ee3b53 100644 --- a/docs/index.mdx +++ b/docs/index.mdx @@ -38,7 +38,7 @@ DevCycle is a feature flag platform built for teams of any size, helping you eas }, { type: 'link', - href: '/introduction/key-features', + href: '/essentials/key-features', description: 'See the key features of the platform.', label: 'Key Features', diff --git a/docs/introduction/quickstart.md b/docs/introduction/quickstart.md index ad086216..e738215e 100644 --- a/docs/introduction/quickstart.md +++ b/docs/introduction/quickstart.md @@ -3,7 +3,7 @@ title: Quickstart Tutorial sidebar_position: 1 --- -In this tutorial, we'll be showcasing a great use case for feature flags, guiding you through the creation of a simple [React app](https://react.dev), connecting it to DevCycle, and implementing an [Ops feature flag](/introduction/core-concepts/feature-types#ops) to enable/disable a **Maintenance Mode** page. +In this tutorial, we'll be showcasing a great use case for feature flags, guiding you through the creation of a simple [React app](https://react.dev), connecting it to DevCycle, and implementing an [Ops feature flag](/platform/feature-management/feature-types#ops) to enable/disable a **Maintenance Mode** page. You'll learn about some of the core features of DevCycle, while experiencing firsthand just how easy it is to implement feature flags to enhance your application's functionality and flexibility. @@ -23,7 +23,7 @@ On the DevCycle Dashboard, access the "Feature Management" page via the `Feature To create a Feature: 1. Click either the "+" button or the "Create new Feature" button. -2. Choose an `Ops Feature` from the options modal. To read more about the Feature types and their uses, see [DevCycle Feature Types](/introduction/core-concepts/feature-types). +2. Choose an `Ops Feature` from the options modal. To read more about the Feature types and their uses, see [DevCycle Feature Types](/platform/feature-management/feature-types). 3. After choosing a type, name and describe your Feature: - **Feature name:** For our example, this will be `Maintenance Mode`. - **Feature key:** This key is how the Feature and its Variables will be referenced in code. (A key of `maintenance-mode` will be automatically suggested based on the entered name.) @@ -93,7 +93,7 @@ To obtain the SDK key, you'll need to: ![alt text](/tutorial/tutorial-keys.png) -Depending on which [type of SDK](/sdk/) and which environment you are initializing for, the SDK Key will be different. Read more about [Environments](/essentials/environments) and [keys](/essentials/keys) in the essentials. +Depending on which [type of SDK](/sdk/) and which environment you are initializing for, the SDK Key will be different. Read more about [Environments](/platform/account-management/environments) and [keys](/platform/account-management/keys) in the essentials. **4. Initialize DevCycle Provider** @@ -107,7 +107,7 @@ export default withDevCycleProvider({ **5. Access your Variable.** -Implement the code to evaluate the Variable that is being controlled by the Feature you just created. Read more about Variables [here](/essentials/variables). +Implement the code to evaluate the Variable that is being controlled by the Feature you just created. Read more about Variables [here](/essentials/variables-and-variations/variables). To access the variable, you'll first need to import the `useVariableValue` hook at the top of `App.js` @@ -193,7 +193,7 @@ If everything is working, your maintenance mode should now be enabled, and you w ![alt text](/tutorial/tutorial-maintenance.png) -For more information on targeting based on user data, see the documentation on [Custom Properties here](/platform/advanced-targeting/custom-properties). +For more information on targeting based on user data, see the documentation on [Custom Properties here](/essentials/targeting/custom-properties). --- diff --git a/docs/platform/_category_.yml b/docs/platform/_category_.yml index 57bb2fa2..d6b460ce 100644 --- a/docs/platform/_category_.yml +++ b/docs/platform/_category_.yml @@ -1,2 +1,2 @@ label: 'Platform' -position: 0 +position: 3 diff --git a/docs/platform/account-management/_category_.yml b/docs/platform/account-management/_category_.yml new file mode 100644 index 00000000..4841b93d --- /dev/null +++ b/docs/platform/account-management/_category_.yml @@ -0,0 +1,2 @@ +label: 'Account Management' +position: 5 diff --git a/docs/essentials/environments.md b/docs/platform/account-management/environments.md similarity index 97% rename from docs/essentials/environments.md rename to docs/platform/account-management/environments.md index ec49c236..581e8ddf 100644 --- a/docs/essentials/environments.md +++ b/docs/platform/account-management/environments.md @@ -1,6 +1,6 @@ --- title: Environments -sidebar_class_name: hidden +sidebar_position: 3 --- Environments in DevCycle map to the environments which traditionally exist within a system's development lifecycle. Every Feature within DevCycle will exist across every Environment in your DevCycle Project, but each Environment manages Features independently. @@ -18,11 +18,11 @@ Every new project within DevCycle starts with three initial Environments: * Staging * Production -Each environment has its own set of SDK keys for Client-Side, Mobile, and Server-Side SDKs. To learn more about these keys and how to use them, read [Access Keys & Tokens](/essentials/keys). +Each environment has its own set of SDK keys for Client-Side, Mobile, and Server-Side SDKs. To learn more about these keys and how to use them, read [Access Keys & Tokens](/platform/account-management/keys). > **Every Feature you create will automatically be created on every environment within a project.** Each environment then has its own set of targeting rules. This means that a feature's code can be deployed across every environment, and its access can be managed on an environment level. -You can easily view a Feature's status across all environments by simply going to that Feature's management page, and the Feature's targeting or availability across each environment can be managed directly from that page in the associated targeting section. More details on [turning features on or off can be found here](/essentials/features), and more details on creating rules for your [Feature on each environment can be found here](/essentials/targeting). +You can easily view a Feature's status across all environments by simply going to that Feature's management page, and the Feature's targeting or availability across each environment can be managed directly from that page in the associated targeting section. More details on [turning features on or off can be found here](/essentials/features), and more details on creating rules for your [Feature on each environment can be found here](/essentials/targeting/targeting-overview). --- diff --git a/docs/essentials/keys.md b/docs/platform/account-management/keys.md similarity index 97% rename from docs/essentials/keys.md rename to docs/platform/account-management/keys.md index 186273ca..87faa99a 100644 --- a/docs/essentials/keys.md +++ b/docs/platform/account-management/keys.md @@ -1,6 +1,6 @@ --- title: Keys -sidebar_position: 3 +sidebar_position: 4 --- > All Environments within a Project have their own set of keys. For more information about Environments, [please read here](/essentials/overview#environments). @@ -14,7 +14,7 @@ SDK Keys are used to authenticate an SDK with DevCycle. SDK keys are separated into Server, Mobile and Client due to the unique security requirements and constraints of each platform. -Features can also be targeted to a specific type of SDK using [SDK Visibility](/platform/sdk-visibility) +Features can also be targeted to a specific type of SDK using [SDK Visibility](/platform/security-and-guardrails/sdk-visibility) #### Server Keys diff --git a/docs/essentials/organizations.md b/docs/platform/account-management/organizations.md similarity index 92% rename from docs/essentials/organizations.md rename to docs/platform/account-management/organizations.md index 27282f88..b8808dec 100644 --- a/docs/essentials/organizations.md +++ b/docs/platform/account-management/organizations.md @@ -1,15 +1,15 @@ --- title: Organizations -sidebar_position: 2 +sidebar_position: 1 --- -Organizations are the top level of the Account hierarchy within DevCycle, and are where all Users and Projects are managed. Users within an organization will have the same [permissions](/platform/permissions) across all projects, and a user may be part of multiple Organizations. +Organizations are the top level of the Account hierarchy within DevCycle, and are where all Users and Projects are managed. Users within an organization will have the same [permissions](/platform/security-and-guardrails/permissions) across all projects, and a user may be part of multiple Organizations. To view the current Organization (or change Organizations) click on your user avatar on the top right of the DevCycle Dashboard. The active Organization will have a green badge next to it. :::tip -[Granular permissions](/platform/permissions) are only available on business or enterprise plans, if you'd like to turn on permissions message us at support[at]devcycle.com +[Granular permissions](/platform/security-and-guardrails/permissions) are only available on business or enterprise plans, if you'd like to turn on permissions message us at support[at]devcycle.com ::: @@ -35,7 +35,7 @@ On the Organization settings page there are the following fields and items: | ------------------------------- | ------------------------------------------------------------------------------------------------------------- | | **Organization Name** | This is your organization's name which will be used throughout the Dashboard as well as in the API responses. | | **Organization ID** | The internal identifier for your organization. Mainly used for billing purposes | -| **Client ID and Client Secret** | Please refer to [API and SDK Keys](/essentials/keys) | +| **Client ID and Client Secret** | Please refer to [API and SDK Keys](/platform/account-management/keys) | --- @@ -79,7 +79,7 @@ The table below displays the built-in roles and their associated permissions: | Edit Team Member Roles | ✅ | | | | Modify Features in Production | ✅ | ✅ | | -For more information, check out the [Permissions](/platform/permissions) documentation. +For more information, check out the [Permissions](/platform/security-and-guardrails/permissions) documentation. **Assigning Roles** diff --git a/docs/essentials/projects.md b/docs/platform/account-management/projects.md similarity index 83% rename from docs/essentials/projects.md rename to docs/platform/account-management/projects.md index 028c2b03..9a0573ad 100644 --- a/docs/essentials/projects.md +++ b/docs/platform/account-management/projects.md @@ -1,9 +1,9 @@ --- title: Projects -sidebar_class_name: hidden +sidebar_position: 2 --- -> Projects are nested within [organizations](/essentials/organizations) and contain your [Features](/essentials/overview#features) and [Environments](/essentials/overview#environments) (and through them your [keys](/essentials/keys), [variables](/essentials/variables) and [variations](/essentials/overview#variations)). +> Projects are nested within [organizations](/platform/account-management/organizations) and contain your [Features](/essentials/overview#features) and [Environments](/essentials/overview#environments) (and through them your [keys](/platform/account-management/keys), [variables](/essentials/variables-and-variations/variables) and [variations](/essentials/variables-and-variations/variations)). --- diff --git a/docs/platform/custom-domains.md b/docs/platform/custom-domains.md index 9da77c19..8d31d03f 100644 --- a/docs/platform/custom-domains.md +++ b/docs/platform/custom-domains.md @@ -1,6 +1,6 @@ --- title: Custom Domains -sidebar_position: 10 +sidebar_position: 6 --- # Custom Domains diff --git a/docs/platform/experimentation/_category_.yml b/docs/platform/experimentation/_category_.yml new file mode 100644 index 00000000..f3bd64c0 --- /dev/null +++ b/docs/platform/experimentation/_category_.yml @@ -0,0 +1,2 @@ +label: 'Experimentation' +position: 2 diff --git a/docs/platform/metrics/creating-and-managing-metrics.md b/docs/platform/experimentation/creating-and-managing-metrics.md similarity index 96% rename from docs/platform/metrics/creating-and-managing-metrics.md rename to docs/platform/experimentation/creating-and-managing-metrics.md index 5cb689a8..c93d6982 100644 --- a/docs/platform/metrics/creating-and-managing-metrics.md +++ b/docs/platform/experimentation/creating-and-managing-metrics.md @@ -1,7 +1,7 @@ --- title: Creating and Managing Metrics -sidebar_position: 4 +sidebar_position: 2 --- :::info @@ -48,7 +48,7 @@ To set up a Metric, the following items are needed: - **Name** - This is the name of the Metric. It should be descriptive enough that any team member viewing it understands it and can both get the information necessary, and also decide if they would like to re-use the Metric for other Features. - **Key** - Like other DevCycle keys, this is how this Metric will be referenced in the Management API and all other non-dashboard interactions with this Metric. -- **Event** - This is the **EXACT** event name that is sent by the [DevCycle Track](/sdk/features#track) methods of the SDKs or via the DevCycle APIs. This event will be used in all calculations of the Metric. How it is used specifically is described below in [How do Metrics get calculated?](/platform/metrics/creating-and-managing-metrics#how-do-metrics-get-calculated) +- **Event** - This is the **EXACT** event name that is sent by the [DevCycle Track](/sdk/features#track) methods of the SDKs or via the DevCycle APIs. This event will be used in all calculations of the Metric. How it is used specifically is described below in [How do Metrics get calculated?](/platform/experimentation/creating-and-managing-metrics#how-do-metrics-get-calculated) - **"Optimize For"** - DevCycle represents Metrics as a positive or negative depending on the desired optimization. Often times, tools will always assume that an increase is beneficial. However, in most engineering applications, the opposite is true! Things such as latency, load times, server load, and processing times are Metrics that should be decreased. DevCycle will make obvious whether a Metric is improving in the desired direction, and will soon notify you if a significant impact in either direction has been made. @@ -94,7 +94,7 @@ To run a test, the following fields must be set: **Feature** - This is the specific feature this Metric should be applied to. Any event that has been sent since the creation of this Metric from a user receiving any variation of this feature will be part of this Metric. In the event that an error is shown, this means the event has not been seen from this feature yet. -**Control** - After selecting a Feature, a "control" variation must be selected. This is what will be used to show a comparative analysis against all other variations in a feature. Typically, an "off" or "Baseline" variation would act as the control. For more information on this, please refer to the [Feature Experimentation documentation](/essentials/feature-experimentation). +**Control** - After selecting a Feature, a "control" variation must be selected. This is what will be used to show a comparative analysis against all other variations in a feature. Typically, an "off" or "Baseline" variation would act as the control. For more information on this, please refer to the [Feature Experimentation documentation](/platform/experimentation/feature-experimentation). **Date Range** - This range will default from the moment the Metric (or feature) was created, to now within 30 days. If 30 days have passed since the creation of the Metric or feature, the date range must be a 30 day range. @@ -132,7 +132,7 @@ Here are some steps you can follow to track metrics within a feature: While the setup has some default values, the Metric requires the following fields to be filled: - - **Control** - This is what will be used to show a comparative analysis against all other variations in a feature. Typically, an "off" or "Baseline" variation would act as the control. For more information on this, please refer to the [Feature Experimentation documentation](/essentials/feature-experimentation). + - **Control** - This is what will be used to show a comparative analysis against all other variations in a feature. Typically, an "off" or "Baseline" variation would act as the control. For more information on this, please refer to the [Feature Experimentation documentation](/platform/experimentation/feature-experimentation). - **Date Range** - This range will default from the moment the Metric (or feature) was created, to now within 30 days. If 30 days have passed since the creation of the Metric or feature, the date range must be a 30 day range. @@ -150,12 +150,12 @@ From here, useful information such as trends and patterns in the data can be use ### How do Metrics get calculated? -To calculate Metrics, DevCycle uses [the custom events sent via its API or SDKs](/sdk/features#track). Each Event has the information of which user sent it and which Feature and Variation they were in at that time. For optimal experiments, use Features with variations [randomly distributed across users](/essentials/targeting#serving-a-random-variation-experimentation--random-distribution). +To calculate Metrics, DevCycle uses [the custom events sent via its API or SDKs](/sdk/features#track). Each Event has the information of which user sent it and which Feature and Variation they were in at that time. For optimal experiments, use Features with variations [randomly distributed across users](/essentials/targeting/random-variations). -To read more on the queries behind the Metrics, see [How Metrics Are Calculated](/platform/metrics/how-metrics-are-calculated) +To read more on the queries behind the Metrics, see [How Metrics Are Calculated](/platform/experimentation/how-metrics-are-calculated) ### Running Experiments With Metrics on a feature, experimentation can be easily executed on any Feature. At DevCycle we believe that experimentation should be a part of the natural lifecycle of all features. So no matter the [feature type](/essentials/features) selected, experimentation will always be available for use. -To learn more on how to run experiments with DevCycle, read [Feature Experimentation](/essentials/feature-experimentation) +To learn more on how to run experiments with DevCycle, read [Feature Experimentation](/platform/experimentation/feature-experimentation) diff --git a/docs/essentials/feature-experimentation.md b/docs/platform/experimentation/feature-experimentation.md similarity index 98% rename from docs/essentials/feature-experimentation.md rename to docs/platform/experimentation/feature-experimentation.md index 19b9ef1e..c9e24ee8 100644 --- a/docs/essentials/feature-experimentation.md +++ b/docs/platform/experimentation/feature-experimentation.md @@ -1,11 +1,11 @@ --- title: Feature Experimentation -sidebar_position: 6 +sidebar_position: 1 --- ## Overview -At DevCycle we believe that experimentation should be a part of the natural lifecycle of all features. So no matter the [feature type](/essentials/features) selected, can be experimented on. Experiments can be as simple as comparing any target audiences against a metric, or can be fully [randomized](/essentials/targeting#serving-a-random-variation-experimentation--random-distribution) A/B tests using statistical methodologies. +At DevCycle we believe that experimentation should be a part of the natural lifecycle of all features. So no matter the [feature type](/essentials/features) selected, can be experimented on. Experiments can be as simple as comparing any target audiences against a metric, or can be fully [randomized](/essentials/targeting/random-variations) A/B tests using statistical methodologies. This article outlines why and how to run and analyze experiments on your features within DevCycle. @@ -33,7 +33,7 @@ To run an experiment on any feature, all you need is two things: ### Comparing Multiple Variations -The primary concept of an experiment is the need to have at least two different experiences to compare performances. There are several ways in DevCycle to run multiple experiences for users. We go into depth on this in our [Targeting documentation](/essentials/targeting). +The primary concept of an experiment is the need to have at least two different experiences to compare performances. There are several ways in DevCycle to run multiple experiences for users. We go into depth on this in our [Targeting documentation](/essentials/targeting/targeting-overview). To get started with your first feature experiment, it is best to keep it simple and run a basic A/B test comparing two variations, one control and one treatment Variation, delivered randomly to all your users. @@ -55,7 +55,7 @@ To add a metric to your feature, click “Comparative Analysis” under the “D ![Add Metrics from Feature Editing Page](/august-2022-add-metric-feature-page.png) -For the creation of new metrics check out our documentation [here](/platform/metrics/creating-and-managing-metrics). +For the creation of new metrics check out our documentation [here](/platform/experimentation/creating-and-managing-metrics). Once you have metrics in your project, all you need to do is: 1. Select a metric you want to use to judge the performance of your experiment diff --git a/docs/platform/metrics/how-metrics-are-calculated.md b/docs/platform/experimentation/how-metrics-are-calculated.md similarity index 99% rename from docs/platform/metrics/how-metrics-are-calculated.md rename to docs/platform/experimentation/how-metrics-are-calculated.md index 7d6462bd..fe4d9e05 100644 --- a/docs/platform/metrics/how-metrics-are-calculated.md +++ b/docs/platform/experimentation/how-metrics-are-calculated.md @@ -1,6 +1,6 @@ --- title: How Metrics are Calculated -sidebar_position: 2 +sidebar_position: 3 --- # How things are calculated diff --git a/docs/platform/feature-managment/_category_.yml b/docs/platform/feature-managment/_category_.yml new file mode 100644 index 00000000..cd4e882d --- /dev/null +++ b/docs/platform/feature-managment/_category_.yml @@ -0,0 +1,2 @@ +label: 'Feature Management' +position: 1 diff --git a/docs/introduction/core-concepts/feature-hierarchy.md b/docs/platform/feature-managment/feature-hierarchy.md similarity index 95% rename from docs/introduction/core-concepts/feature-hierarchy.md rename to docs/platform/feature-managment/feature-hierarchy.md index 4bdca796..b8caf70c 100644 --- a/docs/introduction/core-concepts/feature-hierarchy.md +++ b/docs/platform/feature-managment/feature-hierarchy.md @@ -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](/essentials/variables-and-variations/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](/platform/feature-management/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/platform/feature-managment/feature-types.md similarity index 100% rename from docs/introduction/core-concepts/feature-types.md rename to docs/platform/feature-managment/feature-types.md diff --git a/docs/essentials/status-and-lifecycle.md b/docs/platform/feature-managment/status-and-lifecycle.md similarity index 96% rename from docs/essentials/status-and-lifecycle.md rename to docs/platform/feature-managment/status-and-lifecycle.md index b2e39078..c7628986 100644 --- a/docs/essentials/status-and-lifecycle.md +++ b/docs/platform/feature-managment/status-and-lifecycle.md @@ -1,6 +1,6 @@ --- title: Status and Lifecycle -sidebar_position: 7 +sidebar_position: 3 --- # Status and Lifecycle Management in DevCycle @@ -33,7 +33,7 @@ One could consider a Feature "Complete" once it has been tested, approved, and i The "Archived" status is designed to be the terminal state for Features that have reached the end of their lifecycle, were never implemented in code, or have become entirely obsolete. -A Feature should be archived after it has been cleaned up and its Variables removed from the codebase. Ideally, users should have also marked the Feature as **[Completed](/essentials/status-and-lifecycle#completed)** in DevCycle. +A Feature should be archived after it has been cleaned up and its Variables removed from the codebase. Ideally, users should have also marked the Feature as **[Completed](/platform/feature-management/status-and-lifecycle#completed)** in DevCycle. Archiving Features helps clean up your dashboard and codebase by essentially putting the Feature into a read-only mode and hiding it from the standard dashboard views. Archived Features' Audit Logs are accessible and available for teams to review. diff --git a/docs/platform/security-and-guardrails/_category_.yml b/docs/platform/security-and-guardrails/_category_.yml new file mode 100644 index 00000000..017dae01 --- /dev/null +++ b/docs/platform/security-and-guardrails/_category_.yml @@ -0,0 +1,2 @@ +label: 'Security and Guardrails' +position: 4 diff --git a/docs/platform/approval-workflows.md b/docs/platform/security-and-guardrails/approval-workflows.md similarity index 94% rename from docs/platform/approval-workflows.md rename to docs/platform/security-and-guardrails/approval-workflows.md index d5ad54cb..2aaa7ee8 100644 --- a/docs/platform/approval-workflows.md +++ b/docs/platform/security-and-guardrails/approval-workflows.md @@ -1,6 +1,6 @@ --- title: Approval Workflows -sidebar_position: 12 +sidebar_position: 1 --- # Approval Workflows @@ -20,7 +20,7 @@ The following actions do not trigger an approval request: ## Setting Up Approval Workflows for a DevCycle Project :::info -[Permissions](/platform/permissions) must be enabled for Organizations to use Approval Workflows. Please contact our [support](mailto:support@devcycle.com) team to get started with Permissions if you wish to use this feature. +[Permissions](/platform/security-and-guardrails/permissions) must be enabled for Organizations to use Approval Workflows. Please contact our [support](mailto:support@devcycle.com) team to get started with Permissions if you wish to use this feature. ::: Approval Workflows are a Project-level setting within DevCycle. diff --git a/docs/platform/audit-log.md b/docs/platform/security-and-guardrails/audit-log.md similarity index 80% rename from docs/platform/audit-log.md rename to docs/platform/security-and-guardrails/audit-log.md index b6c6c294..0777b61a 100644 --- a/docs/platform/audit-log.md +++ b/docs/platform/security-and-guardrails/audit-log.md @@ -1,6 +1,6 @@ --- title: Audit Log -sidebar_position: 3 +sidebar_position: 2 --- The Audit Log tracks all modifications made to a Feature. DevCycle captures the DevCycle user who made the change, a time stamp, and what was modified on each Feature save. @@ -23,7 +23,7 @@ The title of each modification card highlights the change that was made to the F Click the `View Details` button on each card for more information about each modification. -Modifications are organized by Environment with each card. The color of each Environment tag corresponds to the [color selected for that Environment](/essentials/environments#from-the-dashboard-1). +Modifications are organized by Environment with each card. The color of each Environment tag corresponds to the [color selected for that Environment](/platform/account-management/environments#from-the-dashboard-1). Items that are added to the Feature will be highlighted in green in the left-hand column of the modification card (see below), and removals or deletions of items will be highlighted in red. @@ -33,12 +33,12 @@ For modifications to values, each card will show the orignal value on the left-h :::info -Please note that [Self-Targeting](/platform/advanced-targeting/self-targeting) actions are not recorded in the Audit Log. +Please note that [Self-Targeting](/platform/testing-and-qa/self-targeting) actions are not recorded in the Audit Log. ::: ### Feature Created Modification Cards in the Audit Log -When a Feature is created, you will see multiple modification cards populate in the Audit Log. The first modification card in the Audit Log will outline the initial Feature configuration (initial variable, variations, status, settings, etc.). Then, depending on the [Feature Type](/introduction/core-concepts/feature-types) selected when creating a new Feature, the following cards will highlight the each Environment's Targeting status, along with the templated Targeting Rules (if they exist). See an example below of an Experiment Feature Type. +When a Feature is created, you will see multiple modification cards populate in the Audit Log. The first modification card in the Audit Log will outline the initial Feature configuration (initial variable, variations, status, settings, etc.). Then, depending on the [Feature Type](/platform/feature-management/feature-types) selected when creating a new Feature, the following cards will highlight the each Environment's Targeting status, along with the templated Targeting Rules (if they exist). See an example below of an Experiment Feature Type. ![Audit Log Experiment Feature Type](/nov2023-audit-log-experiment-feature-type.png) diff --git a/docs/platform/feature-obfuscation.md b/docs/platform/security-and-guardrails/feature-obfuscation.md similarity index 98% rename from docs/platform/feature-obfuscation.md rename to docs/platform/security-and-guardrails/feature-obfuscation.md index 8dd01fa9..faf28595 100644 --- a/docs/platform/feature-obfuscation.md +++ b/docs/platform/security-and-guardrails/feature-obfuscation.md @@ -1,6 +1,6 @@ --- title: Feature Obfuscation -sidebar_position: 9 +sidebar_position: 3 --- Feature flags are often used to hide upcoming features before release. Normally, not showing the feature on a UI @@ -87,7 +87,7 @@ export const MY_SECOND_VARIABLE = 'dvc_obfs_359f6c73757fe30a9950ce39333c2329915a :::info The generated file also includes Typescript definitions of each Variable, which allows you to make your DevCycle usage type-safe by enforcing the correct datatype for each Variable. When using an -[enum schema](https://devcycle-docs-git-obfuscation-devcyclehq.vercel.app/platform/advanced-variables/variable-schemas), +[enum schema](https://devcycle-docs-git-obfuscation-devcyclehq.vercel.app/essentials/variables-and-variations/variable-schemas), the types will also enforce that one of the allowed values is used. For more information, see the documentation for [Typescript with the Javascript SDK](/sdk/client-side-sdks/javascript/javascript-typescript) ::: diff --git a/docs/platform/permissions.md b/docs/platform/security-and-guardrails/permissions.md similarity index 92% rename from docs/platform/permissions.md rename to docs/platform/security-and-guardrails/permissions.md index 2a07f4fa..67e45029 100644 --- a/docs/platform/permissions.md +++ b/docs/platform/security-and-guardrails/permissions.md @@ -1,6 +1,6 @@ --- title: Permissions -sidebar_position: 11 +sidebar_position: 4 --- # Permissions @@ -57,4 +57,4 @@ Everything **Publishers** can do, plus - Manage Roles of all Users in the Organization -For more information, check out the [Organization Roles](/essentials/organizations#organization-roles) documentation. +For more information, check out the [Organization Roles](/platform/account-management/organizations#organization-roles) documentation. diff --git a/docs/platform/sdk-visibility.md b/docs/platform/security-and-guardrails/sdk-visibility.md similarity index 100% rename from docs/platform/sdk-visibility.md rename to docs/platform/security-and-guardrails/sdk-visibility.md diff --git a/docs/platform/security-and-guardrails/variable-schemas.md b/docs/platform/security-and-guardrails/variable-schemas.md new file mode 100644 index 00000000..5416fed0 --- /dev/null +++ b/docs/platform/security-and-guardrails/variable-schemas.md @@ -0,0 +1,64 @@ +--- +title: Variable Schemas +sidebar_position: 6 +--- + +Variable Schemas is a new DevCycle feature that lets you define allowable values for your variables when creating feature variations. Variable Schemas help developers ensure that team members can easily select allowable inputs for variable values without being nervous that a certain value might cause an application crash or negatively impact end user experience. + +## Defining a Variable Schema + +To define a Variable Schema for a variable, navigate to the Schema section of the Variable Details page to select and define a schema for that particular variable. Variable Schemas can be added to both associated or unassociated variables. + +There are three different types of schemas that you can define for your variable: + +- Enum (*String or Number Variable*) +- Regex (*String Variable*) +- JSON (*JSON Variable*) + +Each schema type requires a **Brief Description**. For example, when defining an Enum schema for a String variable that's meant for a greeting message on a sign up page, a sample description could be “Greeting options for sign-up page.” + +You also must set an **Example Value**. The example value will be used as the initial value for each variation when adding this variable to a feature. + +:::caution +You will be unable to define or edit a Schema that makes the associated Feature’s values invalid. +::: + +An **Enum** schema will allow you to input allowable values for a string or number variable. + +If “Enum” type is selected, users must define the allowable values in the **Enum Values** input field. + +*Enum Example:* +![Enum Schema Example](/june-2023-enum-schema-example.png) + + +A **Regex** schema allows you to define a regex pattern. Variation values for a variable with a Regex schema type must match the pattern defined in the schema. + +*Regex Example:* +![Regex Schema Example](/june-2023-regex-schema-example.png) + +A **JSON** schema will allow DVC users to define a JSON schema that variation values must follow. If “JSON schema” type is selected, users can define the schema below in a JSON editor. Example JSON Schemas and more information about them can be found [here](https://json-schema.org/learn/miscellaneous-examples.html#basic). + +*JSON Example:* +![JSON Schema Example](/june-2023-json-schema-example.png) + +Once a variable is created and schema has been defined, click save and then you can add this variable to a feature. + +## Adding a Variable with a Defined Schema + +Once the variable is created and a schema has been defined, you can add it to a feature like any other unassociated variable and select it from the dropdown in the Add New Variable modal within a feature. + +![Add Variable Modal with Schema Example](/june-2023-adding-variable-with-schema-modal.png) + +If a variable that has a schema is selected, an info box will appear that outlines the schema type and has the Brief Description of the schema defined on the Variable details page. + +You can also click on the word *"here”* to open a side panel which displays the schema definition along with other details about the variable. + +![Add New Variable JSON Schema Selected](/june-2023-add-new-variable-json-schema-selected.png) + + +## Adding a New Variation for Variables with a Defined Schema + +When adding a new variation for a variable with a schema, you can click on the variable name (e.g. *inline-search* in this example) to open a side panel which displays the schema definition along with other details about the variable. + +![Add New Variable JSON Schema Selected](/june-2023-add-new-variation-with-schema.png) + diff --git a/docs/platform/testing-and-qa/_category_.yml b/docs/platform/testing-and-qa/_category_.yml new file mode 100644 index 00000000..913fcc2c --- /dev/null +++ b/docs/platform/testing-and-qa/_category_.yml @@ -0,0 +1,2 @@ +label: 'Testing and QA' +position: 3 diff --git a/docs/platform/advanced-targeting/feature-opt-in.mdx b/docs/platform/testing-and-qa/feature-opt-in.mdx similarity index 99% rename from docs/platform/advanced-targeting/feature-opt-in.mdx rename to docs/platform/testing-and-qa/feature-opt-in.mdx index 4e750697..5e531c42 100644 --- a/docs/platform/advanced-targeting/feature-opt-in.mdx +++ b/docs/platform/testing-and-qa/feature-opt-in.mdx @@ -1,6 +1,6 @@ --- title: Feature Opt-In -sidebar_position: 6 +sidebar_position: 1 --- # Feature Opt-In diff --git a/docs/platform/testing-and-qa/self-targeting.md b/docs/platform/testing-and-qa/self-targeting.md new file mode 100644 index 00000000..d6549ba5 --- /dev/null +++ b/docs/platform/testing-and-qa/self-targeting.md @@ -0,0 +1,32 @@ +--- +title: Self-Targeting +sidebar_position: 2 +--- + +Self-Targeting is a DevCycle QA & debugging feature that allows you to easily serve yourself different variations of a feature without having to modify targeting rules in each environment. To leverage this feature, you must set up your DevCycle Identity by associating an SDK User ID to your DevCycle user profile. + +![Self-Targeting Slideout on Feature Page](/aug-2023-self-targeting-slideout-open-feature-form.png) + +On each feature, you will see a Self-Targeting section within the Users & Targeting tab. This section will show you at-a-glance if you have any active Self-Targeting overrides for a feature, and how many other team-members within the current project have Self-Targeting overrides set as well. + +Within the slide-out, you can setup your DevCycle Identity, select Self-Targeting overrides, and see the other team members that are currently Self-Targeting for that feature, including the variation and environment they have active overrides in. + +## DevCycle Identity + +Setup your DevCycle Identity by entering the user ID you are providing to the DevCycle SDK, and which uniquely identifies you. Doing so unlocks debugging features such as Self-Targeting, a feature that allows you to override targeting rules to deliver different variations of the feature to yourself. + +You can setup & update your DVC Identity within the Self-Targeting slide-out itself OR on your profile page within your project settings. + +![DVC Identity Self-Targeting Slide-out](/august-2023-self-targeting-dvc-id.png) + +## Self-Targeting Override + +Once you’ve setup your DevCycle Identity, you are able to use Self-Targeting! Navigate to the feature you’d like to target yourself in and open the Self-Targeting slide-out by clicking on the Manage Self-Targeting button. + +Within the Environment & Variations section of the slide-out, you will see a list of all environments along with a dropdown with all variations that have been created for the feature. Select a variation for one or more environments, and click Apply Changes. + +![Self-Targeting Slide-out Variation](/august-2023-self-targeting-slideout-var.png) + +To view all of the Self-Targeting feature overrides you’re currently being served, navigate to the DevCycle Identity section on your profile settings page (Project Settings —> DevCycle Identity). From where, you’ll also be able to clear all existing Overrides for the specified project. + +![DVC Identity Profile Page](/august-2023-DVC-id-profile-page-overrides.png) diff --git a/docs/platform/web-debugger.mdx b/docs/platform/testing-and-qa/web-debugger.mdx similarity index 95% rename from docs/platform/web-debugger.mdx rename to docs/platform/testing-and-qa/web-debugger.mdx index c7e03570..cb4a16f2 100644 --- a/docs/platform/web-debugger.mdx +++ b/docs/platform/testing-and-qa/web-debugger.mdx @@ -1,6 +1,6 @@ --- title: Web Debugger -sidebar_position: 6 +sidebar_position: 3 --- import WebDebugger from '@site/static/web-debugger.png'; @@ -138,7 +138,7 @@ to log in. The Debugger is only available to those with a DevCycle dashboard acc The Debugger has several main features. ### Self-Targeting -The Debugger allows you to quickly change your [Self-Targeting Overrides](/platform/advanced-targeting/self-targeting) and see the changes reflected immediately on the current page. If you don't currently have Self-Targeting set up, the Debugger will present an option to quickly set your "DevCycle Identity" to the currently identified user on the page. +The Debugger allows you to quickly change your [Self-Targeting Overrides](/platform/testing-and-qa/self-targeting) and see the changes reflected immediately on the current page. If you don't currently have Self-Targeting set up, the Debugger will present an option to quickly set your "DevCycle Identity" to the currently identified user on the page. Once set, you can now view and modify your Overrides for any Feature in your project. diff --git a/docs/platform/webhooks.md b/docs/platform/webhooks.md index b737089f..deb9ed9f 100644 --- a/docs/platform/webhooks.md +++ b/docs/platform/webhooks.md @@ -1,6 +1,6 @@ --- title: Webhooks -sidebar_position: 8 +sidebar_position: 7 --- This topic explains how to create and use Webhooks in DevCycle. diff --git a/docs/sdk/client-side-sdks/android/android-usage.md b/docs/sdk/client-side-sdks/android/android-usage.md index 3d90616e..47a1f7d4 100644 --- a/docs/sdk/client-side-sdks/android/android-usage.md +++ b/docs/sdk/client-side-sdks/android/android-usage.md @@ -294,7 +294,7 @@ devcycleClient.flushEvents(new DevCycleCallback() { ## EdgeDB -EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/edgedb). +EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/client-side-sdks/flutter/flutter-usage.md b/docs/sdk/client-side-sdks/flutter/flutter-usage.md index c74e8650..96ff1bf1 100644 --- a/docs/sdk/client-side-sdks/flutter/flutter-usage.md +++ b/docs/sdk/client-side-sdks/flutter/flutter-usage.md @@ -162,7 +162,7 @@ _devcycleClient.flushEvents(([error]) => { ## EdgeDB EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. -Read more about [EdgeDB](/platform/edgedb). +Read more about [EdgeDB](/essentials/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/client-side-sdks/ios/ios-usage.md b/docs/sdk/client-side-sdks/ios/ios-usage.md index c6bdc782..a4f693b8 100644 --- a/docs/sdk/client-side-sdks/ios/ios-usage.md +++ b/docs/sdk/client-side-sdks/ios/ios-usage.md @@ -279,7 +279,7 @@ devcycleClient.flushEvents() ## EdgeDB -EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/edgedb). +EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/client-side-sdks/javascript/javascript-typescript.md b/docs/sdk/client-side-sdks/javascript/javascript-typescript.md index 119e9259..4ba29138 100644 --- a/docs/sdk/client-side-sdks/javascript/javascript-typescript.md +++ b/docs/sdk/client-side-sdks/javascript/javascript-typescript.md @@ -83,6 +83,6 @@ the latest configuration from DevCycle. :::info -Any Variables that are a part of a [Completed Feature](https://docs.devcycle.com/essentials/status-and-lifecycle#completing-a-feature) will be marked as deprecated in the types output. This is a powerful aid for Variable cleanup, because you can see which Variables need to be cleaned up right in your code. +Any Variables that are a part of a [Completed Feature](https://docs.devcycle.com/platform/feature-management/status-and-lifecycle#completing-a-feature) will be marked as deprecated in the types output. This is a powerful aid for Variable cleanup, because you can see which Variables need to be cleaned up right in your code. ::: diff --git a/docs/sdk/client-side-sdks/react/react-typescript.md b/docs/sdk/client-side-sdks/react/react-typescript.md index ec9c5e26..0760d6c6 100644 --- a/docs/sdk/client-side-sdks/react/react-typescript.md +++ b/docs/sdk/client-side-sdks/react/react-typescript.md @@ -63,6 +63,6 @@ the latest configuration from DevCycle. :::info -Any Variables that are a part of a [Completed Feature](https://docs.devcycle.com/essentials/status-and-lifecycle#completing-a-feature) will be marked as deprecated in the types output. This is a powerful aid for Variable cleanup, because you can see which Variables need to be cleaned up right in your code. +Any Variables that are a part of a [Completed Feature](https://docs.devcycle.com/platform/feature-management/status-and-lifecycle#completing-a-feature) will be marked as deprecated in the types output. This is a powerful aid for Variable cleanup, because you can see which Variables need to be cleaned up right in your code. ::: diff --git a/docs/sdk/client-side-sdks/react/react-usage.md b/docs/sdk/client-side-sdks/react/react-usage.md index 36f0b58d..7d6713da 100644 --- a/docs/sdk/client-side-sdks/react/react-usage.md +++ b/docs/sdk/client-side-sdks/react/react-usage.md @@ -273,7 +273,7 @@ If using Typescript, `OldComponent` and `NewComponent` must have compatible prop EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. -To get started, enable EdgeDB on your project by following the guide [here](/platform/edgedb) +To get started, enable EdgeDB on your project by following the guide [here](/essentials/targeting/edgedb) Once you have EdgeDB enabled in your project, pass in the `enableEdgeDB` option to turn on EdgeDB mode for the SDK: diff --git a/docs/sdk/client-side-sdks/roku/roku-usage.md b/docs/sdk/client-side-sdks/roku/roku-usage.md index b257c2d9..add6ff2e 100644 --- a/docs/sdk/client-side-sdks/roku/roku-usage.md +++ b/docs/sdk/client-side-sdks/roku/roku-usage.md @@ -108,7 +108,7 @@ m.devcycleClient.flushEvents() ## EdgeDB -EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/edgedb). +EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/features.md b/docs/sdk/features.md index bab79b39..2191de01 100644 --- a/docs/sdk/features.md +++ b/docs/sdk/features.md @@ -78,7 +78,7 @@ await devcycleClient.onClientInitialized() ## Evaluating Features & Using Variables This section explains how to use retrieve the Variables of a Feature as well as use their values. For information -on setting up a Feature for use, read [Variables and Variations](/essentials/variables) and [Targeting Users](/essentials/targeting) +on setting up a Feature for use, read [Variables and Variations](/essentials/variables-and-variations/variables) and [Targeting Users](/essentials/targeting/targeting-overview) Every SDK provides a method to retrieve a Variable's value. It expects to receive the unique key of the Variable, and a default value to serve in case no other value is available. @@ -107,7 +107,7 @@ The default value will be returned in the following scenarios: configuration from breaking your application at runtime. - The SDK has finished initializing, but the user has not been targeted for a Feature that controls this Variable -For more information on how the default value is used, see [Variable Defaults](/platform/advanced-variables/variable-defaults). +For more information on how the default value is used, see [Variable Defaults](/essentials/variables-and-variations/variable-defaults). ## Getting All Features @@ -131,7 +131,7 @@ The response is the following general format, with slight changes depending on t } ``` -Only Features that the User has satisfied [targeting rules](/essentials/targeting) for will be returned by this function. +Only Features that the User has satisfied [targeting rules](/essentials/targeting/targeting-overview) for will be returned by this function. The feature must also be **enabled** for that environment. ## Getting all Variables @@ -157,7 +157,7 @@ The response is the following general format, with slight changes depending on t } ``` -Only Variables in Features that the user has satisfied [targeting rules](/essentials/targeting) for will be part of the response in this method. +Only Variables in Features that the user has satisfied [targeting rules](/essentials/targeting/targeting-overview) for will be part of the response in this method. The Feature must also be **enabled** for the environment this SDK is being called on. :::caution @@ -242,7 +242,7 @@ to represent the user. User data can also contain "custom data", which is a key-value map of any arbitrary data you want to use for targeting. The provided data can be used in Targeting Rules by creating Custom Properties in the DevCycle dashboard. Learn more -about [Custom Property Targeting](/platform/advanced-targeting/custom-properties) +about [Custom Property Targeting](/essentials/targeting/custom-properties) When setting custom properties you have a choice between keeping that data completely private or allowing for the data to be logged back to DevCycle's events database. Both options allow for the same targeting capabilities, @@ -344,6 +344,6 @@ The SDK determines flag values by making an API call for each decision, using wo globally. Every function within the SDK will reach out to these edge workers and respond with extremely low latency. -Cloud bucketing is required to use specific features such as [EdgeDB](/platform/edgedb) and -[Feature Opt-In](/platform/advanced-targeting/feature-opt-in). If you aren't using these features, then Local Bucketing +Cloud bucketing is required to use specific features such as [EdgeDB](/essentials/targeting/edgedb) and +[Feature Opt-In](/platform/testing-and-qa/feature-opt-in). If you aren't using these features, then Local Bucketing is the recommended mode. diff --git a/docs/sdk/server-side-sdks/dotnet/dotnet-usage.md b/docs/sdk/server-side-sdks/dotnet/dotnet-usage.md index 35ea7093..ce3f0356 100644 --- a/docs/sdk/server-side-sdks/dotnet/dotnet-usage.md +++ b/docs/sdk/server-side-sdks/dotnet/dotnet-usage.md @@ -81,7 +81,7 @@ DevCycleResponse result = await client.Track(user, event); ## EdgeDB - Cloud Only EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. -Read more about [EdgeDB](/platform/edgedb). +Read more about [EdgeDB](/essentials/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/dotnet/dotnet.md b/docs/sdk/server-side-sdks/dotnet/dotnet.md index 2becc5aa..7345a500 100644 --- a/docs/sdk/server-side-sdks/dotnet/dotnet.md +++ b/docs/sdk/server-side-sdks/dotnet/dotnet.md @@ -11,7 +11,7 @@ The DevCycle .NET / C# SDK has two operation modes; Cloud Bucketing - which inte and Local Bucketing - which performs bucketing locally. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/platform/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. See [Here](/sdk/#difference-between-local-and-cloud-bucketing) for more information. diff --git a/docs/sdk/server-side-sdks/go/go-usage.md b/docs/sdk/server-side-sdks/go/go-usage.md index 9a229a07..141e191b 100644 --- a/docs/sdk/server-side-sdks/go/go-usage.md +++ b/docs/sdk/server-side-sdks/go/go-usage.md @@ -126,7 +126,7 @@ Client Custom Data is only available for the Local Bucketing SDK ## EdgeDB EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time -you identify a user. Read more about [EdgeDB](/platform/edgedb). +you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/go/go.md b/docs/sdk/server-side-sdks/go/go.md index 0b6cf7ff..2bc352f0 100644 --- a/docs/sdk/server-side-sdks/go/go.md +++ b/docs/sdk/server-side-sdks/go/go.md @@ -11,7 +11,7 @@ Welcome to the DevCycle Go Server SDK. There are two modes for the SDK, Cloud bucketing (using the [Bucketing API](https://docs.devcycle.com/bucketing-api/)) and Local Bucketing. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/platform/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/docs/sdk/server-side-sdks/java/java-usage.md b/docs/sdk/server-side-sdks/java/java-usage.md index 0e3e02a9..f4638009 100644 --- a/docs/sdk/server-side-sdks/java/java-usage.md +++ b/docs/sdk/server-side-sdks/java/java-usage.md @@ -144,7 +144,7 @@ DevCycleLocalOptions options = DevCycleLocalOptions.builder().customLogger(loggi **NOTE: EdgeDB is only available with Cloud Bucketing.** EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. -Read more about [EdgeDB](/platform/edgedb). +Read more about [EdgeDB](/essentials/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/java/java.md b/docs/sdk/server-side-sdks/java/java.md index 3c337132..089b5f1a 100644 --- a/docs/sdk/server-side-sdks/java/java.md +++ b/docs/sdk/server-side-sdks/java/java.md @@ -10,7 +10,7 @@ Welcome to the DevCycle Java Server SDK. There are two modes for the SDK, Cloud bucketing (using the [Bucketing API](https://docs.devcycle.com/bucketing-api/)) and Local Bucketing. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/platform/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/docs/sdk/server-side-sdks/node/node-usage.md b/docs/sdk/server-side-sdks/node/node-usage.md index f5530b9f..d3b07d73 100644 --- a/docs/sdk/server-side-sdks/node/node-usage.md +++ b/docs/sdk/server-side-sdks/node/node-usage.md @@ -112,7 +112,7 @@ EdgeDB is only available with Cloud Bucketing and does not have any impact on Lo ::: -EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/edgedb). +EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/node/node.md b/docs/sdk/server-side-sdks/node/node.md index 94149d21..583f7d74 100644 --- a/docs/sdk/server-side-sdks/node/node.md +++ b/docs/sdk/server-side-sdks/node/node.md @@ -10,7 +10,7 @@ import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; There are two modes for the SDK, Cloud bucketing (using the [Bucketing API](https://docs.devcycle.com/bucketing-api/)) and Local Bucketing. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/platform/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/docs/sdk/server-side-sdks/php/php-usage.md b/docs/sdk/server-side-sdks/php/php-usage.md index 17382711..f5f921bd 100644 --- a/docs/sdk/server-side-sdks/php/php-usage.md +++ b/docs/sdk/server-side-sdks/php/php-usage.md @@ -98,7 +98,7 @@ try { ## EdgeDB -EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/edgedb). +EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/php/php.md b/docs/sdk/server-side-sdks/php/php.md index 0a1462da..96fc80de 100644 --- a/docs/sdk/server-side-sdks/php/php.md +++ b/docs/sdk/server-side-sdks/php/php.md @@ -11,7 +11,7 @@ Welcome to the DevCycle PHP SDK. There are two modes for the SDK, Cloud bucketing (using the [Bucketing API](https://docs.devcycle.com/bucketing-api/)) and Local Bucketing. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/platform/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/docs/sdk/server-side-sdks/python/python-usage.md b/docs/sdk/server-side-sdks/python/python-usage.md index e62eb07a..26b11c59 100644 --- a/docs/sdk/server-side-sdks/python/python-usage.md +++ b/docs/sdk/server-side-sdks/python/python-usage.md @@ -131,7 +131,7 @@ Client Custom Data is only available for the Local Bucketing SDK ## EdgeDB -When utilizing the Cloud Bucketing Python SDK, EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/edgedb). +When utilizing the Cloud Bucketing Python SDK, EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/python/python.md b/docs/sdk/server-side-sdks/python/python.md index 5e478e14..476d0115 100644 --- a/docs/sdk/server-side-sdks/python/python.md +++ b/docs/sdk/server-side-sdks/python/python.md @@ -10,7 +10,7 @@ import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; Welcome to the DevCycle Python Server SDK. There are two modes for the SDK, Local Bucketing (using the local bucketing engine) and Cloud bucketing (using the [DevCycle Bucketing API](/bucketing-api/#tag/devcycle)). We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/platform/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/docs/sdk/server-side-sdks/ruby/ruby-usage.md b/docs/sdk/server-side-sdks/ruby/ruby-usage.md index 8d28966c..879f2068 100644 --- a/docs/sdk/server-side-sdks/ruby/ruby-usage.md +++ b/docs/sdk/server-side-sdks/ruby/ruby-usage.md @@ -137,7 +137,7 @@ Client Custom Data is only available for the Local Bucketing SDK ## EdgeDB EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. -Read more about [EdgeDB](/platform/edgedb). +Read more about [EdgeDB](/essentials/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/ruby/ruby.md b/docs/sdk/server-side-sdks/ruby/ruby.md index 3f2af4a9..da7f87ee 100644 --- a/docs/sdk/server-side-sdks/ruby/ruby.md +++ b/docs/sdk/server-side-sdks/ruby/ruby.md @@ -11,7 +11,7 @@ Welcome to the DevCycle Ruby SDK. There are two modes for the SDK, Cloud bucketing (using the [Bucketing API](https://docs.devcycle.com/bucketing-api/)) and Local Bucketing. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/platform/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/sidebars.js b/sidebars.js index 0c154bbc..05a2efc9 100644 --- a/sidebars.js +++ b/sidebars.js @@ -8,7 +8,7 @@ module.exports = { }, { type: 'category', - label: 'Introduction', + label: 'Getting Started', items: [{ type: "autogenerated", dirName: "introduction" }], collapsible: true, className: 'section-title introduction', diff --git a/vercel.json b/vercel.json index e6e3fff8..298b52fc 100644 --- a/vercel.json +++ b/vercel.json @@ -11,23 +11,63 @@ { "source": "/tools-and-integrations/cli", "destination": "/cli", "statusCode": 301 }, { "source": "/:path*/getting-started/:path*", "destination": "/introduction/quickstart", "statusCode": 301 }, { "source": "/home/feature-management/features-and-variables/targeting-users", "destination": "/essentials/targeting", "statusCode": 301 }, - { "source": "/home/feature-management/features-and-variables/variables-and-variations", "destination": "/essentials/variables", "statusCode": 301 }, - { "source": "/home/feature-management/features-and-variables/custom-properties", "destination": "/platform/advanced-targeting/custom-properties", "statusCode": 301 }, - { "source": "/home/feature-management/features-and-variables/sdk-visibility", "destination": "/platform/sdk-visibility", "statusCode": 301 }, + { "source": "/home/feature-management/features-and-variables/variables-and-variations", "destination": "/essentials/variables-and-variations/variables", "statusCode": 301 }, + { "source": "/home/feature-management/features-and-variables/custom-properties", "destination": "/essentials/targeting/custom-properties", "statusCode": 301 }, + { "source": "/home/feature-management/features-and-variables/sdk-visibility", "destination": "/platform/security-and-guardrails/sdk-visibility", "statusCode": 301 }, { "source": "/home/feature-management/features-and-variables/metrics-and-analysis/:path*", "destination": "/platform/metrics/:path*", "statusCode": 301 }, { "source": "/home/feature-management/organizing-your-flags-and-variables/feature-dashboard", "destination": "/essentials/features", "statusCode": 301 }, - { "source": "/home/feature-management/organizing-your-flags-and-variables/environments", "destination": "/essentials/environments", "statusCode": 301 }, - { "source": "/home/feature-management/organizing-your-flags-and-variables/api-and-sdk-keys", "destination": "/essentials/keys", "statusCode": 301 }, - { "source": "/home/feature-management/organizing-your-flags-and-variables/variable-dashboard", "destination": "/essentials/variables", "statusCode": 301 }, - { "source": "/home/feature-management/organizing-your-flags-and-variables/organizations-projects", "destination": "/essentials/organizations", "statusCode": 301 }, - { "source": "/home/your-organization/:path*", "destination": "/essentials/organizations", "statusCode": 301 }, + { "source": "/home/feature-management/organizing-your-flags-and-variables/environments", "destination": "/platform/account-management/environments", "statusCode": 301 }, + { "source": "/home/feature-management/organizing-your-flags-and-variables/api-and-sdk-keys", "destination": "/platform/account-management/keys", "statusCode": 301 }, + { "source": "/home/feature-management/organizing-your-flags-and-variables/variable-dashboard", "destination": "/essentials/variables-and-variations/variables", "statusCode": 301 }, + { "source": "/home/feature-management/organizing-your-flags-and-variables/organizations-projects", "destination": "/platform/account-management/organizations", "statusCode": 301 }, + { "source": "/home/your-organization/:path*", "destination": "/platform/account-management/organizations", "statusCode": 301 }, { "source": "/home/demos/:path*", "destination": "/examples", "statusCode": 301 }, - { "source": "/home/feature-management/edgedb/:path*", "destination": "/platform/edgedb", "statusCode": 301 }, - { "source": "/home/feature-management/feature-opt-in/:path*", "destination": "/platform/advanced-targeting/feature-opt-in", "statusCode": 301 }, + { "source": "/home/feature-management/edgedb/:path*", "destination": "/essentials/targeting/edgedb", "statusCode": 301 }, + { "source": "/home/feature-management/feature-opt-in/:path*", "destination": "/platform/testing-and-qa/feature-opt-in", "statusCode": 301 }, { "source": "/tools-and-integrations/:path*", "destination": "/integrations/:path*", "statusCode": 301 }, { "source": "/tools-and-integrations/", "destination": "/integrations", "statusCode": 301 }, { "source": "/extras/:path*", "destination": "/platform/:path*", "statusCode": 301 }, - { "source": "/extras/:path*/", "destination": "/platform/:path*", "statusCode": 301 } + { "source": "/extras/:path*/", "destination": "/platform/:path*", "statusCode": 301 }, + + { "source": "/introduction/key-features", "destination": "/essentials/key-features", "statusCode": 301 }, + { "source": "/introduction/architecture", "destination": "/essentials/architecture", "statusCode": 301 }, + + { "source": "/platform/advanced-targeting/audiences", "destination": "/essentials/targeting/audiences", "statusCode": 301 }, + { "source": "/platform/advanced-targeting/custom-properties", "destination": "/essentials/targeting/custom-properties", "statusCode": 301 }, + { "source": "/platform/advanced-targeting/random-variations", "destination": "/essentials/targeting/random-variations", "statusCode": 301 }, + { "source": "/platform/advanced-targeting/randomize-using-custom-property", "destination": "/essentials/targeting/randomize-using-custom-property", "statusCode": 301 }, + { "source": "/platform/advanced-targeting/rollouts", "destination": "/essentials/targeting/rollouts", "statusCode": 301 }, + { "source": "/platform/edgedb", "destination": "/essentials/targeting/edgedb", "statusCode": 301 }, + + { "source": "/essentials/variables", "destination": "/essentials/variables-and-variations/variables", "statusCode": 301 }, + { "source": "/essentials/variations", "destination": "/essentials/variables-and-variations/variations", "statusCode": 301 }, + { "source": "/essentials/advanced-variables/variable-defaults", "destination": "/essentials/variables-and-variations/variable-defaults", "statusCode": 301 }, + { "source": "/essentials/advanced-variables/variable-schemas", "destination": "/essentials/variables-and-variations/variable-schemas", "statusCode": 301 }, + { "source": "/platform/metrics/feature-flag-reach", "destination": "/essentials/variables-and-variations/feature-flag-reach", "statusCode": 301 }, + + { "source": "/essentials/organizations", "destination": "/platform/account-management/organizations", "statusCode": 301 }, + { "source": "/essentials/projects", "destination": "/platform/account-management/projects", "statusCode": 301 }, + { "source": "/essentials/environments", "destination": "/platform/account-management/environments", "statusCode": 301 }, + { "source": "/essentials/keys", "destination": "/platform/account-management/keys", "statusCode": 301 }, + + { "source": "/platform/metrics/creating-and-managing-metrics", "destination": "/platform/experimentation/creating-and-managing-metrics", "statusCode": 301 }, + { "source": "/platform/metrics/how-metrics-are-calculated", "destination": "/platform/experimentation/how-metrics-are-calculated", "statusCode": 301 }, + { "source": "/essentials/feature-experimentation", "destination": "/platform/experimentation/feature-experimentation", "statusCode": 301 }, + + { "source": "/introduction/core-concepts/feature-hierarchy", "destination": "/platform/feature-management/feature-hierarchy", "statusCode": 301 }, + { "source": "/introduction/core-concepts/feature-types", "destination": "/platform/feature-management/feature-types", "statusCode": 301 }, + { "source": "/essentials/status-and-lifecycle", "destination": "/platform/feature-management/status-and-lifecycle", "statusCode": 301 }, + + { "source": "/platform/approval-workflows", "destination": "/platform/security-and-guardrails/approval-workflows", "statusCode": 301 }, + { "source": "/platform/audit-log", "destination": "/platform/security-and-guardrails/audit-log", "statusCode": 301 }, + { "source": "/platform/feature-obfuscation", "destination": "/platform/security-and-guardrails/feature-obfuscation", "statusCode": 301 }, + { "source": "/platform/permissions", "destination": "/platform/security-and-guardrails/permissions", "statusCode": 301 }, + { "source": "/platform/sdk-visibility", "destination": "/platform/security-and-guardrails/sdk-visibility", "statusCode": 301 }, + + { "source": "/platform/advanced-targeting/feature-opt-in", "destination": "/platform/testing-and-qa/feature-opt-in", "statusCode": 301 }, + { "source": "/platform/web-debugger", "destination": "/platform/testing-and-qa/web-debugger", "statusCode": 301 }, + { "source": "/platform/advanced-targeting/self-targeting", "destination": "/platform/testing-and-qa/self-targeting", "statusCode": 301 } + ], "rewrites": [ { "source": "/.well-known/ai-plugin.json", "destination": "/.well-known/ai-plugin.json" } From 3c9d5bc7cd4ec9dd3eb49ca41739d5a388ca7dc0 Mon Sep 17 00:00:00 2001 From: leslie-lau Date: Tue, 29 Oct 2024 14:48:27 -0400 Subject: [PATCH 2/9] Fix folder spelling error and links --- docs/best-practices/feature-grouping.md | 2 +- docs/best-practices/product-led-experimentation.md | 2 +- .../{feature-managment => feature-management}/_category_.yml | 0 .../feature-hierarchy.md | 0 .../{feature-managment => feature-management}/feature-types.md | 0 .../status-and-lifecycle.md | 0 6 files changed, 2 insertions(+), 2 deletions(-) rename docs/platform/{feature-managment => feature-management}/_category_.yml (100%) rename docs/platform/{feature-managment => feature-management}/feature-hierarchy.md (100%) rename docs/platform/{feature-managment => feature-management}/feature-types.md (100%) rename docs/platform/{feature-managment => feature-management}/status-and-lifecycle.md (100%) diff --git a/docs/best-practices/feature-grouping.md b/docs/best-practices/feature-grouping.md index 7abe7099..68b3f69f 100644 --- a/docs/best-practices/feature-grouping.md +++ b/docs/best-practices/feature-grouping.md @@ -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-and-variations/variations).** 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](/essentials/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) diff --git a/docs/best-practices/product-led-experimentation.md b/docs/best-practices/product-led-experimentation.md index e4fbe227..4e452411 100644 --- a/docs/best-practices/product-led-experimentation.md +++ b/docs/best-practices/product-led-experimentation.md @@ -20,7 +20,7 @@ To complete this guide, you may want to review the following topics: - [Creating and Managing Variations](/essentials/variables-and-variations/variations) - [Random Distribution Targeting](/essentials/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) +- [Creating a Metric](/platform/experimentation/creating-and-managing-metrics) and [Metric Types](/platform/experimentation/creating-and-managing-metrics#types) ## Conducting Experiments: A Collaborative Approach diff --git a/docs/platform/feature-managment/_category_.yml b/docs/platform/feature-management/_category_.yml similarity index 100% rename from docs/platform/feature-managment/_category_.yml rename to docs/platform/feature-management/_category_.yml diff --git a/docs/platform/feature-managment/feature-hierarchy.md b/docs/platform/feature-management/feature-hierarchy.md similarity index 100% rename from docs/platform/feature-managment/feature-hierarchy.md rename to docs/platform/feature-management/feature-hierarchy.md diff --git a/docs/platform/feature-managment/feature-types.md b/docs/platform/feature-management/feature-types.md similarity index 100% rename from docs/platform/feature-managment/feature-types.md rename to docs/platform/feature-management/feature-types.md diff --git a/docs/platform/feature-managment/status-and-lifecycle.md b/docs/platform/feature-management/status-and-lifecycle.md similarity index 100% rename from docs/platform/feature-managment/status-and-lifecycle.md rename to docs/platform/feature-management/status-and-lifecycle.md From 79a91edcf3919393cbdc0cdee965bab0efe15dd6 Mon Sep 17 00:00:00 2001 From: leslie-lau Date: Tue, 29 Oct 2024 14:57:06 -0400 Subject: [PATCH 3/9] Fix link in feature-experimentation page --- docs/platform/experimentation/feature-experimentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/platform/experimentation/feature-experimentation.md b/docs/platform/experimentation/feature-experimentation.md index c9e24ee8..570d2215 100644 --- a/docs/platform/experimentation/feature-experimentation.md +++ b/docs/platform/experimentation/feature-experimentation.md @@ -91,7 +91,7 @@ Statistical significance has been achieved if this number is either 0% or 100%. ## Experimentation using a Custom Property for Randomization :::info -For documentation on this functionality outside of the context of experimentation you can check out our documentation dedicated to this topic [here](/platform/advanced-targeting/randomize-using-custom-property). +For documentation on this functionality outside of the context of experimentation you can check out our documentation dedicated to this topic [here](/essentials/targeting/randomize-using-custom-property). ::: DevCycle typically uses the User ID as the primary key for Feature rollouts and randomization. However, in certain scenarios, Features you release are intended to be rolled out to a cohort of users vs an individual user. For example, a new feature in a B2B platform might impact an entire organization rather than a single user within that organization. In such cases, you can randomize and rollout by using a Custom Property. From 82e72b4006ef4f5c94b90ed8e689e2f122181004 Mon Sep 17 00:00:00 2001 From: leslie-lau Date: Wed, 30 Oct 2024 10:59:19 -0400 Subject: [PATCH 4/9] Add redirect link for targeting-overview page --- vercel.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vercel.json b/vercel.json index 298b52fc..4b6ace9b 100644 --- a/vercel.json +++ b/vercel.json @@ -10,7 +10,7 @@ { "source": "/home/", "destination": "/", "statusCode": 301 }, { "source": "/tools-and-integrations/cli", "destination": "/cli", "statusCode": 301 }, { "source": "/:path*/getting-started/:path*", "destination": "/introduction/quickstart", "statusCode": 301 }, - { "source": "/home/feature-management/features-and-variables/targeting-users", "destination": "/essentials/targeting", "statusCode": 301 }, + { "source": "/home/feature-management/features-and-variables/targeting-users", "destination": "/essentials/targeting/targeting-overview", "statusCode": 301 }, { "source": "/home/feature-management/features-and-variables/variables-and-variations", "destination": "/essentials/variables-and-variations/variables", "statusCode": 301 }, { "source": "/home/feature-management/features-and-variables/custom-properties", "destination": "/essentials/targeting/custom-properties", "statusCode": 301 }, { "source": "/home/feature-management/features-and-variables/sdk-visibility", "destination": "/platform/security-and-guardrails/sdk-visibility", "statusCode": 301 }, @@ -32,6 +32,7 @@ { "source": "/introduction/key-features", "destination": "/essentials/key-features", "statusCode": 301 }, { "source": "/introduction/architecture", "destination": "/essentials/architecture", "statusCode": 301 }, + { "source": "/essentials/targeting", "destination": "/essentials/targeting/targeting-overview", "statusCode": 301 }, { "source": "/platform/advanced-targeting/audiences", "destination": "/essentials/targeting/audiences", "statusCode": 301 }, { "source": "/platform/advanced-targeting/custom-properties", "destination": "/essentials/targeting/custom-properties", "statusCode": 301 }, { "source": "/platform/advanced-targeting/random-variations", "destination": "/essentials/targeting/random-variations", "statusCode": 301 }, From a92a9ed8c0f964019595a72c620df60589b663fe Mon Sep 17 00:00:00 2001 From: leslie-lau Date: Wed, 30 Oct 2024 11:43:08 -0400 Subject: [PATCH 5/9] Fix variable schemas and defaults redirect --- vercel.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vercel.json b/vercel.json index 4b6ace9b..06d1633d 100644 --- a/vercel.json +++ b/vercel.json @@ -42,8 +42,8 @@ { "source": "/essentials/variables", "destination": "/essentials/variables-and-variations/variables", "statusCode": 301 }, { "source": "/essentials/variations", "destination": "/essentials/variables-and-variations/variations", "statusCode": 301 }, - { "source": "/essentials/advanced-variables/variable-defaults", "destination": "/essentials/variables-and-variations/variable-defaults", "statusCode": 301 }, - { "source": "/essentials/advanced-variables/variable-schemas", "destination": "/essentials/variables-and-variations/variable-schemas", "statusCode": 301 }, + { "source": "/platform/advanced-variables/variable-defaults", "destination": "/essentials/variables-and-variations/variable-defaults", "statusCode": 301 }, + { "source": "/platform/advanced-variables/variable-schemas", "destination": "/essentials/variables-and-variations/variable-schemas", "statusCode": 301 }, { "source": "/platform/metrics/feature-flag-reach", "destination": "/essentials/variables-and-variations/feature-flag-reach", "statusCode": 301 }, { "source": "/essentials/organizations", "destination": "/platform/account-management/organizations", "statusCode": 301 }, From 0cd274c317d7444f72f7bbf1bdaa55d8ad7b2ce5 Mon Sep 17 00:00:00 2001 From: leslie-lau Date: Wed, 30 Oct 2024 16:16:23 -0400 Subject: [PATCH 6/9] Create Miscellaneous section in Platform --- docs/essentials/targeting/edgedb.md | 2 +- .../randomize-using-custom-property.md | 2 +- docs/essentials/targeting/self-targeting.md | 32 ---------- .../feature-flag-reach.md | 2 +- .../variable-schemas.md | 64 ------------------- .../account-management/_category_.yml | 2 +- docs/platform/miscellaneous/_category_.yml | 2 + .../{ => miscellaneous}/custom-domains.md | 2 +- .../feature-opt-in.mdx | 2 +- docs/platform/{ => miscellaneous}/webhooks.md | 2 +- docs/platform/testing-and-qa/_category_.yml | 2 +- 11 files changed, 10 insertions(+), 104 deletions(-) delete mode 100644 docs/essentials/targeting/self-targeting.md delete mode 100644 docs/essentials/variables-and-variations/variable-schemas.md create mode 100644 docs/platform/miscellaneous/_category_.yml rename docs/platform/{ => miscellaneous}/custom-domains.md (99%) rename docs/platform/{testing-and-qa => miscellaneous}/feature-opt-in.mdx (99%) rename docs/platform/{ => miscellaneous}/webhooks.md (99%) diff --git a/docs/essentials/targeting/edgedb.md b/docs/essentials/targeting/edgedb.md index 163e3401..9ca190d8 100644 --- a/docs/essentials/targeting/edgedb.md +++ b/docs/essentials/targeting/edgedb.md @@ -1,6 +1,6 @@ --- title: EdgeDB (Stored Custom Properties) -sidebar_position: 8 +sidebar_position: 7 --- # EdgeDB and Stored Custom Properties diff --git a/docs/essentials/targeting/randomize-using-custom-property.md b/docs/essentials/targeting/randomize-using-custom-property.md index c09beee3..5f0287ac 100644 --- a/docs/essentials/targeting/randomize-using-custom-property.md +++ b/docs/essentials/targeting/randomize-using-custom-property.md @@ -1,6 +1,6 @@ --- title: Randomize using a Custom Property -sidebar_position: 7 +sidebar_position: 6 --- :::warning diff --git a/docs/essentials/targeting/self-targeting.md b/docs/essentials/targeting/self-targeting.md deleted file mode 100644 index f2a6c949..00000000 --- a/docs/essentials/targeting/self-targeting.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Self-Targeting -sidebar_position: 6 ---- - -Self-Targeting is a DevCycle QA & debugging feature that allows you to easily serve yourself different variations of a feature without having to modify targeting rules in each environment. To leverage this feature, you must set up your DevCycle Identity by associating an SDK User ID to your DevCycle user profile. - -![Self-Targeting Slideout on Feature Page](/aug-2023-self-targeting-slideout-open-feature-form.png) - -On each feature, you will see a Self-Targeting section within the Users & Targeting tab. This section will show you at-a-glance if you have any active Self-Targeting overrides for a feature, and how many other team-members within the current project have Self-Targeting overrides set as well. - -Within the slide-out, you can setup your DevCycle Identity, select Self-Targeting overrides, and see the other team members that are currently Self-Targeting for that feature, including the variation and environment they have active overrides in. - -## DevCycle Identity - -Setup your DevCycle Identity by entering the user ID you are providing to the DevCycle SDK, and which uniquely identifies you. Doing so unlocks debugging features such as Self-Targeting, a feature that allows you to override targeting rules to deliver different variations of the feature to yourself. - -You can setup & update your DVC Identity within the Self-Targeting slide-out itself OR on your profile page within your project settings. - -![DVC Identity Self-Targeting Slide-out](/august-2023-self-targeting-dvc-id.png) - -## Self-Targeting Override - -Once you’ve setup your DevCycle Identity, you are able to use Self-Targeting! Navigate to the feature you’d like to target yourself in and open the Self-Targeting slide-out by clicking on the Manage Self-Targeting button. - -Within the Environment & Variations section of the slide-out, you will see a list of all environments along with a dropdown with all variations that have been created for the feature. Select a variation for one or more environments, and click Apply Changes. - -![Self-Targeting Slide-out Variation](/august-2023-self-targeting-slideout-var.png) - -To view all of the Self-Targeting feature overrides you’re currently being served, navigate to the DevCycle Identity section on your profile settings page (Project Settings —> DevCycle Identity). From where, you’ll also be able to clear all existing Overrides for the specified project. - -![DVC Identity Profile Page](/august-2023-DVC-id-profile-page-overrides.png) diff --git a/docs/essentials/variables-and-variations/feature-flag-reach.md b/docs/essentials/variables-and-variations/feature-flag-reach.md index 7c38307c..cbb9a9a6 100644 --- a/docs/essentials/variables-and-variations/feature-flag-reach.md +++ b/docs/essentials/variables-and-variations/feature-flag-reach.md @@ -1,6 +1,6 @@ --- title: Feature Flag Reach -sidebar_position: 5 +sidebar_position: 4 --- When a Feature is running, DevCycle automatically provides a quick way to view how the feature is running across all SDKs or APIs it is being used in by breaking down by variable. This document serves to explain this section in more depth. diff --git a/docs/essentials/variables-and-variations/variable-schemas.md b/docs/essentials/variables-and-variations/variable-schemas.md deleted file mode 100644 index 713c4f23..00000000 --- a/docs/essentials/variables-and-variations/variable-schemas.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Variable Schemas -sidebar_position: 4 ---- - -Variable Schemas is a new DevCycle feature that lets you define allowable values for your variables when creating feature variations. Variable Schemas help developers ensure that team members can easily select allowable inputs for variable values without being nervous that a certain value might cause an application crash or negatively impact end user experience. - -## Defining a Variable Schema - -To define a Variable Schema for a variable, navigate to the Schema section of the Variable Details page to select and define a schema for that particular variable. Variable Schemas can be added to both associated or unassociated variables. - -There are three different types of schemas that you can define for your variable: - -- Enum (*String or Number Variable*) -- Regex (*String Variable*) -- JSON (*JSON Variable*) - -Each schema type requires a **Brief Description**. For example, when defining an Enum schema for a String variable that's meant for a greeting message on a sign up page, a sample description could be “Greeting options for sign-up page.” - -You also must set an **Example Value**. The example value will be used as the initial value for each variation when adding this variable to a feature. - -:::caution -You will be unable to define or edit a Schema that makes the associated Feature’s values invalid. -::: - -An **Enum** schema will allow you to input allowable values for a string or number variable. - -If “Enum” type is selected, users must define the allowable values in the **Enum Values** input field. - -*Enum Example:* -![Enum Schema Example](/june-2023-enum-schema-example.png) - - -A **Regex** schema allows you to define a regex pattern. Variation values for a variable with a Regex schema type must match the pattern defined in the schema. - -*Regex Example:* -![Regex Schema Example](/june-2023-regex-schema-example.png) - -A **JSON** schema will allow DVC users to define a JSON schema that variation values must follow. If “JSON schema” type is selected, users can define the schema below in a JSON editor. Example JSON Schemas and more information about them can be found [here](https://json-schema.org/learn/miscellaneous-examples.html#basic). - -*JSON Example:* -![JSON Schema Example](/june-2023-json-schema-example.png) - -Once a variable is created and schema has been defined, click save and then you can add this variable to a feature. - -## Adding a Variable with a Defined Schema - -Once the variable is created and a schema has been defined, you can add it to a feature like any other unassociated variable and select it from the dropdown in the Add New Variable modal within a feature. - -![Add Variable Modal with Schema Example](/june-2023-adding-variable-with-schema-modal.png) - -If a variable that has a schema is selected, an info box will appear that outlines the schema type and has the Brief Description of the schema defined on the Variable details page. - -You can also click on the word *"here”* to open a side panel which displays the schema definition along with other details about the variable. - -![Add New Variable JSON Schema Selected](/june-2023-add-new-variable-json-schema-selected.png) - - -## Adding a New Variation for Variables with a Defined Schema - -When adding a new variation for a variable with a schema, you can click on the variable name (e.g. *inline-search* in this example) to open a side panel which displays the schema definition along with other details about the variable. - -![Add New Variable JSON Schema Selected](/june-2023-add-new-variation-with-schema.png) - diff --git a/docs/platform/account-management/_category_.yml b/docs/platform/account-management/_category_.yml index 4841b93d..a476a7a9 100644 --- a/docs/platform/account-management/_category_.yml +++ b/docs/platform/account-management/_category_.yml @@ -1,2 +1,2 @@ label: 'Account Management' -position: 5 +position: 3 diff --git a/docs/platform/miscellaneous/_category_.yml b/docs/platform/miscellaneous/_category_.yml new file mode 100644 index 00000000..57d5da27 --- /dev/null +++ b/docs/platform/miscellaneous/_category_.yml @@ -0,0 +1,2 @@ +label: 'Miscellaneous' +position: 6 diff --git a/docs/platform/custom-domains.md b/docs/platform/miscellaneous/custom-domains.md similarity index 99% rename from docs/platform/custom-domains.md rename to docs/platform/miscellaneous/custom-domains.md index 8d31d03f..11f40883 100644 --- a/docs/platform/custom-domains.md +++ b/docs/platform/miscellaneous/custom-domains.md @@ -1,6 +1,6 @@ --- title: Custom Domains -sidebar_position: 6 +sidebar_position: 1 --- # Custom Domains diff --git a/docs/platform/testing-and-qa/feature-opt-in.mdx b/docs/platform/miscellaneous/feature-opt-in.mdx similarity index 99% rename from docs/platform/testing-and-qa/feature-opt-in.mdx rename to docs/platform/miscellaneous/feature-opt-in.mdx index 5e531c42..ef1b688c 100644 --- a/docs/platform/testing-and-qa/feature-opt-in.mdx +++ b/docs/platform/miscellaneous/feature-opt-in.mdx @@ -1,6 +1,6 @@ --- title: Feature Opt-In -sidebar_position: 1 +sidebar_position: 2 --- # Feature Opt-In diff --git a/docs/platform/webhooks.md b/docs/platform/miscellaneous/webhooks.md similarity index 99% rename from docs/platform/webhooks.md rename to docs/platform/miscellaneous/webhooks.md index deb9ed9f..0d6d45d2 100644 --- a/docs/platform/webhooks.md +++ b/docs/platform/miscellaneous/webhooks.md @@ -1,6 +1,6 @@ --- title: Webhooks -sidebar_position: 7 +sidebar_position: 3 --- This topic explains how to create and use Webhooks in DevCycle. diff --git a/docs/platform/testing-and-qa/_category_.yml b/docs/platform/testing-and-qa/_category_.yml index 913fcc2c..802f6270 100644 --- a/docs/platform/testing-and-qa/_category_.yml +++ b/docs/platform/testing-and-qa/_category_.yml @@ -1,2 +1,2 @@ label: 'Testing and QA' -position: 3 +position: 5 From c0d649f0dfff06575707764b8fb2845d20321a8f Mon Sep 17 00:00:00 2001 From: leslie-lau Date: Wed, 30 Oct 2024 16:53:53 -0400 Subject: [PATCH 7/9] Rename miscellaneous to extras and add redirects --- docs/essentials/key-features.md | 4 ++-- docs/integrations/index.mdx | 2 +- docs/platform/extras/_category_.yml | 2 ++ .../{miscellaneous => extras}/custom-domains.md | 0 .../{miscellaneous => extras}/feature-opt-in.mdx | 0 docs/platform/{miscellaneous => extras}/webhooks.md | 0 docs/platform/miscellaneous/_category_.yml | 2 -- docs/sdk/client-side-sdks/nextjs/nextjs-usage-app.md | 2 +- docs/sdk/features.md | 4 ++-- vercel.json | 11 +++++++---- 10 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 docs/platform/extras/_category_.yml rename docs/platform/{miscellaneous => extras}/custom-domains.md (100%) rename docs/platform/{miscellaneous => extras}/feature-opt-in.mdx (100%) rename docs/platform/{miscellaneous => extras}/webhooks.md (100%) delete mode 100644 docs/platform/miscellaneous/_category_.yml diff --git a/docs/essentials/key-features.md b/docs/essentials/key-features.md index c280032b..c232ec62 100644 --- a/docs/essentials/key-features.md +++ b/docs/essentials/key-features.md @@ -50,12 +50,12 @@ Modern architecture means distributed systems running at the edge. Relevant targ Here's how: - Store user attributes in a [fast, globally-replicated database](/essentials/targeting/edgedb) and target flags based on those attributes. -- Easily add a full [feature opt-in](/platform/testing-and-qa/feature-opt-in) experience to your application to allow end users to control their experience. +- 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/integrations/index.mdx b/docs/integrations/index.mdx index ea18fbd9..18bc1703 100644 --- a/docs/integrations/index.mdx +++ b/docs/integrations/index.mdx @@ -68,7 +68,7 @@ DevCycle APIs, as well as third party integrations to connect DevCycle to the to }, { type: 'link', - href: '/platform/webhooks', + href: '/platform/extras/webhooks', description: 'Connect apps and services to DevCycle. ', label: 'Webhooks', icon: 'ph:webhooks-logo', diff --git a/docs/platform/extras/_category_.yml b/docs/platform/extras/_category_.yml new file mode 100644 index 00000000..2f9f8aaf --- /dev/null +++ b/docs/platform/extras/_category_.yml @@ -0,0 +1,2 @@ +label: 'Extras' +position: 6 diff --git a/docs/platform/miscellaneous/custom-domains.md b/docs/platform/extras/custom-domains.md similarity index 100% rename from docs/platform/miscellaneous/custom-domains.md rename to docs/platform/extras/custom-domains.md diff --git a/docs/platform/miscellaneous/feature-opt-in.mdx b/docs/platform/extras/feature-opt-in.mdx similarity index 100% rename from docs/platform/miscellaneous/feature-opt-in.mdx rename to docs/platform/extras/feature-opt-in.mdx diff --git a/docs/platform/miscellaneous/webhooks.md b/docs/platform/extras/webhooks.md similarity index 100% rename from docs/platform/miscellaneous/webhooks.md rename to docs/platform/extras/webhooks.md diff --git a/docs/platform/miscellaneous/_category_.yml b/docs/platform/miscellaneous/_category_.yml deleted file mode 100644 index 57d5da27..00000000 --- a/docs/platform/miscellaneous/_category_.yml +++ /dev/null @@ -1,2 +0,0 @@ -label: 'Miscellaneous' -position: 6 diff --git a/docs/sdk/client-side-sdks/nextjs/nextjs-usage-app.md b/docs/sdk/client-side-sdks/nextjs/nextjs-usage-app.md index 35583fd0..2f270101 100644 --- a/docs/sdk/client-side-sdks/nextjs/nextjs-usage-app.md +++ b/docs/sdk/client-side-sdks/nextjs/nextjs-usage-app.md @@ -218,7 +218,7 @@ that is available from the user getter will be used to provide the values for De are received while someone is viewing a statically-rendered page will still trigger a re-render of the page with the new configuration data. -If you wish to rebuild your static pages when a DevCycle configuration changes, consider setting up a [DevCycle Webhook](/platform/webhooks) to +If you wish to rebuild your static pages when a DevCycle configuration changes, consider setting up a [DevCycle Webhook](/platform/extras/webhooks) to trigger your build process. ## Advanced diff --git a/docs/sdk/features.md b/docs/sdk/features.md index 2191de01..31cfa581 100644 --- a/docs/sdk/features.md +++ b/docs/sdk/features.md @@ -298,7 +298,7 @@ Custom Domains is an enterprise feature and requires manual setup on both your e ::: -For instructions on setting up a custom domain, see [Custom Domains](/platform/custom-domains). +For instructions on setting up a custom domain, see [Custom Domains](/platform/extras/custom-domains). ## Realtime Updates @@ -345,5 +345,5 @@ globally. Every function within the SDK will reach out to these edge workers and extremely low latency. Cloud bucketing is required to use specific features such as [EdgeDB](/essentials/targeting/edgedb) and -[Feature Opt-In](/platform/testing-and-qa/feature-opt-in). If you aren't using these features, then Local Bucketing +[Feature Opt-In](/platform/extras/feature-opt-in). If you aren't using these features, then Local Bucketing is the recommended mode. diff --git a/vercel.json b/vercel.json index 06d1633d..0946962a 100644 --- a/vercel.json +++ b/vercel.json @@ -23,7 +23,7 @@ { "source": "/home/your-organization/:path*", "destination": "/platform/account-management/organizations", "statusCode": 301 }, { "source": "/home/demos/:path*", "destination": "/examples", "statusCode": 301 }, { "source": "/home/feature-management/edgedb/:path*", "destination": "/essentials/targeting/edgedb", "statusCode": 301 }, - { "source": "/home/feature-management/feature-opt-in/:path*", "destination": "/platform/testing-and-qa/feature-opt-in", "statusCode": 301 }, + { "source": "/home/feature-management/feature-opt-in/:path*", "destination": "/platform/extras/feature-opt-in", "statusCode": 301 }, { "source": "/tools-and-integrations/:path*", "destination": "/integrations/:path*", "statusCode": 301 }, { "source": "/tools-and-integrations/", "destination": "/integrations", "statusCode": 301 }, { "source": "/extras/:path*", "destination": "/platform/:path*", "statusCode": 301 }, @@ -43,7 +43,6 @@ { "source": "/essentials/variables", "destination": "/essentials/variables-and-variations/variables", "statusCode": 301 }, { "source": "/essentials/variations", "destination": "/essentials/variables-and-variations/variations", "statusCode": 301 }, { "source": "/platform/advanced-variables/variable-defaults", "destination": "/essentials/variables-and-variations/variable-defaults", "statusCode": 301 }, - { "source": "/platform/advanced-variables/variable-schemas", "destination": "/essentials/variables-and-variations/variable-schemas", "statusCode": 301 }, { "source": "/platform/metrics/feature-flag-reach", "destination": "/essentials/variables-and-variations/feature-flag-reach", "statusCode": 301 }, { "source": "/essentials/organizations", "destination": "/platform/account-management/organizations", "statusCode": 301 }, @@ -64,10 +63,14 @@ { "source": "/platform/feature-obfuscation", "destination": "/platform/security-and-guardrails/feature-obfuscation", "statusCode": 301 }, { "source": "/platform/permissions", "destination": "/platform/security-and-guardrails/permissions", "statusCode": 301 }, { "source": "/platform/sdk-visibility", "destination": "/platform/security-and-guardrails/sdk-visibility", "statusCode": 301 }, + { "source": "/platform/advanced-variables/variable-schemas", "destination": "/platform/security-and-guardrails/variable-schemas", "statusCode": 301 }, - { "source": "/platform/advanced-targeting/feature-opt-in", "destination": "/platform/testing-and-qa/feature-opt-in", "statusCode": 301 }, { "source": "/platform/web-debugger", "destination": "/platform/testing-and-qa/web-debugger", "statusCode": 301 }, - { "source": "/platform/advanced-targeting/self-targeting", "destination": "/platform/testing-and-qa/self-targeting", "statusCode": 301 } + { "source": "/platform/advanced-targeting/self-targeting", "destination": "/platform/testing-and-qa/self-targeting", "statusCode": 301 }, + + { "source": "/platform/custom-domains", "destination": "/platform/extras/custom-domains", "statusCode": 301 }, + { "source": "/platform/webhooks", "destination": "/platform/extras/webhooks", "statusCode": 301 }, + { "source": "/platform/advanced-targeting/feature-opt-in", "destination": "/platform/extras/feature-opt-in", "statusCode": 301 } ], "rewrites": [ From d2aac302af12e59bcc2a054d5c50acbbb2e062e1 Mon Sep 17 00:00:00 2001 From: leslie-lau Date: Thu, 31 Oct 2024 12:16:29 -0400 Subject: [PATCH 8/9] Fix redirects for variable-schemas --- docs/essentials/key-features.md | 2 +- docs/essentials/variables-and-variations/variables.md | 2 +- docs/platform/feature-management/feature-hierarchy.md | 2 +- docs/platform/security-and-guardrails/feature-obfuscation.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/essentials/key-features.md b/docs/essentials/key-features.md index c232ec62..8b8d0fcf 100644 --- a/docs/essentials/key-features.md +++ b/docs/essentials/key-features.md @@ -14,7 +14,7 @@ For feature flagging to be effective, all team members need to be able to operat Here's how: - 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](/essentials/variables-and-variations/variable-schemas). +- 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). diff --git a/docs/essentials/variables-and-variations/variables.md b/docs/essentials/variables-and-variations/variables.md index e3bfa15a..d517b44e 100644 --- a/docs/essentials/variables-and-variations/variables.md +++ b/docs/essentials/variables-and-variations/variables.md @@ -11,7 +11,7 @@ By default, upon creation of a Feature, a `Boolean Variable`` will be created wh :::tip Already understand the variable essentials? Be sure to check out our advanced variable documentation which covers topics like: -- [Variable Schemas](/essentials/variables-and-variations/variable-schemas) +- [Variable Schemas](/platform/security-and-guardrails/variable-schemas) ::: --- diff --git a/docs/platform/feature-management/feature-hierarchy.md b/docs/platform/feature-management/feature-hierarchy.md index b8caf70c..8760f3a6 100644 --- a/docs/platform/feature-management/feature-hierarchy.md +++ b/docs/platform/feature-management/feature-hierarchy.md @@ -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](/essentials/variables-and-variations/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`. diff --git a/docs/platform/security-and-guardrails/feature-obfuscation.md b/docs/platform/security-and-guardrails/feature-obfuscation.md index faf28595..afe3c7e9 100644 --- a/docs/platform/security-and-guardrails/feature-obfuscation.md +++ b/docs/platform/security-and-guardrails/feature-obfuscation.md @@ -87,7 +87,7 @@ export const MY_SECOND_VARIABLE = 'dvc_obfs_359f6c73757fe30a9950ce39333c2329915a :::info The generated file also includes Typescript definitions of each Variable, which allows you to make your DevCycle usage type-safe by enforcing the correct datatype for each Variable. When using an -[enum schema](https://devcycle-docs-git-obfuscation-devcyclehq.vercel.app/essentials/variables-and-variations/variable-schemas), +[enum schema](/platform/security-and-guardrails/variable-schemas), the types will also enforce that one of the allowed values is used. For more information, see the documentation for [Typescript with the Javascript SDK](/sdk/client-side-sdks/javascript/javascript-typescript) ::: From 7ab9fab56a643a723b73ec7731b6121b9bdbf3a1 Mon Sep 17 00:00:00 2001 From: leslie-lau Date: Thu, 31 Oct 2024 14:13:10 -0400 Subject: [PATCH 9/9] Move Feature Hierarchy and Types and rename Feature Management --- .../import-from-anywhere.md | 4 +- .../engineering-led-experiments.md | 4 +- docs/best-practices/feature-grouping.md | 10 ++--- .../product-led-experimentation.md | 14 +++---- docs/best-practices/serverless/azure.md | 2 +- .../serverless/serverless-cloud-functions.md | 6 +-- docs/best-practices/tech-debt.md | 2 +- docs/cli-guides/targeting.md | 4 +- docs/essentials/architecture.md | 2 +- .../feature-hierarchy.md | 4 +- .../feature-types.md | 2 +- docs/essentials/features.md | 12 +++--- docs/essentials/key-features.md | 6 +-- docs/essentials/overview.md | 2 +- docs/introduction/quickstart.md | 8 ++-- .../account-management/environments.md | 2 +- docs/platform/account-management/projects.md | 2 +- .../creating-and-managing-metrics.md | 2 +- .../feature-experimentation.md | 6 +-- docs/platform/feature-flags/_category_.yml | 2 + .../status-and-lifecycle.md | 2 +- .../feature-flags}/targeting/_category_.yml | 2 +- .../feature-flags}/targeting/audiences.md | 0 .../targeting/custom-properties.md | 6 +-- .../feature-flags}/targeting/edgedb.md | 0 .../targeting/random-variations.md | 0 .../randomize-using-custom-property.md | 2 +- .../feature-flags}/targeting/rollouts.md | 0 .../targeting/targeting-overview.md | 12 +++--- .../variables-and-variations/_category_.yml | 2 +- .../feature-flag-reach.md | 0 .../variable-defaults.md | 0 .../variables-and-variations/variables.md | 4 +- .../variables-and-variations/variations.md | 4 +- .../feature-management/_category_.yml | 2 - .../security-and-guardrails/audit-log.md | 2 +- .../client-side-sdks/android/android-usage.md | 2 +- .../client-side-sdks/flutter/flutter-usage.md | 2 +- docs/sdk/client-side-sdks/ios/ios-usage.md | 2 +- .../javascript/javascript-typescript.md | 2 +- .../react/react-typescript.md | 2 +- .../sdk/client-side-sdks/react/react-usage.md | 2 +- docs/sdk/client-side-sdks/roku/roku-usage.md | 2 +- docs/sdk/features.md | 12 +++--- .../server-side-sdks/dotnet/dotnet-usage.md | 2 +- docs/sdk/server-side-sdks/dotnet/dotnet.md | 2 +- docs/sdk/server-side-sdks/go/go-usage.md | 2 +- docs/sdk/server-side-sdks/go/go.md | 2 +- docs/sdk/server-side-sdks/java/java-usage.md | 2 +- docs/sdk/server-side-sdks/java/java.md | 2 +- docs/sdk/server-side-sdks/node/node-usage.md | 2 +- docs/sdk/server-side-sdks/node/node.md | 2 +- docs/sdk/server-side-sdks/php/php-usage.md | 2 +- docs/sdk/server-side-sdks/php/php.md | 2 +- .../server-side-sdks/python/python-usage.md | 2 +- docs/sdk/server-side-sdks/python/python.md | 2 +- docs/sdk/server-side-sdks/ruby/ruby-usage.md | 2 +- docs/sdk/server-side-sdks/ruby/ruby.md | 2 +- vercel.json | 38 +++++++++---------- 59 files changed, 113 insertions(+), 113 deletions(-) rename docs/{platform/feature-management => essentials}/feature-hierarchy.md (96%) rename docs/{platform/feature-management => essentials}/feature-types.md (99%) create mode 100644 docs/platform/feature-flags/_category_.yml rename docs/platform/{feature-management => feature-flags}/status-and-lifecycle.md (97%) rename docs/{essentials => platform/feature-flags}/targeting/_category_.yml (61%) rename docs/{essentials => platform/feature-flags}/targeting/audiences.md (100%) rename docs/{essentials => platform/feature-flags}/targeting/custom-properties.md (95%) rename docs/{essentials => platform/feature-flags}/targeting/edgedb.md (100%) rename docs/{essentials => platform/feature-flags}/targeting/random-variations.md (100%) rename docs/{essentials => platform/feature-flags}/targeting/randomize-using-custom-property.md (83%) rename docs/{essentials => platform/feature-flags}/targeting/rollouts.md (100%) rename docs/{essentials => platform/feature-flags}/targeting/targeting-overview.md (95%) rename docs/{essentials => platform/feature-flags}/variables-and-variations/_category_.yml (73%) rename docs/{essentials => platform/feature-flags}/variables-and-variations/feature-flag-reach.md (100%) rename docs/{essentials => platform/feature-flags}/variables-and-variations/variable-defaults.md (100%) rename docs/{essentials => platform/feature-flags}/variables-and-variations/variables.md (95%) rename docs/{essentials => platform/feature-flags}/variables-and-variations/variations.md (86%) delete mode 100644 docs/platform/feature-management/_category_.yml 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 5e11d7bf..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](/essentials/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! +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 @@ -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.](/essentials/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 1bac5084..3617c2fb 100644 --- a/docs/best-practices/engineering-led-experiments.md +++ b/docs/best-practices/engineering-led-experiments.md @@ -14,8 +14,8 @@ 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-and-variations/variations) -- [Random Distribution Targeting](/essentials/targeting/random-variations) +- [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) diff --git a/docs/best-practices/feature-grouping.md b/docs/best-practices/feature-grouping.md index 68b3f69f..d03193db 100644 --- a/docs/best-practices/feature-grouping.md +++ b/docs/best-practices/feature-grouping.md @@ -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-and-variations/variations).** 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-and-variations/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/targeting-overview). +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/targeting-overview). +[Read here to learn more about how to Target Users](/platform/feature-flags/targeting/targeting-overview). ::: @@ -90,4 +90,4 @@ Here are similar resources to help with organizing Feature Flags: - [Feature Types](/essentials/features) - [Effectively Organizing Your Feature Flags](/best-practices/effectively-organizing-feature-flags) -- [Creating Variables & Variations](/essentials/variables-and-variations/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 4e452411..c7f4c2bf 100644 --- a/docs/best-practices/product-led-experimentation.md +++ b/docs/best-practices/product-led-experimentation.md @@ -16,9 +16,9 @@ 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](/platform/feature-management/feature-hierarchy) -- [Creating and Managing Variations](/essentials/variables-and-variations/variations) -- [Random Distribution Targeting](/essentials/targeting/random-variations) +- [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) @@ -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](/essentials/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](/platform/feature-management/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) @@ -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](/essentials/targeting/rollouts) 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](/platform/feature-management/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/serverless/azure.md b/docs/best-practices/serverless/azure.md index 25ffa175..6f2d50d0 100644 --- a/docs/best-practices/serverless/azure.md +++ b/docs/best-practices/serverless/azure.md @@ -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](/essentials/targeting/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/serverless-cloud-functions.md b/docs/best-practices/serverless/serverless-cloud-functions.md index e48fce41..532db2e8 100644 --- a/docs/best-practices/serverless/serverless-cloud-functions.md +++ b/docs/best-practices/serverless/serverless-cloud-functions.md @@ -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?](/essentials/targeting/edgedb) +[What is EdgeDB?](/platform/feature-flags/targeting/edgedb) -[Use Cases of EdgeDB ](/essentials/targeting/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](/essentials/targeting/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 923bae64..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](/platform/feature-management/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 c198d523..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)](/essentials/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](/essentials/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/architecture.md b/docs/essentials/architecture.md index f31da9e7..95e68acf 100644 --- a/docs/essentials/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](/essentials/targeting/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/platform/feature-management/feature-hierarchy.md b/docs/essentials/feature-hierarchy.md similarity index 96% rename from docs/platform/feature-management/feature-hierarchy.md rename to docs/essentials/feature-hierarchy.md index 8760f3a6..c315b1f4 100644 --- a/docs/platform/feature-management/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. @@ -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](/platform/feature-management/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/platform/feature-management/feature-types.md b/docs/essentials/feature-types.md similarity index 99% rename from docs/platform/feature-management/feature-types.md rename to docs/essentials/feature-types.md index fc3583ef..c9a58350 100644 --- a/docs/platform/feature-management/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/essentials/features.md b/docs/essentials/features.md index 9a765698..5b079271 100644 --- a/docs/essentials/features.md +++ b/docs/essentials/features.md @@ -6,7 +6,7 @@ sidebar_class_name: hidden > Features are the main elements that you want to control or experiment with in your application. They can be anything from a new UI element to a backend algorithm. :::info -When creating a Feature in DevCycle, you will be able to choose a [Feature Type](/platform/feature-management/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 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. ::: --- @@ -18,11 +18,11 @@ The Feature Dashboard is where all of your features can be viewed, edited, and f | Column | Description | |--------|----------------------------| | Creator | This will show the icon of the user who created this Feature. | -| Status | The Feature's Current [Status](/platform/feature-management/status-and-lifecycle). This indicates the Feature's current position in the Development [LifeCycle](/platform/feature-management/status-and-lifecycle). | +| Status | The Feature's Current [Status](/platform/feature-flags/status-and-lifecycle). This indicates the Feature's current position in the Development [LifeCycle](/platform/feature-flags/status-and-lifecycle). | | Name | The Feature's name. This can be changed at any time by editing the Feature. | | Key | This is the feature's Key. Use this key to reference the Feature in the SDKs or APIs. | | Feature type | The selected type of the Feature. Use this to organize your Features. | -| # Of Variables | This will show a count of how many variables are used within this Feature. To learn more read [Creating Variables and Variations](/essentials/variables-and-variations/variables) | +| # Of Variables | This will show a count of how many variables are used within this Feature. To learn more read [Creating Variables and Variations](/platform/feature-flags/variables-and-variations/variables) | | Edit | Click this to edit on the row the Feature. | Use the search input to search by Name, Key, or Description. The filters can be used to filter by Type or Creator. Each column header can be clicked to sort the column. @@ -37,7 +37,7 @@ Use the search input to search by Name, Key, or Description. The filters can be From this page, you can create a Feature Flag by clicking "Create New Feature" or the `+` in the top bar. -A screen for deciding your Feature Type will now appear. To read more about the feature types and their uses, read [DevCycle Feature Types](/platform/feature-management/feature-types). +A screen for deciding your Feature Type will now appear. To read more about the feature types and their uses, read [DevCycle Feature Types](/essentials/feature-types). After choosing a type, the information modal will appear prompting you to enter the following information: @@ -80,9 +80,9 @@ Feature settings including name, key, and type can be changed from feature page ## Archiving a Feature -Archiving is the terminal state for Features that have reached the end of their lifecycle, were never implemented in code, or have become entirely obsolete. See [Status & Lifecyle](/platform/feature-management/status-and-lifecycle) for more information on how to manage Feature Lifecycles in DevCycle. +Archiving is the terminal state for Features that have reached the end of their lifecycle, were never implemented in code, or have become entirely obsolete. See [Status & Lifecyle](/platform/feature-flags/status-and-lifecycle) for more information on how to manage Feature Lifecycles in DevCycle. -Upon Archive, the Feature is put into a read-only mode, and its Audit Logs are accessible and available for teams to review. All [Variables](/essentials/variables-and-variations/variables) will be archived along with the Feature *but* can be re-used and associated to other Features. All Variables in this Feature will begin to serve Default values in code. +Upon Archive, the Feature is put into a read-only mode, and its Audit Logs are accessible and available for teams to review. All [Variables](/platform/feature-flags/variables-and-variations/variables) will be archived along with the Feature *but* can be re-used and associated to other Features. All Variables in this Feature will begin to serve Default values in code. This action cannot be undone. diff --git a/docs/essentials/key-features.md b/docs/essentials/key-features.md index 8b8d0fcf..2810a8b6 100644 --- a/docs/essentials/key-features.md +++ b/docs/essentials/key-features.md @@ -32,7 +32,7 @@ Feature flags are most valuable when all team members are part of the process. A Here's how: - We never [bill](https://devcycle.com/pricing) on seats. -- Group multiple related flags and change their values together using [Features](/platform/feature-management/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/testing-and-qa/self-targeting). @@ -42,14 +42,14 @@ 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](/platform/feature-management/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](/essentials/targeting/edgedb) and target flags based on those attributes. +- 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 diff --git a/docs/essentials/overview.md b/docs/essentials/overview.md index de256a51..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/random-variations) 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/introduction/quickstart.md b/docs/introduction/quickstart.md index e738215e..b4e32f35 100644 --- a/docs/introduction/quickstart.md +++ b/docs/introduction/quickstart.md @@ -3,7 +3,7 @@ title: Quickstart Tutorial sidebar_position: 1 --- -In this tutorial, we'll be showcasing a great use case for feature flags, guiding you through the creation of a simple [React app](https://react.dev), connecting it to DevCycle, and implementing an [Ops feature flag](/platform/feature-management/feature-types#ops) to enable/disable a **Maintenance Mode** page. +In this tutorial, we'll be showcasing a great use case for feature flags, guiding you through the creation of a simple [React app](https://react.dev), connecting it to DevCycle, and implementing an [Ops feature flag](/essentials/feature-types#ops) to enable/disable a **Maintenance Mode** page. You'll learn about some of the core features of DevCycle, while experiencing firsthand just how easy it is to implement feature flags to enhance your application's functionality and flexibility. @@ -23,7 +23,7 @@ On the DevCycle Dashboard, access the "Feature Management" page via the `Feature To create a Feature: 1. Click either the "+" button or the "Create new Feature" button. -2. Choose an `Ops Feature` from the options modal. To read more about the Feature types and their uses, see [DevCycle Feature Types](/platform/feature-management/feature-types). +2. Choose an `Ops Feature` from the options modal. To read more about the Feature types and their uses, see [DevCycle Feature Types](/essentials/feature-types). 3. After choosing a type, name and describe your Feature: - **Feature name:** For our example, this will be `Maintenance Mode`. - **Feature key:** This key is how the Feature and its Variables will be referenced in code. (A key of `maintenance-mode` will be automatically suggested based on the entered name.) @@ -107,7 +107,7 @@ export default withDevCycleProvider({ **5. Access your Variable.** -Implement the code to evaluate the Variable that is being controlled by the Feature you just created. Read more about Variables [here](/essentials/variables-and-variations/variables). +Implement the code to evaluate the Variable that is being controlled by the Feature you just created. Read more about Variables [here](/platform/feature-flags/variables-and-variations/variables). To access the variable, you'll first need to import the `useVariableValue` hook at the top of `App.js` @@ -193,7 +193,7 @@ If everything is working, your maintenance mode should now be enabled, and you w ![alt text](/tutorial/tutorial-maintenance.png) -For more information on targeting based on user data, see the documentation on [Custom Properties here](/essentials/targeting/custom-properties). +For more information on targeting based on user data, see the documentation on [Custom Properties here](/platform/feature-flags/targeting/custom-properties). --- diff --git a/docs/platform/account-management/environments.md b/docs/platform/account-management/environments.md index 581e8ddf..b1b03227 100644 --- a/docs/platform/account-management/environments.md +++ b/docs/platform/account-management/environments.md @@ -22,7 +22,7 @@ Each environment has its own set of SDK keys for Client-Side, Mobile, and Server > **Every Feature you create will automatically be created on every environment within a project.** Each environment then has its own set of targeting rules. This means that a feature's code can be deployed across every environment, and its access can be managed on an environment level. -You can easily view a Feature's status across all environments by simply going to that Feature's management page, and the Feature's targeting or availability across each environment can be managed directly from that page in the associated targeting section. More details on [turning features on or off can be found here](/essentials/features), and more details on creating rules for your [Feature on each environment can be found here](/essentials/targeting/targeting-overview). +You can easily view a Feature's status across all environments by simply going to that Feature's management page, and the Feature's targeting or availability across each environment can be managed directly from that page in the associated targeting section. More details on [turning features on or off can be found here](/essentials/features), and more details on creating rules for your [Feature on each environment can be found here](/platform/feature-flags/targeting/targeting-overview). --- diff --git a/docs/platform/account-management/projects.md b/docs/platform/account-management/projects.md index 9a0573ad..0f162f4b 100644 --- a/docs/platform/account-management/projects.md +++ b/docs/platform/account-management/projects.md @@ -3,7 +3,7 @@ title: Projects sidebar_position: 2 --- -> Projects are nested within [organizations](/platform/account-management/organizations) and contain your [Features](/essentials/overview#features) and [Environments](/essentials/overview#environments) (and through them your [keys](/platform/account-management/keys), [variables](/essentials/variables-and-variations/variables) and [variations](/essentials/variables-and-variations/variations)). +> Projects are nested within [organizations](/platform/account-management/organizations) and contain your [Features](/essentials/overview#features) and [Environments](/essentials/overview#environments) (and through them your [keys](/platform/account-management/keys), [variables](/platform/feature-flags/variables-and-variations/variables) and [variations](/platform/feature-flags/variables-and-variations/variations)). --- diff --git a/docs/platform/experimentation/creating-and-managing-metrics.md b/docs/platform/experimentation/creating-and-managing-metrics.md index c93d6982..ed1b29ba 100644 --- a/docs/platform/experimentation/creating-and-managing-metrics.md +++ b/docs/platform/experimentation/creating-and-managing-metrics.md @@ -150,7 +150,7 @@ From here, useful information such as trends and patterns in the data can be use ### How do Metrics get calculated? -To calculate Metrics, DevCycle uses [the custom events sent via its API or SDKs](/sdk/features#track). Each Event has the information of which user sent it and which Feature and Variation they were in at that time. For optimal experiments, use Features with variations [randomly distributed across users](/essentials/targeting/random-variations). +To calculate Metrics, DevCycle uses [the custom events sent via its API or SDKs](/sdk/features#track). Each Event has the information of which user sent it and which Feature and Variation they were in at that time. For optimal experiments, use Features with variations [randomly distributed across users](/platform/feature-flags/targeting/random-variations). To read more on the queries behind the Metrics, see [How Metrics Are Calculated](/platform/experimentation/how-metrics-are-calculated) diff --git a/docs/platform/experimentation/feature-experimentation.md b/docs/platform/experimentation/feature-experimentation.md index 570d2215..7dd30678 100644 --- a/docs/platform/experimentation/feature-experimentation.md +++ b/docs/platform/experimentation/feature-experimentation.md @@ -5,7 +5,7 @@ sidebar_position: 1 ## Overview -At DevCycle we believe that experimentation should be a part of the natural lifecycle of all features. So no matter the [feature type](/essentials/features) selected, can be experimented on. Experiments can be as simple as comparing any target audiences against a metric, or can be fully [randomized](/essentials/targeting/random-variations) A/B tests using statistical methodologies. +At DevCycle we believe that experimentation should be a part of the natural lifecycle of all features. So no matter the [feature type](/essentials/features) selected, can be experimented on. Experiments can be as simple as comparing any target audiences against a metric, or can be fully [randomized](/platform/feature-flags/targeting/random-variations) A/B tests using statistical methodologies. This article outlines why and how to run and analyze experiments on your features within DevCycle. @@ -33,7 +33,7 @@ To run an experiment on any feature, all you need is two things: ### Comparing Multiple Variations -The primary concept of an experiment is the need to have at least two different experiences to compare performances. There are several ways in DevCycle to run multiple experiences for users. We go into depth on this in our [Targeting documentation](/essentials/targeting/targeting-overview). +The primary concept of an experiment is the need to have at least two different experiences to compare performances. There are several ways in DevCycle to run multiple experiences for users. We go into depth on this in our [Targeting documentation](/platform/feature-flags/targeting/targeting-overview). To get started with your first feature experiment, it is best to keep it simple and run a basic A/B test comparing two variations, one control and one treatment Variation, delivered randomly to all your users. @@ -91,7 +91,7 @@ Statistical significance has been achieved if this number is either 0% or 100%. ## Experimentation using a Custom Property for Randomization :::info -For documentation on this functionality outside of the context of experimentation you can check out our documentation dedicated to this topic [here](/essentials/targeting/randomize-using-custom-property). +For documentation on this functionality outside of the context of experimentation you can check out our documentation dedicated to this topic [here](/platform/feature-flags/targeting/randomize-using-custom-property). ::: DevCycle typically uses the User ID as the primary key for Feature rollouts and randomization. However, in certain scenarios, Features you release are intended to be rolled out to a cohort of users vs an individual user. For example, a new feature in a B2B platform might impact an entire organization rather than a single user within that organization. In such cases, you can randomize and rollout by using a Custom Property. diff --git a/docs/platform/feature-flags/_category_.yml b/docs/platform/feature-flags/_category_.yml new file mode 100644 index 00000000..064a1cb1 --- /dev/null +++ b/docs/platform/feature-flags/_category_.yml @@ -0,0 +1,2 @@ +label: 'Feature Flags' +position: 1 diff --git a/docs/platform/feature-management/status-and-lifecycle.md b/docs/platform/feature-flags/status-and-lifecycle.md similarity index 97% rename from docs/platform/feature-management/status-and-lifecycle.md rename to docs/platform/feature-flags/status-and-lifecycle.md index c7628986..80f88e21 100644 --- a/docs/platform/feature-management/status-and-lifecycle.md +++ b/docs/platform/feature-flags/status-and-lifecycle.md @@ -33,7 +33,7 @@ One could consider a Feature "Complete" once it has been tested, approved, and i The "Archived" status is designed to be the terminal state for Features that have reached the end of their lifecycle, were never implemented in code, or have become entirely obsolete. -A Feature should be archived after it has been cleaned up and its Variables removed from the codebase. Ideally, users should have also marked the Feature as **[Completed](/platform/feature-management/status-and-lifecycle#completed)** in DevCycle. +A Feature should be archived after it has been cleaned up and its Variables removed from the codebase. Ideally, users should have also marked the Feature as **[Completed](/platform/feature-flags/status-and-lifecycle#completed)** in DevCycle. Archiving Features helps clean up your dashboard and codebase by essentially putting the Feature into a read-only mode and hiding it from the standard dashboard views. Archived Features' Audit Logs are accessible and available for teams to review. diff --git a/docs/essentials/targeting/_category_.yml b/docs/platform/feature-flags/targeting/_category_.yml similarity index 61% rename from docs/essentials/targeting/_category_.yml rename to docs/platform/feature-flags/targeting/_category_.yml index b8ee357f..e53f4f89 100644 --- a/docs/essentials/targeting/_category_.yml +++ b/docs/platform/feature-flags/targeting/_category_.yml @@ -1,2 +1,2 @@ label: 'Targeting' -position: 5 +position: 2 diff --git a/docs/essentials/targeting/audiences.md b/docs/platform/feature-flags/targeting/audiences.md similarity index 100% rename from docs/essentials/targeting/audiences.md rename to docs/platform/feature-flags/targeting/audiences.md diff --git a/docs/essentials/targeting/custom-properties.md b/docs/platform/feature-flags/targeting/custom-properties.md similarity index 95% rename from docs/essentials/targeting/custom-properties.md rename to docs/platform/feature-flags/targeting/custom-properties.md index f328aba7..b31f0911 100644 --- a/docs/essentials/targeting/custom-properties.md +++ b/docs/platform/feature-flags/targeting/custom-properties.md @@ -3,7 +3,7 @@ title: Custom Properties sidebar_position: 3 --- -Custom Properties are properties on a user which can be used for [Targeting Users for Features](/essentials/targeting/targeting-overview). +Custom Properties are properties on a user which can be used for [Targeting Users for Features](/platform/feature-flags/targeting/targeting-overview). These properties are set on the user data that you provide to DevCycle when [identifying a user](https://docs.devcycle.com/sdk/features#identifying-a-user-or-setting-properties) in the SDK. @@ -40,7 +40,7 @@ Every time you identify a particular user, you must pass the custom data into th DevCycle's EdgeDB feature enables the saving of user data into DevCycle's EdgeDB storage, allowing you to segment by custom properties without having to repeatedly pass the same data to the SDK. -[View our EdgeDB docs to find out how it works](/essentials/targeting/edgedb). +[View our EdgeDB docs to find out how it works](/platform/feature-flags/targeting/edgedb). ::: @@ -95,7 +95,7 @@ Once a property has been created, it will be accessible in the definition dropdo ![property type open](/march-2022-property-dropdown-with-properties.png) -First, select your property to use it like any other targeting definition as outlined in [Targeting Users](/essentials/targeting/targeting-overview) +First, select your property to use it like any other targeting definition as outlined in [Targeting Users](/platform/feature-flags/targeting/targeting-overview) Then, finish your Targeting Rule by filling out the comparator and the value fields. diff --git a/docs/essentials/targeting/edgedb.md b/docs/platform/feature-flags/targeting/edgedb.md similarity index 100% rename from docs/essentials/targeting/edgedb.md rename to docs/platform/feature-flags/targeting/edgedb.md diff --git a/docs/essentials/targeting/random-variations.md b/docs/platform/feature-flags/targeting/random-variations.md similarity index 100% rename from docs/essentials/targeting/random-variations.md rename to docs/platform/feature-flags/targeting/random-variations.md diff --git a/docs/essentials/targeting/randomize-using-custom-property.md b/docs/platform/feature-flags/targeting/randomize-using-custom-property.md similarity index 83% rename from docs/essentials/targeting/randomize-using-custom-property.md rename to docs/platform/feature-flags/targeting/randomize-using-custom-property.md index 5f0287ac..4246b2d5 100644 --- a/docs/essentials/targeting/randomize-using-custom-property.md +++ b/docs/platform/feature-flags/targeting/randomize-using-custom-property.md @@ -16,7 +16,7 @@ To use this functionality in conjunction with Server-Side SDKs you must ensure y DevCycle uses User ID as the primary key for delivering variations, rolling out a feature, and randomizing distribution. However, there are cases in which a User ID is not the primary identifier of the request to DVC, thus making the usage of DevCycle features, specifically Gradual Rollouts, difficult in these scenarios. -This functionality allows you to set a [Custom Property](docs/essentials/targeting/custom-properties.md) as the key to roll out / distribute on rather than User ID, such as Account, Organization, Tenant or Store ID. For example, at DevCycle, we would use this feature to gradually roll out new functionality on an organization-by-organization basis rather than on a user-by-user basis to ensure all users in the org see the same features. +This functionality allows you to set a [Custom Property](docs/platform/feature-flags/targeting/custom-properties.md) as the key to roll out / distribute on rather than User ID, such as Account, Organization, Tenant or Store ID. For example, at DevCycle, we would use this feature to gradually roll out new functionality on an organization-by-organization basis rather than on a user-by-user basis to ensure all users in the org see the same features. ## Setting Up a Targeting Rule using an Custom Property for Randomization Since this functionality is only relevant in specific Targeting Rule use cases, the option to randomize using a Custom Property will only appear when you: diff --git a/docs/essentials/targeting/rollouts.md b/docs/platform/feature-flags/targeting/rollouts.md similarity index 100% rename from docs/essentials/targeting/rollouts.md rename to docs/platform/feature-flags/targeting/rollouts.md diff --git a/docs/essentials/targeting/targeting-overview.md b/docs/platform/feature-flags/targeting/targeting-overview.md similarity index 95% rename from docs/essentials/targeting/targeting-overview.md rename to docs/platform/feature-flags/targeting/targeting-overview.md index 95bd1166..644d4402 100644 --- a/docs/essentials/targeting/targeting-overview.md +++ b/docs/platform/feature-flags/targeting/targeting-overview.md @@ -8,10 +8,10 @@ incrementally roll out features for monitoring, or create and test different fea :::tip Already understand the targeting essentials? Be sure to check out our advanced targeting documentation which covers topics like: -- [Audiences](/essentials/targeting/audiences) -- [Custom Properties](/essentials/targeting/custom-properties) -- [Random Variations](/essentials/targeting/random-variations) -- [Rollouts](/essentials/targeting/rollouts) +- [Audiences](/platform/feature-flags/targeting/audiences) +- [Custom Properties](/platform/feature-flags/targeting/custom-properties) +- [Random Variations](/platform/feature-flags/targeting/random-variations) +- [Rollouts](/platform/feature-flags/targeting/rollouts) - [Self-Targeting](/platform/testing-and-qa/self-targeting) ::: @@ -35,7 +35,7 @@ Below is a summary of the properties built into the platform, and how to specify | Country | Country the user is located in. Must be a valid 2 letter [ISO-3166 country code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) | Set "country" property | In addition to these built-in properties, you can specify any other property that suits your needs using the -[Custom Properties](/essentials/targeting/custom-properties) feature. +[Custom Properties](/platform/feature-flags/targeting/custom-properties) feature. Here is an example of a user object being passed to an SDK with these properties set: ```typescript @@ -153,7 +153,7 @@ Looking to use DevCycle to help you QA a new feature? Be sure to check out [Self On the features dashboard page, select `Users & Targeting` from the left hand menu and choose which [environment](/essentials/overview#environments) it should apply to. If a feature is toggled `ON` for an environment, the rules defined within the environment will be followed. -Once the targeting rule is defined, the next step is to determine what Variation users targeted by this rule should receive. Note: The available variations will be determined by the chosen Feature Type, however, [these can](/essentials/variables-and-variations/variations) be modified and more variations can be added at any time. +Once the targeting rule is defined, the next step is to determine what Variation users targeted by this rule should receive. Note: The available variations will be determined by the chosen Feature Type, however, [these can](/platform/feature-flags/variables-and-variations/variations) be modified and more variations can be added at any time. To choose the Variation for this targeted audience, use the "Serve" dropdown and choose the desired variation. When the environment is enabled, and if a user fulfills the targeting rule, they will then be served that variation and its associated variable values. diff --git a/docs/essentials/variables-and-variations/_category_.yml b/docs/platform/feature-flags/variables-and-variations/_category_.yml similarity index 73% rename from docs/essentials/variables-and-variations/_category_.yml rename to docs/platform/feature-flags/variables-and-variations/_category_.yml index 52a71a05..7ae8f668 100644 --- a/docs/essentials/variables-and-variations/_category_.yml +++ b/docs/platform/feature-flags/variables-and-variations/_category_.yml @@ -1,2 +1,2 @@ label: 'Variables and Variations' -position: 4 +position: 1 diff --git a/docs/essentials/variables-and-variations/feature-flag-reach.md b/docs/platform/feature-flags/variables-and-variations/feature-flag-reach.md similarity index 100% rename from docs/essentials/variables-and-variations/feature-flag-reach.md rename to docs/platform/feature-flags/variables-and-variations/feature-flag-reach.md diff --git a/docs/essentials/variables-and-variations/variable-defaults.md b/docs/platform/feature-flags/variables-and-variations/variable-defaults.md similarity index 100% rename from docs/essentials/variables-and-variations/variable-defaults.md rename to docs/platform/feature-flags/variables-and-variations/variable-defaults.md diff --git a/docs/essentials/variables-and-variations/variables.md b/docs/platform/feature-flags/variables-and-variations/variables.md similarity index 95% rename from docs/essentials/variables-and-variations/variables.md rename to docs/platform/feature-flags/variables-and-variations/variables.md index d517b44e..80673488 100644 --- a/docs/essentials/variables-and-variations/variables.md +++ b/docs/platform/feature-flags/variables-and-variations/variables.md @@ -26,7 +26,7 @@ On the Feature page, there are indicators for each Variable that inform you of t - if a Variable has been seen in code (if [Code References](/integrations/github/feature-usage-action) have been enabled) - if evaluations have been seen -These indicators are helpful when setting up features. They help to confirm proper setup, and aid in Variable cleanup once a Feature has completed it's [lifecycle](/platform/feature-management/status-and-lifecycle). +These indicators are helpful when setting up features. They help to confirm proper setup, and aid in Variable cleanup once a Feature has completed it's [lifecycle](/platform/feature-flags/status-and-lifecycle). Hover over these indicators for more detail about a Variable's code references & evaluation information. @@ -47,7 +47,7 @@ To navigate to this page, use the `Variables` button on DevCycle dashboard's top | | | |--------|----------------------------| | **Variable Name** | The name given to the Variable upon its creation | -| **Feature** | The name of the Feature that is currently managing a variable. **Note** that Variables can only be managed by a single Feature at a time. If you wish to change what Feature is managing a Variable, first remove that Variable from a feature as outlined in [Creating Variables and Variations](/essentials/variables-and-variations/variables). If the Variable is NOT being managed by a Feature, this column will note the lack of Feature. **Click on a Feature name to navigate directly to the Feature managing this Variable** | +| **Feature** | The name of the Feature that is currently managing a variable. **Note** that Variables can only be managed by a single Feature at a time. If you wish to change what Feature is managing a Variable, first remove that Variable from a feature as outlined in [Creating Variables and Variations](/platform/feature-flags/variables-and-variations/variables). If the Variable is NOT being managed by a Feature, this column will note the lack of Feature. **Click on a Feature name to navigate directly to the Feature managing this Variable** | | **Type** | The type of the feature flag. This type can one of: Boolean, JSON, Number, Boolean, or String. | | **Created At** | The time this Variable was first created. | diff --git a/docs/essentials/variables-and-variations/variations.md b/docs/platform/feature-flags/variables-and-variations/variations.md similarity index 86% rename from docs/essentials/variables-and-variations/variations.md rename to docs/platform/feature-flags/variables-and-variations/variations.md index a66a0925..19ff0a44 100644 --- a/docs/essentials/variables-and-variations/variations.md +++ b/docs/platform/feature-flags/variables-and-variations/variations.md @@ -17,7 +17,7 @@ To view the Variables and Variations within a Feature, navigate to the 'Variable Depending on the Feature type, the default Variations will be pre-set. The most common of which will be the Variations of "Variation OFF" and "Variation ON", with the boolean Variable being set to false and true, respectively. -When a user is "Served" a Variation based on the [Targeting Rules](/essentials/targeting/targeting-overview), the Variable Values the user receives on their devices or as an API response will be the values for the served Variation. +When a user is "Served" a Variation based on the [Targeting Rules](/platform/feature-flags/targeting/targeting-overview), the Variable Values the user receives on their devices or as an API response will be the values for the served Variation. --- @@ -41,7 +41,7 @@ Give your new Variation a **name** as well as a **key**, as well as its **values - The Variable values will be what the Variable's value will be in SDK and API responses if a targeting rule is targeting those specific Variations. -Once this Variation is created, it will become available as an option within the "Serve" dropdown for [Targeting Rules](/essentials/targeting/targeting-overview). Users who are served this new Variation will receive the Variable Values associated with this new Variation! +Once this Variation is created, it will become available as an option within the "Serve" dropdown for [Targeting Rules](/platform/feature-flags/targeting/targeting-overview). Users who are served this new Variation will receive the Variable Values associated with this new Variation! --- diff --git a/docs/platform/feature-management/_category_.yml b/docs/platform/feature-management/_category_.yml deleted file mode 100644 index cd4e882d..00000000 --- a/docs/platform/feature-management/_category_.yml +++ /dev/null @@ -1,2 +0,0 @@ -label: 'Feature Management' -position: 1 diff --git a/docs/platform/security-and-guardrails/audit-log.md b/docs/platform/security-and-guardrails/audit-log.md index 0777b61a..75fb559a 100644 --- a/docs/platform/security-and-guardrails/audit-log.md +++ b/docs/platform/security-and-guardrails/audit-log.md @@ -39,6 +39,6 @@ Please note that [Self-Targeting](/platform/testing-and-qa/self-targeting) actio ### Feature Created Modification Cards in the Audit Log -When a Feature is created, you will see multiple modification cards populate in the Audit Log. The first modification card in the Audit Log will outline the initial Feature configuration (initial variable, variations, status, settings, etc.). Then, depending on the [Feature Type](/platform/feature-management/feature-types) selected when creating a new Feature, the following cards will highlight the each Environment's Targeting status, along with the templated Targeting Rules (if they exist). See an example below of an Experiment Feature Type. +When a Feature is created, you will see multiple modification cards populate in the Audit Log. The first modification card in the Audit Log will outline the initial Feature configuration (initial variable, variations, status, settings, etc.). Then, depending on the [Feature Type](/essentials/feature-types) selected when creating a new Feature, the following cards will highlight the each Environment's Targeting status, along with the templated Targeting Rules (if they exist). See an example below of an Experiment Feature Type. ![Audit Log Experiment Feature Type](/nov2023-audit-log-experiment-feature-type.png) diff --git a/docs/sdk/client-side-sdks/android/android-usage.md b/docs/sdk/client-side-sdks/android/android-usage.md index 47a1f7d4..29284a43 100644 --- a/docs/sdk/client-side-sdks/android/android-usage.md +++ b/docs/sdk/client-side-sdks/android/android-usage.md @@ -294,7 +294,7 @@ devcycleClient.flushEvents(new DevCycleCallback() { ## EdgeDB -EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). +EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/feature-flags/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/client-side-sdks/flutter/flutter-usage.md b/docs/sdk/client-side-sdks/flutter/flutter-usage.md index 96ff1bf1..69214f0e 100644 --- a/docs/sdk/client-side-sdks/flutter/flutter-usage.md +++ b/docs/sdk/client-side-sdks/flutter/flutter-usage.md @@ -162,7 +162,7 @@ _devcycleClient.flushEvents(([error]) => { ## EdgeDB EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. -Read more about [EdgeDB](/essentials/targeting/edgedb). +Read more about [EdgeDB](/platform/feature-flags/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/client-side-sdks/ios/ios-usage.md b/docs/sdk/client-side-sdks/ios/ios-usage.md index a4f693b8..ea22a9e4 100644 --- a/docs/sdk/client-side-sdks/ios/ios-usage.md +++ b/docs/sdk/client-side-sdks/ios/ios-usage.md @@ -279,7 +279,7 @@ devcycleClient.flushEvents() ## EdgeDB -EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). +EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/feature-flags/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/client-side-sdks/javascript/javascript-typescript.md b/docs/sdk/client-side-sdks/javascript/javascript-typescript.md index 4ba29138..7b132cb2 100644 --- a/docs/sdk/client-side-sdks/javascript/javascript-typescript.md +++ b/docs/sdk/client-side-sdks/javascript/javascript-typescript.md @@ -83,6 +83,6 @@ the latest configuration from DevCycle. :::info -Any Variables that are a part of a [Completed Feature](https://docs.devcycle.com/platform/feature-management/status-and-lifecycle#completing-a-feature) will be marked as deprecated in the types output. This is a powerful aid for Variable cleanup, because you can see which Variables need to be cleaned up right in your code. +Any Variables that are a part of a [Completed Feature](https://docs.devcycle.com/platform/feature-flags/status-and-lifecycle#completing-a-feature) will be marked as deprecated in the types output. This is a powerful aid for Variable cleanup, because you can see which Variables need to be cleaned up right in your code. ::: diff --git a/docs/sdk/client-side-sdks/react/react-typescript.md b/docs/sdk/client-side-sdks/react/react-typescript.md index 0760d6c6..d42e309c 100644 --- a/docs/sdk/client-side-sdks/react/react-typescript.md +++ b/docs/sdk/client-side-sdks/react/react-typescript.md @@ -63,6 +63,6 @@ the latest configuration from DevCycle. :::info -Any Variables that are a part of a [Completed Feature](https://docs.devcycle.com/platform/feature-management/status-and-lifecycle#completing-a-feature) will be marked as deprecated in the types output. This is a powerful aid for Variable cleanup, because you can see which Variables need to be cleaned up right in your code. +Any Variables that are a part of a [Completed Feature](https://docs.devcycle.com/platform/feature-flags/status-and-lifecycle#completing-a-feature) will be marked as deprecated in the types output. This is a powerful aid for Variable cleanup, because you can see which Variables need to be cleaned up right in your code. ::: diff --git a/docs/sdk/client-side-sdks/react/react-usage.md b/docs/sdk/client-side-sdks/react/react-usage.md index 7d6713da..6509cb03 100644 --- a/docs/sdk/client-side-sdks/react/react-usage.md +++ b/docs/sdk/client-side-sdks/react/react-usage.md @@ -273,7 +273,7 @@ If using Typescript, `OldComponent` and `NewComponent` must have compatible prop EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. -To get started, enable EdgeDB on your project by following the guide [here](/essentials/targeting/edgedb) +To get started, enable EdgeDB on your project by following the guide [here](/platform/feature-flags/targeting/edgedb) Once you have EdgeDB enabled in your project, pass in the `enableEdgeDB` option to turn on EdgeDB mode for the SDK: diff --git a/docs/sdk/client-side-sdks/roku/roku-usage.md b/docs/sdk/client-side-sdks/roku/roku-usage.md index add6ff2e..8abd2eb2 100644 --- a/docs/sdk/client-side-sdks/roku/roku-usage.md +++ b/docs/sdk/client-side-sdks/roku/roku-usage.md @@ -108,7 +108,7 @@ m.devcycleClient.flushEvents() ## EdgeDB -EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). +EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/feature-flags/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/features.md b/docs/sdk/features.md index 31cfa581..b460eed8 100644 --- a/docs/sdk/features.md +++ b/docs/sdk/features.md @@ -78,7 +78,7 @@ await devcycleClient.onClientInitialized() ## Evaluating Features & Using Variables This section explains how to use retrieve the Variables of a Feature as well as use their values. For information -on setting up a Feature for use, read [Variables and Variations](/essentials/variables-and-variations/variables) and [Targeting Users](/essentials/targeting/targeting-overview) +on setting up a Feature for use, read [Variables and Variations](/platform/feature-flags/variables-and-variations/variables) and [Targeting Users](/platform/feature-flags/targeting/targeting-overview) Every SDK provides a method to retrieve a Variable's value. It expects to receive the unique key of the Variable, and a default value to serve in case no other value is available. @@ -107,7 +107,7 @@ The default value will be returned in the following scenarios: configuration from breaking your application at runtime. - The SDK has finished initializing, but the user has not been targeted for a Feature that controls this Variable -For more information on how the default value is used, see [Variable Defaults](/essentials/variables-and-variations/variable-defaults). +For more information on how the default value is used, see [Variable Defaults](/platform/feature-flags/variables-and-variations/variable-defaults). ## Getting All Features @@ -131,7 +131,7 @@ The response is the following general format, with slight changes depending on t } ``` -Only Features that the User has satisfied [targeting rules](/essentials/targeting/targeting-overview) for will be returned by this function. +Only Features that the User has satisfied [targeting rules](/platform/feature-flags/targeting/targeting-overview) for will be returned by this function. The feature must also be **enabled** for that environment. ## Getting all Variables @@ -157,7 +157,7 @@ The response is the following general format, with slight changes depending on t } ``` -Only Variables in Features that the user has satisfied [targeting rules](/essentials/targeting/targeting-overview) for will be part of the response in this method. +Only Variables in Features that the user has satisfied [targeting rules](/platform/feature-flags/targeting/targeting-overview) for will be part of the response in this method. The Feature must also be **enabled** for the environment this SDK is being called on. :::caution @@ -242,7 +242,7 @@ to represent the user. User data can also contain "custom data", which is a key-value map of any arbitrary data you want to use for targeting. The provided data can be used in Targeting Rules by creating Custom Properties in the DevCycle dashboard. Learn more -about [Custom Property Targeting](/essentials/targeting/custom-properties) +about [Custom Property Targeting](/platform/feature-flags/targeting/custom-properties) When setting custom properties you have a choice between keeping that data completely private or allowing for the data to be logged back to DevCycle's events database. Both options allow for the same targeting capabilities, @@ -344,6 +344,6 @@ The SDK determines flag values by making an API call for each decision, using wo globally. Every function within the SDK will reach out to these edge workers and respond with extremely low latency. -Cloud bucketing is required to use specific features such as [EdgeDB](/essentials/targeting/edgedb) and +Cloud bucketing is required to use specific features such as [EdgeDB](/platform/feature-flags/targeting/edgedb) and [Feature Opt-In](/platform/extras/feature-opt-in). If you aren't using these features, then Local Bucketing is the recommended mode. diff --git a/docs/sdk/server-side-sdks/dotnet/dotnet-usage.md b/docs/sdk/server-side-sdks/dotnet/dotnet-usage.md index ce3f0356..d3376205 100644 --- a/docs/sdk/server-side-sdks/dotnet/dotnet-usage.md +++ b/docs/sdk/server-side-sdks/dotnet/dotnet-usage.md @@ -81,7 +81,7 @@ DevCycleResponse result = await client.Track(user, event); ## EdgeDB - Cloud Only EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. -Read more about [EdgeDB](/essentials/targeting/edgedb). +Read more about [EdgeDB](/platform/feature-flags/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/dotnet/dotnet.md b/docs/sdk/server-side-sdks/dotnet/dotnet.md index 7345a500..a0704482 100644 --- a/docs/sdk/server-side-sdks/dotnet/dotnet.md +++ b/docs/sdk/server-side-sdks/dotnet/dotnet.md @@ -11,7 +11,7 @@ The DevCycle .NET / C# SDK has two operation modes; Cloud Bucketing - which inte and Local Bucketing - which performs bucketing locally. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/platform/feature-flags/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. See [Here](/sdk/#difference-between-local-and-cloud-bucketing) for more information. diff --git a/docs/sdk/server-side-sdks/go/go-usage.md b/docs/sdk/server-side-sdks/go/go-usage.md index 141e191b..2510b8c5 100644 --- a/docs/sdk/server-side-sdks/go/go-usage.md +++ b/docs/sdk/server-side-sdks/go/go-usage.md @@ -126,7 +126,7 @@ Client Custom Data is only available for the Local Bucketing SDK ## EdgeDB EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time -you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). +you identify a user. Read more about [EdgeDB](/platform/feature-flags/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/go/go.md b/docs/sdk/server-side-sdks/go/go.md index 2bc352f0..bd3802be 100644 --- a/docs/sdk/server-side-sdks/go/go.md +++ b/docs/sdk/server-side-sdks/go/go.md @@ -11,7 +11,7 @@ Welcome to the DevCycle Go Server SDK. There are two modes for the SDK, Cloud bucketing (using the [Bucketing API](https://docs.devcycle.com/bucketing-api/)) and Local Bucketing. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/platform/feature-flags/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/docs/sdk/server-side-sdks/java/java-usage.md b/docs/sdk/server-side-sdks/java/java-usage.md index f4638009..c781a13b 100644 --- a/docs/sdk/server-side-sdks/java/java-usage.md +++ b/docs/sdk/server-side-sdks/java/java-usage.md @@ -144,7 +144,7 @@ DevCycleLocalOptions options = DevCycleLocalOptions.builder().customLogger(loggi **NOTE: EdgeDB is only available with Cloud Bucketing.** EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. -Read more about [EdgeDB](/essentials/targeting/edgedb). +Read more about [EdgeDB](/platform/feature-flags/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/java/java.md b/docs/sdk/server-side-sdks/java/java.md index 089b5f1a..b286a791 100644 --- a/docs/sdk/server-side-sdks/java/java.md +++ b/docs/sdk/server-side-sdks/java/java.md @@ -10,7 +10,7 @@ Welcome to the DevCycle Java Server SDK. There are two modes for the SDK, Cloud bucketing (using the [Bucketing API](https://docs.devcycle.com/bucketing-api/)) and Local Bucketing. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/platform/feature-flags/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/docs/sdk/server-side-sdks/node/node-usage.md b/docs/sdk/server-side-sdks/node/node-usage.md index d3b07d73..f652f193 100644 --- a/docs/sdk/server-side-sdks/node/node-usage.md +++ b/docs/sdk/server-side-sdks/node/node-usage.md @@ -112,7 +112,7 @@ EdgeDB is only available with Cloud Bucketing and does not have any impact on Lo ::: -EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). +EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/feature-flags/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/node/node.md b/docs/sdk/server-side-sdks/node/node.md index 583f7d74..f7b14619 100644 --- a/docs/sdk/server-side-sdks/node/node.md +++ b/docs/sdk/server-side-sdks/node/node.md @@ -10,7 +10,7 @@ import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; There are two modes for the SDK, Cloud bucketing (using the [Bucketing API](https://docs.devcycle.com/bucketing-api/)) and Local Bucketing. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/platform/feature-flags/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/docs/sdk/server-side-sdks/php/php-usage.md b/docs/sdk/server-side-sdks/php/php-usage.md index f5f921bd..3d8c6157 100644 --- a/docs/sdk/server-side-sdks/php/php-usage.md +++ b/docs/sdk/server-side-sdks/php/php-usage.md @@ -98,7 +98,7 @@ try { ## EdgeDB -EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). +EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/feature-flags/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/php/php.md b/docs/sdk/server-side-sdks/php/php.md index 96fc80de..ca5540aa 100644 --- a/docs/sdk/server-side-sdks/php/php.md +++ b/docs/sdk/server-side-sdks/php/php.md @@ -11,7 +11,7 @@ Welcome to the DevCycle PHP SDK. There are two modes for the SDK, Cloud bucketing (using the [Bucketing API](https://docs.devcycle.com/bucketing-api/)) and Local Bucketing. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/platform/feature-flags/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/docs/sdk/server-side-sdks/python/python-usage.md b/docs/sdk/server-side-sdks/python/python-usage.md index 26b11c59..6a3db599 100644 --- a/docs/sdk/server-side-sdks/python/python-usage.md +++ b/docs/sdk/server-side-sdks/python/python-usage.md @@ -131,7 +131,7 @@ Client Custom Data is only available for the Local Bucketing SDK ## EdgeDB -When utilizing the Cloud Bucketing Python SDK, EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/essentials/targeting/edgedb). +When utilizing the Cloud Bucketing Python SDK, EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. Read more about [EdgeDB](/platform/feature-flags/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/python/python.md b/docs/sdk/server-side-sdks/python/python.md index 476d0115..eb7837c5 100644 --- a/docs/sdk/server-side-sdks/python/python.md +++ b/docs/sdk/server-side-sdks/python/python.md @@ -10,7 +10,7 @@ import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; Welcome to the DevCycle Python Server SDK. There are two modes for the SDK, Local Bucketing (using the local bucketing engine) and Cloud bucketing (using the [DevCycle Bucketing API](/bucketing-api/#tag/devcycle)). We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/platform/feature-flags/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/docs/sdk/server-side-sdks/ruby/ruby-usage.md b/docs/sdk/server-side-sdks/ruby/ruby-usage.md index 879f2068..0ae4e2f4 100644 --- a/docs/sdk/server-side-sdks/ruby/ruby-usage.md +++ b/docs/sdk/server-side-sdks/ruby/ruby-usage.md @@ -137,7 +137,7 @@ Client Custom Data is only available for the Local Bucketing SDK ## EdgeDB EdgeDB allows you to save user data to our EdgeDB storage so that you don't have to pass in all the user data every time you identify a user. -Read more about [EdgeDB](/essentials/targeting/edgedb). +Read more about [EdgeDB](/platform/feature-flags/targeting/edgedb). To get started, contact us at support@devcycle.com to enable EdgeDB for your project. diff --git a/docs/sdk/server-side-sdks/ruby/ruby.md b/docs/sdk/server-side-sdks/ruby/ruby.md index da7f87ee..833f7d5a 100644 --- a/docs/sdk/server-side-sdks/ruby/ruby.md +++ b/docs/sdk/server-side-sdks/ruby/ruby.md @@ -11,7 +11,7 @@ Welcome to the DevCycle Ruby SDK. There are two modes for the SDK, Cloud bucketing (using the [Bucketing API](https://docs.devcycle.com/bucketing-api/)) and Local Bucketing. We recommend using the Local Bucketing mode by default, as it performs fast local evaluations of your feature flags. -If you need access to [EdgeDB](https://docs.devcycle.com/essentials/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. +If you need access to [EdgeDB](https://docs.devcycle.com/platform/feature-flags/targeting/edgedb) you will need to use the Cloud Bucketing mode of the SDK. diff --git a/vercel.json b/vercel.json index 0946962a..7a60226e 100644 --- a/vercel.json +++ b/vercel.json @@ -10,19 +10,19 @@ { "source": "/home/", "destination": "/", "statusCode": 301 }, { "source": "/tools-and-integrations/cli", "destination": "/cli", "statusCode": 301 }, { "source": "/:path*/getting-started/:path*", "destination": "/introduction/quickstart", "statusCode": 301 }, - { "source": "/home/feature-management/features-and-variables/targeting-users", "destination": "/essentials/targeting/targeting-overview", "statusCode": 301 }, - { "source": "/home/feature-management/features-and-variables/variables-and-variations", "destination": "/essentials/variables-and-variations/variables", "statusCode": 301 }, - { "source": "/home/feature-management/features-and-variables/custom-properties", "destination": "/essentials/targeting/custom-properties", "statusCode": 301 }, + { "source": "/home/feature-management/features-and-variables/targeting-users", "destination": "/platform/feature-flags/targeting/targeting-overview", "statusCode": 301 }, + { "source": "/home/feature-management/features-and-variables/variables-and-variations", "destination": "/platform/feature-flags/variables-and-variations/variables", "statusCode": 301 }, + { "source": "/home/feature-management/features-and-variables/custom-properties", "destination": "/platform/feature-flags/targeting/custom-properties", "statusCode": 301 }, { "source": "/home/feature-management/features-and-variables/sdk-visibility", "destination": "/platform/security-and-guardrails/sdk-visibility", "statusCode": 301 }, { "source": "/home/feature-management/features-and-variables/metrics-and-analysis/:path*", "destination": "/platform/metrics/:path*", "statusCode": 301 }, { "source": "/home/feature-management/organizing-your-flags-and-variables/feature-dashboard", "destination": "/essentials/features", "statusCode": 301 }, { "source": "/home/feature-management/organizing-your-flags-and-variables/environments", "destination": "/platform/account-management/environments", "statusCode": 301 }, { "source": "/home/feature-management/organizing-your-flags-and-variables/api-and-sdk-keys", "destination": "/platform/account-management/keys", "statusCode": 301 }, - { "source": "/home/feature-management/organizing-your-flags-and-variables/variable-dashboard", "destination": "/essentials/variables-and-variations/variables", "statusCode": 301 }, + { "source": "/home/feature-management/organizing-your-flags-and-variables/variable-dashboard", "destination": "/platform/feature-flags/variables-and-variations/variables", "statusCode": 301 }, { "source": "/home/feature-management/organizing-your-flags-and-variables/organizations-projects", "destination": "/platform/account-management/organizations", "statusCode": 301 }, { "source": "/home/your-organization/:path*", "destination": "/platform/account-management/organizations", "statusCode": 301 }, { "source": "/home/demos/:path*", "destination": "/examples", "statusCode": 301 }, - { "source": "/home/feature-management/edgedb/:path*", "destination": "/essentials/targeting/edgedb", "statusCode": 301 }, + { "source": "/home/feature-management/edgedb/:path*", "destination": "/platform/feature-flags/targeting/edgedb", "statusCode": 301 }, { "source": "/home/feature-management/feature-opt-in/:path*", "destination": "/platform/extras/feature-opt-in", "statusCode": 301 }, { "source": "/tools-and-integrations/:path*", "destination": "/integrations/:path*", "statusCode": 301 }, { "source": "/tools-and-integrations/", "destination": "/integrations", "statusCode": 301 }, @@ -32,18 +32,18 @@ { "source": "/introduction/key-features", "destination": "/essentials/key-features", "statusCode": 301 }, { "source": "/introduction/architecture", "destination": "/essentials/architecture", "statusCode": 301 }, - { "source": "/essentials/targeting", "destination": "/essentials/targeting/targeting-overview", "statusCode": 301 }, - { "source": "/platform/advanced-targeting/audiences", "destination": "/essentials/targeting/audiences", "statusCode": 301 }, - { "source": "/platform/advanced-targeting/custom-properties", "destination": "/essentials/targeting/custom-properties", "statusCode": 301 }, - { "source": "/platform/advanced-targeting/random-variations", "destination": "/essentials/targeting/random-variations", "statusCode": 301 }, - { "source": "/platform/advanced-targeting/randomize-using-custom-property", "destination": "/essentials/targeting/randomize-using-custom-property", "statusCode": 301 }, - { "source": "/platform/advanced-targeting/rollouts", "destination": "/essentials/targeting/rollouts", "statusCode": 301 }, - { "source": "/platform/edgedb", "destination": "/essentials/targeting/edgedb", "statusCode": 301 }, + { "source": "/essentials/targeting", "destination": "/platform/feature-flags/targeting/targeting-overview", "statusCode": 301 }, + { "source": "/platform/advanced-targeting/audiences", "destination": "/platform/feature-flags/targeting/audiences", "statusCode": 301 }, + { "source": "/platform/advanced-targeting/custom-properties", "destination": "/platform/feature-flags/targeting/custom-properties", "statusCode": 301 }, + { "source": "/platform/advanced-targeting/random-variations", "destination": "/platform/feature-flags/targeting/random-variations", "statusCode": 301 }, + { "source": "/platform/advanced-targeting/randomize-using-custom-property", "destination": "/platform/feature-flags/targeting/randomize-using-custom-property", "statusCode": 301 }, + { "source": "/platform/advanced-targeting/rollouts", "destination": "/platform/feature-flags/targeting/rollouts", "statusCode": 301 }, + { "source": "/platform/edgedb", "destination": "/platform/feature-flags/targeting/edgedb", "statusCode": 301 }, - { "source": "/essentials/variables", "destination": "/essentials/variables-and-variations/variables", "statusCode": 301 }, - { "source": "/essentials/variations", "destination": "/essentials/variables-and-variations/variations", "statusCode": 301 }, - { "source": "/platform/advanced-variables/variable-defaults", "destination": "/essentials/variables-and-variations/variable-defaults", "statusCode": 301 }, - { "source": "/platform/metrics/feature-flag-reach", "destination": "/essentials/variables-and-variations/feature-flag-reach", "statusCode": 301 }, + { "source": "/essentials/variables", "destination": "/platform/feature-flags/variables-and-variations/variables", "statusCode": 301 }, + { "source": "/essentials/variations", "destination": "/platform/feature-flags/variables-and-variations/variations", "statusCode": 301 }, + { "source": "/platform/advanced-variables/variable-defaults", "destination": "/platform/feature-flags/variables-and-variations/variable-defaults", "statusCode": 301 }, + { "source": "/platform/metrics/feature-flag-reach", "destination": "/platform/feature-flags/variables-and-variations/feature-flag-reach", "statusCode": 301 }, { "source": "/essentials/organizations", "destination": "/platform/account-management/organizations", "statusCode": 301 }, { "source": "/essentials/projects", "destination": "/platform/account-management/projects", "statusCode": 301 }, @@ -54,9 +54,9 @@ { "source": "/platform/metrics/how-metrics-are-calculated", "destination": "/platform/experimentation/how-metrics-are-calculated", "statusCode": 301 }, { "source": "/essentials/feature-experimentation", "destination": "/platform/experimentation/feature-experimentation", "statusCode": 301 }, - { "source": "/introduction/core-concepts/feature-hierarchy", "destination": "/platform/feature-management/feature-hierarchy", "statusCode": 301 }, - { "source": "/introduction/core-concepts/feature-types", "destination": "/platform/feature-management/feature-types", "statusCode": 301 }, - { "source": "/essentials/status-and-lifecycle", "destination": "/platform/feature-management/status-and-lifecycle", "statusCode": 301 }, + { "source": "/introduction/core-concepts/feature-hierarchy", "destination": "/essentials/feature-hierarchy", "statusCode": 301 }, + { "source": "/introduction/core-concepts/feature-types", "destination": "/essentials/feature-types", "statusCode": 301 }, + { "source": "/essentials/status-and-lifecycle", "destination": "/platform/feature-flags/status-and-lifecycle", "statusCode": 301 }, { "source": "/platform/approval-workflows", "destination": "/platform/security-and-guardrails/approval-workflows", "statusCode": 301 }, { "source": "/platform/audit-log", "destination": "/platform/security-and-guardrails/audit-log", "statusCode": 301 },