Skip to content

Cleaning up old feature flags

Problem

When working in the codebase, we see lots of feature flags. We always need to consider the "else" case when implementing a feature or fixing a bug. However, most of those "development" feature flags are actually stable enough to be cleaned up.

Enabled by default

Here's the list of "enabled by default" "development" feature flags that were introduced before 15.0
                               :geo_repository_verification => 10.6,
                                                 :lfs_check => 11.11,
                             :geo_repository_reverification => 11.6,
                         :groups_tokens_optional_encryption => 11.9,
                                                   :chatops => 11.9,
                       :projects_tokens_optional_encryption => 11.9,
                                        :phabricator_import => 12.0,
                                                :ci_job_jwt => 12.1,
                :repository_archive_hotlinking_interception => 12.1,
                                     :project_import_ndjson => 12.1,
                                  :project_export_as_ndjson => 12.1,
                                               :sourcegraph => 12.5,
              :unlink_fork_network_upon_visibility_decrease => 12.6,
                                :forward_deployment_enabled => 12.8,
                        :create_approval_todos_on_mr_update => 12.9,
                                       :group_export_ndjson => 13.0,
                                  :json_wrapper_legacy_mode => 13.0,
                                       :group_import_ndjson => 13.0,
                               :subscribable_license_banner => 13.0,
                     :geo_group_wiki_repository_replication => 13.1,
                                      :track_epics_activity => 13.1,
                                        :iteration_cadences => 13.1,
                                :geo_lfs_object_replication => 13.11,
                    :enforce_max_attachment_size_upload_api => 13.11,
                                         :use_traversal_ids => 13.11,
                         :reject_unsigned_commits_by_gitlab => 13.11,
                         :geo_pipeline_artifact_replication => 13.11,
                                     :ban_user_feature_flag => 13.12,
                                   :main_branch_over_master => 13.12,
                              :geo_package_file_replication => 13.3,
                              :merge_request_widget_graphql => 13.3,
                                    :offline_spdx_catalogue => 13.3,
                                                  :webauthn => 13.4,
                        :geo_merge_request_diff_replication => 13.4,
                 :validate_import_decompressed_archive_size => 13.4,
                                          :rebalance_issues => 13.4,
         :usage_data_incident_management_incident_published => 13.4,
                        :geo_snippet_repository_replication => 13.4,
                                               :bulk_import => 13.5,
                   :geo_terraform_state_version_replication => 13.5,
    :usage_data_i_ci_secrets_management_vault_build_created => 13.6,
                                  :s3_multithreaded_uploads => 13.8,
                       :use_traversal_ids_for_root_ancestor => 14.0,
                               :geo_use_clone_on_first_sync => 14.1,
                       :recursive_approach_for_all_projects => 14.1,
                             :ci_job_artifacts_backlog_work => 14.1,
                  :sidekiq_job_completion_metric_initialize => 14.1,
      :usage_data_i_code_review_user_gitlab_cli_api_request => 14.1,
                                         :new_header_search => 14.3,
                                                :work_items => 14.3,
                          :geo_pages_deployment_replication => 14.3,
                                    :geo_upload_replication => 14.4,
                            :refactor_mr_widgets_extensions => 14.4,
                          :ci_update_unlocked_job_artifacts => 14.5,
                                   :issues_full_text_search => 14.5,
                         :ci_destroy_unlocked_job_artifacts => 14.5,
                         :geo_secondary_proxy_separate_urls => 14.6,
                                 :automated_email_provision => 14.6,
                                              :highlight_js => 14.6,
                                   :rate_limit_gitlab_shell => 14.7,
                  :use_traversal_ids_for_descendants_scopes => 14.8,
                              :geo_job_artifact_replication => 14.8,
       :usage_data_i_code_review_user_jetbrains_api_request => 14.8,
                                         :incident_timeline => 14.9,
                       :ci_detect_wrongly_expired_artifacts => 14.9,
                      :audit_event_streaming_git_operations => 14.9,
                                     :route_hll_to_snowplow => 14.9,
                                 :track_work_items_activity => 14.9,
                                       :enhanced_notify_css => 14.9,
                             :enable_old_sentry_integration => 14.9,
                                        :dispensable_render => 14.9

