diff --git a/app/finders/namespaces/projects_finder.rb b/app/finders/namespaces/projects_finder.rb
index 6547d41dcddddaec45f8628853c10954a5be60e8..5ef26ca90759c02bb941b8fa88f61159bcfe2eff 100644
--- a/app/finders/namespaces/projects_finder.rb
+++ b/app/finders/namespaces/projects_finder.rb
@@ -80,6 +80,8 @@ def by_feature_availability(items)
 
     def sort(items)
       return items.projects_order_id_desc unless params[:sort]
+      return items.order_by_storage_size(:asc) if params[:sort] == :storage_size_asc
+      return items.order_by_storage_size(:desc) if params[:sort] == :storage_size_desc
 
       if params[:sort] == :similarity && params[:search].present?
         return items.sorted_by_similarity_desc(params[:search], include_in_select: true)
diff --git a/app/graphql/types/projects/namespace_project_sort_enum.rb b/app/graphql/types/projects/namespace_project_sort_enum.rb
index 14a315781efab23f9a4280fcf2be85cad48ae5d7..29a5c86b084b38055f9c4038f8af4edfd27f306d 100644
--- a/app/graphql/types/projects/namespace_project_sort_enum.rb
+++ b/app/graphql/types/projects/namespace_project_sort_enum.rb
@@ -8,6 +8,8 @@ class NamespaceProjectSortEnum < BaseEnum
 
       value 'SIMILARITY', 'Most similar to the search query.', value: :similarity
       value 'ACTIVITY_DESC', 'Sort by latest activity, descending order.', value: :latest_activity_desc
+      value 'STORAGE_SIZE_ASC',  'Sort by total storage size, ascending order.', value: :storage_size_asc
+      value 'STORAGE_SIZE_DESC', 'Sort by total storage size, descending order.', value: :storage_size_desc
     end
   end
 end
diff --git a/app/models/project.rb b/app/models/project.rb
index 7f1c3cd475c2f31f5e02a6974870d435978900ab..c52562ff8f680c4951f2de963ccf4774caa0e779 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -639,6 +639,15 @@ def self.integration_association_name(name)
   # Sometimes queries (e.g. using CTEs) require explicit disambiguation with table name
   scope :projects_order_id_asc, -> { reorder(self.arel_table['id'].asc) }
   scope :projects_order_id_desc, -> { reorder(self.arel_table['id'].desc) }
+  scope :order_by_storage_size, -> (direction) do
+    build_keyset_order_on_joined_column(
+      scope: joins(:statistics),
+      attribute_name: 'project_statistics_storage_size',
+      column: ::ProjectStatistics.arel_table[:storage_size],
+      direction: direction,
+      nullable: :nulls_first
+    )
+  end
 
   scope :sorted_by_similarity_desc, -> (search, include_in_select: false) do
     order_expression = Gitlab::Database::SimilarityScore.build_expression(
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 88f8a3f2fc2f11d490c90cff1d1c0c81f7aec030..9eea2bef404d5ec3508a405f509cad0aeeba963d 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -31352,8 +31352,9 @@ Values for sorting projects.
 | Value | Description |
 | ----- | ----------- |
 | <a id="namespaceprojectsortactivity_desc"></a>`ACTIVITY_DESC` | Sort by latest activity, descending order. |
+| <a id="namespaceprojectsortexcess_repo_storage_size_desc"></a>`EXCESS_REPO_STORAGE_SIZE_DESC` | Sort by excess repository storage size, descending order. |
 | <a id="namespaceprojectsortsimilarity"></a>`SIMILARITY` | Most similar to the search query. |
-| <a id="namespaceprojectsortstorage"></a>`STORAGE` | Sort by excess repository storage size, descending order. |
+| <a id="namespaceprojectsortstorage"></a>`STORAGE` **{warning-solid}** | **Deprecated** in 16.9. Please use EXCESS_REPO_STORAGE_SIZE_DESC. |
 | <a id="namespaceprojectsortstorage_size_asc"></a>`STORAGE_SIZE_ASC` | Sort by total storage size, ascending order. |
 | <a id="namespaceprojectsortstorage_size_desc"></a>`STORAGE_SIZE_DESC` | Sort by total storage size, descending order. |
 
diff --git a/ee/app/assets/javascripts/usage_quotas/storage/components/namespace_storage_app.stories.js b/ee/app/assets/javascripts/usage_quotas/storage/components/namespace_storage_app.stories.js
index 4309457aa1ec38f296b54a910abe0f0d2a0d5928..340ca7d79200a4d1c53497639f912155db80cd2c 100644
--- a/ee/app/assets/javascripts/usage_quotas/storage/components/namespace_storage_app.stories.js
+++ b/ee/app/assets/javascripts/usage_quotas/storage/components/namespace_storage_app.stories.js
@@ -68,7 +68,7 @@ export const SaasWithProjectLimits = {
       isUsingProjectEnforcementWithLimits: true,
       isUsingProjectEnforcementWithNoLimits: false,
       totalRepositorySizeExcess: 3 * GIBIBYTE,
-      customSortKey: 'STORAGE',
+      customSortKey: 'EXCESS_REPO_STORAGE_SIZE_DESC',
     },
   }),
 };
