diff --git a/app/assets/javascripts/issue_show/issue_title_description.vue b/app/assets/javascripts/issue_show/issue_title_description.vue
index c7adec878a31faccaacd20719b1e333f86f9c9f3..dd8794188d7837be0b74d6276455e40ee10fd4da 100644
--- a/app/assets/javascripts/issue_show/issue_title_description.vue
+++ b/app/assets/javascripts/issue_show/issue_title_description.vue
@@ -20,7 +20,7 @@ export default {
       errorCallback: (err) => {
         if (process.env.NODE_ENV !== 'production') {
           // eslint-disable-next-line no-console
-          console.error('ISSUE SHOW REALTIME ERROR', err);
+          console.error('ISSUE SHOW REALTIME ERROR', err, err.stack);
         } else {
           throw new Error(err);
         }
@@ -29,7 +29,7 @@ export default {
 
     return {
       poll,
-      data: {},
+      apiData: {},
       current: true,
       timeoutId: null,
       title: '<span></span>',
@@ -43,29 +43,41 @@ export default {
   },
   methods: {
     renderResponse(res) {
-      const data = JSON.parse(res.body);
-      this.data = data;
-      this.issueIID = this.data.issue_number;
-      this.triggerAnimation(data);
+      this.apiData = JSON.parse(res.body);
+      this.issueIID = this.apiData.issue_number;
+      this.triggerAnimation();
     },
     updateTaskHTML() {
-      this.taskStatus = this.data.task_status;
-      document.querySelector('#task_status').innerText = this.taskStatus;
+      const tasks = document.querySelector('#task_status_short');
+      const zeroTasks = this.apiData.task_status.includes('0 of 0');
+
+      if (tasks && !zeroTasks) {
+        tasks.innerText = this.apiData.task_status;
+      } else if (this.apiData.task_status.includes('0 of 0')) {
+        $('#task_status_short').remove();
+      } else if (!tasks && !zeroTasks) {
+        $('.issuable-header').append(`
+          <span id="task_status_short" class="hidden-md hidden-lg">${this.apiData.task_status}</span>
+        `);
+      }
     },
     elementsToVisualize(noTitleChange, noDescriptionChange) {
       const elementStack = [];
 
       if (!noTitleChange) {
-        this.titleText = this.data.title_text;
+        this.titleText = this.apiData.title_text;
         elementStack.push(this.$el.querySelector('.title'));
       }
 
       if (!noDescriptionChange) {
         // only change to true when we need to bind TaskLists the html of description
         this.descriptionChange = true;
+        this.updateTaskHTML();
+
         if (this.description !== '<span></span>') {
           this.previousDescription = this.description;
         }
+
         elementStack.push(this.$el.querySelector('.wiki'));
       }
 
@@ -100,10 +112,8 @@ export default {
       // always reset to false before checking the change
       this.descriptionChange = false;
 
-      const { title, description } = this.data;
-      this.descriptionText = this.data.description_text;
-
-      this.updateTaskHTML();
+      const { title, description } = this.apiData;
+      this.descriptionText = this.apiData.description_text;
 
       const noTitleChange = this.title === title;
       const noDescriptionChange = this.description === description;
diff --git a/spec/features/issues/award_spec.rb b/spec/features/issues/award_spec.rb
index 401e1ea2b893e27216bbf160a980cac0877f92c4..08e3f99e29f0dafac5555773d52a87c2d91df97f 100644
--- a/spec/features/issues/award_spec.rb
+++ b/spec/features/issues/award_spec.rb
@@ -6,9 +6,12 @@ feature 'Issue awards', js: true, feature: true do
   let(:issue)     { create(:issue, project: project) }
 
   describe 'logged in' do
+    include WaitForVueResource
+
     before do
       login_as(user)
       visit namespace_project_issue_path(project.namespace, project, issue)
+      wait_for_vue_resource
     end
 
     it 'adds award to issue' do
@@ -38,8 +41,11 @@ feature 'Issue awards', js: true, feature: true do
   end
 
   describe 'logged out' do
+    include WaitForVueResource
+    
     before do
       visit namespace_project_issue_path(project.namespace, project, issue)
+      wait_for_vue_resource
     end
 
     it 'does not see award menu button' do
diff --git a/spec/support/features/issuable_slash_commands_shared_examples.rb b/spec/support/features/issuable_slash_commands_shared_examples.rb
index 5bbe36d9b7fb88c2cbe6aab68edc306dc3a5d2ad..5e7eca1d987d464e27aa706de26048c5b4eebcca 100644
--- a/spec/support/features/issuable_slash_commands_shared_examples.rb
+++ b/spec/support/features/issuable_slash_commands_shared_examples.rb
@@ -3,6 +3,7 @@
 
 shared_examples 'issuable record that supports slash commands in its description and notes' do |issuable_type|
   include SlashCommandsHelpers
+  include WaitForVueResource
 
   let(:master) { create(:user) }
   let(:assignee) { create(:user, username: 'bob') }
@@ -18,6 +19,7 @@ shared_examples 'issuable record that supports slash commands in its description
     project.team << [assignee, :developer]
     project.team << [guest, :guest]
     login_with(master)
+    wait_for_vue_resource
   end
 
   after do