Disabled by default

Here's the list of "disabled by default" "development" feature flags that were introduced before 15.0
                                                           :namespace_storage_limit => 0,
                                   :use_primary_store_as_default_for_sidekiq_status => 0,
                                                         :rugged_commit_is_ancestor => 0,
                                                                :rugged_find_commit => 0,
                                   :use_primary_store_as_default_for_duplicate_jobs => 0,
                               :use_primary_and_secondary_stores_for_sidekiq_status => 0,
                                                               :rugged_tree_entries => 0,
                               :use_primary_and_secondary_stores_for_duplicate_jobs => 0,
                                                                 :rugged_tree_entry => 0,
                                                       :auto_devops_banner_disabled => 10.0,
                                                  :workhorse_archive_cache_disabled => 10.5,
                                                              :ci_enable_live_trace => 10.8,
                                                        :rugged_list_commits_by_oid => 11.1,
                                                     :git_push_create_all_pipelines => 11.1,
                                                                :user_time_settings => 11.11,
                                                           :project_list_filter_bar => 11.11,
                                                               :build_service_proxy => 11.11,
                                                    :force_autodevops_on_by_default => 11.3,
                                                          :rugged_commit_tree_entry => 11.9,
                                   :application_settings_tokens_optional_encryption => 11.9,
                                                            :group_managed_accounts => 11.9,
                                                        :prometheus_computed_alerts => 12.0,
                                                                    :sign_up_on_sso => 12.0,
                                                             :audit_log_group_level => 12.1,
                                             :ldap_settings_unlock_groups_by_owners => 12.1,
                                                        :remove_non_gma_memberships => 12.1,
                                                                 :wiki_front_matter => 12.1,
                                                             :ajax_new_deploy_token => 12.1,
                                                     :group_administration_nav_item => 12.1,
                                                           :soft_email_confirmation => 12.2,
                                                         :artifacts_management_page => 12.4,
                                                               :allow_possible_spam => 12.4,
                                          :design_management_allow_dangerous_images => 12.4,
                                                  :anonymous_visual_review_feedback => 12.5,
                                                     :notes_create_service_tracking => 12.5,
                                                      :repack_after_shard_migration => 12.6,
                                                              :disable_merge_trains => 12.8,
                                                                :archive_rate_limit => 12.9,
                                            :convert_user_to_group_managed_accounts => 12.9,
                                                                 :security_auto_fix => 13.0,
                                                             :gitlab_employee_badge => 13.0,
                                                               :enforced_sso_expiry => 13.0,
                                                    :ci_register_job_temporary_lock => 13.1,
                                                     :diff_line_syntax_highlighting => 13.1,
                                            :ci_skip_persistent_ref_existence_check => 13.1,
                                                  :gitlab_ci_builds_queuing_metrics => 13.1,
                                                                 :use_marker_ranges => 13.1,
                                                               :or_issuable_queries => 13.1,
                                                 :go_proxy_disable_gomod_validation => 13.1,
                                                                          :go_proxy => 13.1,
                                                            :issue_assignees_widget => 13.11,
                                                     :allow_extend_reactivate_trial => 13.11,
                                                                :ci_job_token_scope => 13.12,
                                               :pipeline_security_dashboard_graphql => 13.12,
                                                          :web_hooks_disable_failed => 13.12,
                                               :ci_require_credit_card_on_free_plan => 13.12,
                                              :ci_require_credit_card_on_trial_plan => 13.12,
                                                                  :cache_home_panel => 13.12,
                                       :create_vulnerability_jira_issue_via_graphql => 13.12,
                                                                    :cached_commits => 13.12,
                                                   :use_traversal_ids_for_ancestors => 13.12,
                                              :ci_require_credit_card_for_old_users => 13.12,
                                                                 :product_analytics => 13.2,
                                                     :branch_list_keyset_pagination => 13.2,
                                             :disable_metric_dashboard_refresh_rate => 13.2,
                                                                    :schema_linting => 13.2,
                                                           :async_commit_diff_files => 13.3,
                                                       :remove_legacy_github_client => 13.3,
                                                        :temporary_storage_increase => 13.3,
                                                :personal_snippet_reference_filters => 13.3,
                                                    :missing_mr_security_scan_types => 13.4,
                                             :elasticsearch_use_or_default_operator => 13.4,
                                       :advanced_global_search_for_limited_indexing => 13.4,
                                         :bitbucket_server_user_mapping_by_username => 13.4,
                                                          :lfs_link_existing_object => 13.4,
                                          :metrics_dashboard_exhaustive_validations => 13.4,
                                                               :forti_authenticator => 13.5,
                                              :ci_pipeline_triggers_settings_vue_ui => 13.5,
                                                   :display_merge_conflicts_in_diff => 13.5,
                                                                :two_factor_for_cli => 13.5,
                                                                   :debian_packages => 13.5,
                                                                      :custom_emoji => 13.6,
                                                    :seats_in_use_for_free_or_trial => 13.6,
                                                   :new_issues_analytics_chart_data => 13.6,
                                                            :collect_package_events => 13.6,
                                                    :core_security_mr_widget_counts => 13.7,
                                                     :hide_deprecated_billing_plans => 13.7,
                                                                 :forti_token_cloud => 13.7,
                                                        :merge_request_refs_cleanup => 13.8,
                                                              :non_public_artifacts => 13.8,
                                                                    :multiple_todos => 13.8,
                                                          :issue_email_participants => 13.8,
                                                                  :rubygem_packages => 13.9,
                                                           :show_billing_eoa_banner => 13.9,
                                         :gitlab_ci_archived_trace_consistent_reads => 13.9,
                                                       :subscription_plan_cache_key => 13.9,
                                                     :disable_ssh_key_used_tracking => 13.9,
                                                     :disable_git_http_fetch_writes => 13.9,
                                                   :pnp_subscription_plan_cache_key => 13.9,
                                                                :board_multi_select => 14.0,
                                                    :enforce_storage_limit_for_free => 14.1,
                                    :container_registry_migration_phase2_capacity_2 => 14.1,
                                                    :enforce_storage_limit_for_paid => 14.1,
                                     :container_registry_migration_phase2_all_plans => 14.1,
                                                             :debian_group_packages => 14.1,
                                                   :ci_recreate_downstream_pipeline => 14.1,
                                         :ci_job_artifacts_backlog_large_loop_limit => 14.1,
                                                    :use_api_for_payment_validation => 14.1,
                                                       :runner_registration_control => 14.1,
                                                             :preview_free_user_cap => 14.1,
                                                                    :saas_user_caps => 14.1,
                                                         :arkose_labs_prevent_login => 14.1,
                                                       :arkose_labs_login_challenge => 14.1,
                                                 :allow_non_blocking_member_refresh => 14.1,
                                                       :refactor_security_extension => 14.1,
                                                  :record_projects_target_platforms => 14.1,
                                                                   :realtime_labels => 14.1,
                                                :project_overwrite_service_tracking => 14.1,
                                                                 :pipeline_tabs_vue => 14.1,
                                                  :increase_page_size_exponentially => 14.1,
                                                    :add_timezone_to_web_operations => 14.1,
                                                                  :moved_mr_sidebar => 14.1,
                                              :about_your_company_registration_flow => 14.1,
                       :specialized_worker_for_group_lock_update_auth_recalculation => 14.2,
                                                          :linear_project_ancestors => 14.2,
                                                 :repository_tree_gitaly_pagination => 14.3,
                                                       :incubation_5mp_google_cloud => 14.3,
                                             :use_traversal_ids_for_ancestor_scopes => 14.3,
                                                     :linear_user_manageable_groups => 14.3,
                                                              :bulk_import_projects => 14.3,
                                                 :search_blobs_language_aggregation => 14.4,
                                                              :mergeability_caching => 14.4,
                                                                 :lazy_load_commits => 14.4,
                                               :ci_new_query_for_running_stuck_jobs => 14.4,
                                               :refactor_mr_widgets_extensions_user => 14.4,
                                                      :project_quality_summary_page => 14.4,
                                                  :graphql_code_quality_full_report => 14.4,
                                              :advanced_search_multi_project_select => 14.4,
                                                           :use_traversal_ids_roots => 14.5,
                                          :configure_sentry_in_application_settings => 14.5,
                                                             :verification_reminder => 14.6,
                                              :use_traversal_ids_for_ancestors_upto => 14.6,
                                                   :use_traversal_ids_groups_finder => 14.6,
                                                          :account_validation_email => 14.6,
                         :saas_user_caps_auto_approve_pending_users_on_cap_increase => 14.6,
                                                :use_typhoeus_elasticsearch_adapter => 14.7,
                                                      :unify_security_configuration => 14.7,
                                                   :inline_haml_diff_line_rendering => 14.7,
                                          :use_traversal_ids_for_self_and_hierarchy => 14.7,
                                                                  :dast_api_scanner => 14.7,
                                                           :epic_board_total_weight => 14.7,
                                            :elastic_file_name_reverse_optimization => 14.7,
                                                         :remote_mirror_fail_on_lfs => 14.7,
                                       :container_registry_migration_phase2_enabled => 14.8,
                                                                   :ci_secure_files => 14.8,
                                                      :hide_public_email_on_profile => 14.8,
                                    :container_registry_migration_phase2_capacity_1 => 14.8,
                                                   :enforce_runner_token_expires_at => 14.8,
                            :container_registry_migration_phase2_enqueue_speed_fast => 14.8,
                            :container_registry_migration_phase2_enqueue_speed_slow => 14.8,
                                                             :overage_members_modal => 14.8,
                                   :container_registry_migration_phase2_capacity_10 => 14.8,
                                   :use_traversal_ids_for_self_and_hierarchy_scopes => 14.8,
                                     :container_registry_migration_limit_gitlab_org => 14.8,
                                             :permit_all_shared_groups_for_approval => 14.8,
                                   :container_registry_migration_phase2_capacity_25 => 14.8,
                                              :linear_group_descendants_finder_upto => 14.8,
                                                    :exit_registration_verification => 14.8,
                                                                     :saved_replies => 14.9,
                                                       :harbor_registry_integration => 14.9,
                                                                     :free_user_cap => 14.9,
                                                  :role_targeted_broadcast_messages => 14.9,
                                                              :epic_color_highlight => 14.9,
                                                    :gl_avatar_for_all_user_avatars => 14.9,
                                                         :integrated_error_tracking => 14.9,
                                                            :optimized_housekeeping => 14.9,
                                                                :jira_connect_oauth => 14.9,
                                                             :source_editor_toolbar => 14.9,
                                                :import_project_from_remote_file_s3 => 14.9,
                                                         :admin_runners_bulk_delete => 14.9,
                                                     :enable_new_sentry_integration => 14.9,
                                                             :disable_unsafe_regexp => 14.9

Solution

  1. Find DRIs or group team members of feature flags without group assigned.
  2. Ping DRIs or group team members to create rollout issues for feature flags without rollout issues.
  3. Ping DRIs or group team members in feature flag rollout issues.
  4. Each DRI will find if the feature flag is enabled on GitLab.com.
  5. Each DRI will remove the feature flag.
  6. Later: Collaborate with Engineering Productivity to automate pinging DRIs or group team members in rollout issues.
Edited by Furkan Ayhan