diff --git a/openedx/features/discounts/applicability.py b/openedx/features/discounts/applicability.py
index 81c5a3249af7347fddccbaa1a0f85800201bfec0..a63adddd85cb71a04abf5e04f36f121f4f122990 100644
--- a/openedx/features/discounts/applicability.py
+++ b/openedx/features/discounts/applicability.py
@@ -96,9 +96,6 @@ def can_receive_discount(user, course, discount_expiration_date=None):
             return False
 
     # TODO: Add additional conditions to return False here
-    # Turn holdback on
-    if _is_in_holdback(user):
-        return False
 
     # Check if discount has expired
     if not discount_expiration_date:
@@ -139,12 +136,17 @@ def can_receive_discount(user, course, discount_expiration_date=None):
     if is_enterprise_learner(user):
         return False
 
+    # Turn holdback on
+    if _is_in_holdback_and_bucket(user):
+        return False
+
     return True
 
 
-def _is_in_holdback(user):
+def _is_in_holdback_and_bucket(user):
     """
     Return whether the specified user is in the first-purchase-discount holdback group.
+    This will also stable bucket the user.
     """
     if datetime(2020, 8, 1, tzinfo=pytz.UTC) <= datetime.now(tz=pytz.UTC):
         return False
diff --git a/openedx/features/discounts/tests/test_applicability.py b/openedx/features/discounts/tests/test_applicability.py
index 0a611e1005d3ce74a4651ded2a88538220179534..30660750fd6e5c038a338c7de6f5669bf7568f7f 100644
--- a/openedx/features/discounts/tests/test_applicability.py
+++ b/openedx/features/discounts/tests/test_applicability.py
@@ -23,7 +23,7 @@ from student.tests.factories import CourseEnrollmentFactory, UserFactory
 from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
 from xmodule.modulestore.tests.factories import CourseFactory
 
-from ..applicability import DISCOUNT_APPLICABILITY_FLAG, _is_in_holdback, can_receive_discount
+from ..applicability import DISCOUNT_APPLICABILITY_FLAG, _is_in_holdback_and_bucket, can_receive_discount
 
 
 @ddt.ddt
@@ -44,7 +44,9 @@ class TestApplicability(ModuleStoreTestCase):
             user=self.user, experiment_id=REV1008_EXPERIMENT_ID, key=str(self.course), value=now_time
         )
 
-        holdback_patcher = patch('openedx.features.discounts.applicability._is_in_holdback', return_value=False)
+        holdback_patcher = patch(
+            'openedx.features.discounts.applicability._is_in_holdback_and_bucket', return_value=False
+        )
         self.mock_holdback = holdback_patcher.start()
         self.addCleanup(holdback_patcher.stop)
 
@@ -165,7 +167,7 @@ class TestApplicability(ModuleStoreTestCase):
     @ddt.unpack
     def test_holdback_group_ids(self, group_number, in_holdback):
         with patch('openedx.features.discounts.applicability.stable_bucketing_hash_group', return_value=group_number):
-            assert _is_in_holdback(self.user) == in_holdback
+            assert _is_in_holdback_and_bucket(self.user) == in_holdback
 
     def test_holdback_expiry(self):
         with patch('openedx.features.discounts.applicability.stable_bucketing_hash_group', return_value=0):
@@ -173,4 +175,4 @@ class TestApplicability(ModuleStoreTestCase):
                 'openedx.features.discounts.applicability.datetime',
                 Mock(now=Mock(return_value=datetime(2020, 8, 1, 0, 1, tzinfo=pytz.UTC)), wraps=datetime),
             ):
-                assert not _is_in_holdback(self.user)
+                assert not _is_in_holdback_and_bucket(self.user)