diff --git a/app/views/registrations/welcome/show.html.haml b/app/views/registrations/welcome/show.html.haml
index 47fb8f9d253c8ddc2e9ecdfe292207eee122fb49..7e9fb2db5dc9569e123c791ff15692d35d4847fe 100644
--- a/app/views/registrations/welcome/show.html.haml
+++ b/app/views/registrations/welcome/show.html.haml
@@ -22,7 +22,7 @@
         .row
           .form-group.col-sm-12
             = f.label :role, _('Role'), class: 'label-bold'
-            = f.select :role, ::User.roles.keys.map { |role| [role.titleize, role] }, {}, class: 'form-control js-user-role-dropdown', autofocus: true
+            = f.select :role, ::User.roles.keys.map { |role| [role.titleize, role] }, { include_blank: _('Select a role') }, class: 'form-control js-user-role-dropdown', autofocus: true, required: true
         - if Feature.enabled?(:user_other_role_details)
           .row
             .form-group.col-sm-12.js-other-role-group.hidden
diff --git a/ee/spec/features/registrations/welcome_spec.rb b/ee/spec/features/registrations/welcome_spec.rb
index fd8371c8b9dfa83a29ceca62f4714becc8426414..62b7a55d0518511c22e662200c6fea8b01a8f178 100644
--- a/ee/spec/features/registrations/welcome_spec.rb
+++ b/ee/spec/features/registrations/welcome_spec.rb
@@ -3,7 +3,7 @@
 require 'spec_helper'
 
 RSpec.describe 'Welcome screen', :js do
-  let_it_be(:user) { create(:user) }
+  let_it_be(:user) { create(:user, role: nil) }
 
   context 'when on GitLab.com' do
     before do
@@ -18,9 +18,24 @@
 
     it 'shows the welcome page' do
       expect(page).to have_content('Welcome to GitLab')
+      expect(page).to have_content('Select a role')
       expect(page).to have_content('Continue')
     end
 
+    it 'has validations' do
+      click_button 'Continue'
+
+      expect(page).to have_field("user_role", valid: false)
+      expect(page).to have_field("user_setup_for_company_true", valid: false)
+
+      page.select('Software Developer', from: 'user_role')
+      choose 'user_setup_for_company_true'
+
+      click_button 'Continue'
+
+      expect(page).not_to have_selector('#user_role')
+    end
+
     it 'allows specifying other for jobs_to_be_done' do
       expect(page).not_to have_content('Why are you signing up? (Optional)')
 
@@ -32,9 +47,12 @@
     end
 
     context 'email opt in' do
+      let(:user) { create(:user, email_opted_in: false) }
+
       it 'does not show the email opt in checkbox when setting up for a company' do
         expect(page).not_to have_selector('input[name="user[email_opted_in]', visible: true)
 
+        page.select('Software Developer', from: 'user_role')
         choose 'user_setup_for_company_true'
 
         expect(page).not_to have_selector('input[name="user[email_opted_in]', visible: true)
@@ -44,9 +62,10 @@
         expect(user.reload.email_opted_in).to eq(true)
       end
 
-      it 'shows the email opt checkbox in when setting up for just me' do
+      it 'shows the email opt in checkbox when setting up for just me' do
         expect(page).not_to have_selector('input[name="user[email_opted_in]', visible: true)
 
+        page.select('Software Developer', from: 'user_role')
         choose 'user_setup_for_company_false'
 
         expect(page).to have_selector('input[name="user[email_opted_in]', visible: true)