@@ -112,7 +112,7 @@ export const SaasWithProjectLimitsLoading = {
         isUsingProjectEnforcementWithLimits: true,
         isUsingProjectEnforcementWithNoLimits: false,
         totalRepositorySizeExcess: 3 * GIBIBYTE,
-        customSortKey: 'STORAGE',
+        customSortKey: 'EXCESS_REPO_STORAGE_SIZE_DESC',
       },
     })(...args);
   },
diff --git a/ee/app/assets/javascripts/usage_quotas/storage/init_namespace_storage.js b/ee/app/assets/javascripts/usage_quotas/storage/init_namespace_storage.js
index ed19e9efe10c9b856ba82a43e29723fe41d77840..d5a7c0ec32f7b2368e8ad166592190e7f8ea2c5b 100644
--- a/ee/app/assets/javascripts/usage_quotas/storage/init_namespace_storage.js
+++ b/ee/app/assets/javascripts/usage_quotas/storage/init_namespace_storage.js
@@ -60,7 +60,7 @@ export default () => {
       isUsingNamespaceEnforcement,
       isUsingProjectEnforcementWithLimits,
       isUsingProjectEnforcementWithNoLimits,
-      customSortKey: isUsingProjectEnforcementWithLimits ? 'STORAGE' : null,
+      customSortKey: isUsingProjectEnforcementWithLimits ? 'EXCESS_REPO_STORAGE_SIZE_DESC' : null,
       helpLinks,
     },
     render(createElement) {
diff --git a/ee/app/finders/ee/namespaces/projects_finder.rb b/ee/app/finders/ee/namespaces/projects_finder.rb
index 858eab411adb472f74b93b132dfde3367811d05b..2501edd72ce99ffa49e90ee0a13e9835b0073b45 100644
--- a/ee/app/finders/ee/namespaces/projects_finder.rb
+++ b/ee/app/finders/ee/namespaces/projects_finder.rb
@@ -64,9 +64,6 @@ def sort(items)
           return items.order_by_excess_repo_storage_size_desc(namespace.actual_size_limit)
         end
 
-        return items.order_by_storage_size(:asc) if params[:sort] == :storage_size_asc
-        return items.order_by_storage_size(:desc) if params[:sort] == :storage_size_desc
-
         super(items)
       end
 
diff --git a/ee/app/graphql/ee/types/projects/namespace_project_sort_enum.rb b/ee/app/graphql/ee/types/projects/namespace_project_sort_enum.rb
index 2dd6a9dd7ef04c3a13ebaae4051da0d3924b3771..ed1123fa4a786a4afd698672ceab715da5349701 100644
--- a/ee/app/graphql/ee/types/projects/namespace_project_sort_enum.rb
+++ b/ee/app/graphql/ee/types/projects/namespace_project_sort_enum.rb
@@ -7,13 +7,14 @@ module NamespaceProjectSortEnum
         extend ActiveSupport::Concern
 
         prepended do
-          # Storage size
           value 'STORAGE', 'Sort by excess repository storage size, descending order.',
+            value: :excess_repo_storage_size_desc,
+            deprecated: {
+              reason: 'Please use EXCESS_REPO_STORAGE_SIZE_DESC',
+              milestone: '16.9'
+            }
+          value 'EXCESS_REPO_STORAGE_SIZE_DESC', 'Sort by excess repository storage size, descending order.',
             value: :excess_repo_storage_size_desc
-
-          # project_statistics columns
-          value 'STORAGE_SIZE_ASC',  'Sort by total storage size, ascending order.', value: :storage_size_asc
-          value 'STORAGE_SIZE_DESC', 'Sort by total storage size, descending order.', value: :storage_size_desc
         end
       end
     end
diff --git a/ee/app/models/ee/project.rb b/ee/app/models/ee/project.rb
index c2d92369ad7abac632522b3c7dfa3481617bb012..a4476abb16a017cf6a17fade0bde41de64fe87c2 100644
--- a/ee/app/models/ee/project.rb
+++ b/ee/app/models/ee/project.rb
@@ -285,16 +285,6 @@ def lock_for_confirmation!(id)
         order.apply_cursor_conditions(joins(:statistics)).order(order)
       end
 
-      scope :order_by_storage_size, -> (direction) do
-        build_keyset_order_on_joined_column(
-          scope: joins(:statistics),
-          attribute_name: 'project_statistics_storage_size',
-          column: ::ProjectStatistics.arel_table[:storage_size],
-          direction: direction,
-          nullable: :nulls_first
-        )
-      end
-
       scope :with_project_setting, -> { includes(:project_setting) }
 
       scope :compliance_framework_id_in, -> (ids) do
diff --git a/ee/spec/frontend/usage_quotas/storage/components/namespace_storage_app_spec.js b/ee/spec/frontend/usage_quotas/storage/components/namespace_storage_app_spec.js
index af266e5c69710d6cafabd1f3fd55d271861e0f13..ad22a6d0f5d220f38e9623e6786f5d66f4aaae52 100644
--- a/ee/spec/frontend/usage_quotas/storage/components/namespace_storage_app_spec.js
+++ b/ee/spec/frontend/usage_quotas/storage/components/namespace_storage_app_spec.js
@@ -135,13 +135,13 @@ describe('NamespaceStorageApp', () => {
         provide: {
           isUsingNamespaceEnforcement: false,
           isUsingProjectEnforcementWithLimits: true,
-          customSortKey: 'STORAGE',
+          customSortKey: 'EXCESS_REPO_STORAGE_SIZE_DESC',
         },
       });
 
       expect(getProjectListStorageHandler).toHaveBeenCalledWith(
         expect.objectContaining({
-          sortKey: 'STORAGE',
+          sortKey: 'EXCESS_REPO_STORAGE_SIZE_DESC',
         }),
       );
 
diff --git a/ee/spec/models/ee/project_spec.rb b/ee/spec/models/ee/project_spec.rb
index 0de2b4001d7ff84cb407688eeb04b48b64989984..b444540b51add1c33668d67f857badc580d65e57 100644
--- a/ee/spec/models/ee/project_spec.rb
+++ b/ee/spec/models/ee/project_spec.rb
@@ -453,20 +453,6 @@
       it { is_expected.to eq([project_2, project_3, project_1]) }
     end
 
-    describe '.order_by_storage_size' do
-      let_it_be(:project_1) { create(:project_statistics, repository_size: 1).project }
-      let_it_be(:project_2) { create(:project_statistics, repository_size: 3).project }
-      let_it_be(:project_3) { create(:project_statistics, repository_size: 2).project }
-
-      context 'ascending' do
-        it { expect(described_class.order_by_storage_size(:asc)).to eq([project_1, project_3, project_2]) }
-      end
-
-      context 'descending' do
-        it { expect(described_class.order_by_storage_size(:desc)).to eq([project_2, project_3, project_1]) }
-      end
-    end
-
     describe '.with_coverage_feature_usage' do
       let_it_be(:project_1) { create(:project) }
       let_it_be(:project_2) { create(:project) }
diff --git a/ee/spec/requests/api/graphql/namespace/projects_spec.rb b/ee/spec/requests/api/graphql/namespace/projects_spec.rb
index 8c4101298cbb3e71bc75751851ef1cf2ac9a6053..808489ad8567f2a68a9ffaab843eb04b98be820a 100644
--- a/ee/spec/requests/api/graphql/namespace/projects_spec.rb
+++ b/ee/spec/requests/api/graphql/namespace/projects_spec.rb
@@ -28,7 +28,7 @@ def pagination_query(params)
         query_nodes(:projects, :name, include_pagination_info: true, args: params + project_args))
     end
 
