diff --git a/lib/feature.rb b/lib/feature.rb
index e28333aa58e0f2e03d8c4961a3bed01bacc7c0a3..c70a6980f190e572bde0093278e4707d3123322e 100644
--- a/lib/feature.rb
+++ b/lib/feature.rb
@@ -80,6 +80,13 @@ class Feature
       get(key).disable_group(group)
     end
 
+    def remove(key)
+      feature = get(key)
+      return unless persisted?(feature)
+
+      feature.remove
+    end
+
     def flipper
       if Gitlab::SafeRequestStore.active?
         Gitlab::SafeRequestStore[:flipper] ||= build_flipper_instance
diff --git a/spec/lib/feature_spec.rb b/spec/lib/feature_spec.rb
index 185abacf8e7c122f945884252a0e19768c14e54b..3d59b1f35a98a979cd83b45f115ef14257f0d325 100644
--- a/spec/lib/feature_spec.rb
+++ b/spec/lib/feature_spec.rb
@@ -254,6 +254,22 @@ describe Feature do
     end
   end
 
+  describe '.remove' do
+    context 'for a non-persisted feature' do
+      it 'returns nil' do
+        expect(described_class.remove(:non_persisted_feature_flag)).to be_nil
+      end
+    end
+
+    context 'for a persisted feature' do
+      it 'returns true' do
+        described_class.enable(:persisted_feature_flag)
+
+        expect(described_class.remove(:persisted_feature_flag)).to be_truthy
+      end
+    end
+  end
+
   describe Feature::Target do
     describe '#targets' do
       let(:project) { create(:project) }