-    context 'when sorting by STORAGE' do
+    context 'when sorting by STORAGE_SIZE_DESC' do
       before do
         project_4.statistics.update!(lfs_objects_size: 1, repository_size: 4.gigabytes)
         project_2.statistics.update!(lfs_objects_size: 1, repository_size: 2.gigabytes)
@@ -37,7 +37,7 @@ def pagination_query(params)
 
       it_behaves_like 'sorted paginated query' do
         let(:node_path) { %w[name] }
-        let(:sort_param) { :STORAGE }
+        let(:sort_param) { :STORAGE_SIZE_DESC }
         let(:first_param) { 2 }
         let(:all_records) { [project_4, project_2, project_3].map(&:name) }
       end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 3d5ccbc6feb177950e1f15481bb2a3b4c4078608..d9d4018a7e427b2444cb821357eedc32fecac50f 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -2126,6 +2126,20 @@ def has_external_wiki
     end
   end
 
+  describe '.order_by_storage_size' do
+    let_it_be(:project_1) { create(:project_statistics, repository_size: 1).project }
+    let_it_be(:project_2) { create(:project_statistics, repository_size: 3).project }
+    let_it_be(:project_3) { create(:project_statistics, repository_size: 2).project }
+
+    context 'ascending' do
+      it { expect(described_class.order_by_storage_size(:asc)).to eq([project_1, project_3, project_2]) }
+    end
+
+    context 'descending' do
+      it { expect(described_class.order_by_storage_size(:desc)).to eq([project_2, project_3, project_1]) }
+    end
+  end
+
   describe '.with_shared_runners_enabled' do
     subject { described_class.with_shared_runners_enabled }