diff --git a/app/models/issue.rb b/app/models/issue.rb
index e064b0f8b955bb0c52f9aa0d90e9cf68dd8894e7..3f188e047709a4b8b2183b50514fa34a46672c1c 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -106,7 +106,7 @@ class Issue < ActiveRecord::Base
 
   def related_branches
     project.repository.branch_names.select do |branch|
-      branch.end_with?("-#{iid}")
+      branch =~ /\A#{iid}-(?!\d+-stable)/i
     end
   end
 
@@ -151,7 +151,7 @@ class Issue < ActiveRecord::Base
   end
 
   def to_branch_name
-    "#{title.parameterize}-#{iid}"
+    "#{iid}-#{title.parameterize}"
   end
 
   def can_be_worked_on?(current_user)
diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb
index 6e9152e444ec6eb1eeed939ed678ef8534cedbce..fa34753c4fd2d3e4f5b4c2fe0a98d30438a1df9f 100644
--- a/app/services/merge_requests/build_service.rb
+++ b/app/services/merge_requests/build_service.rb
@@ -51,7 +51,7 @@ module MergeRequests
       # be interpreted as the use wants to close that issue on this project
       # Pattern example: 112-fix-mep-mep
       # Will lead to appending `Closes #112` to the description
-      if match = merge_request.source_branch.match(/-(\d+)\z/)
+      if match = merge_request.source_branch.match(/\A(\d+)-/)
         iid = match[1]
         closes_issue = "Closes ##{iid}"
 
diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb
index 658b086496f55102bcf50690497c148f88150c2d..82a0e2fd1f563ef98ff8108e7ac7f0fa7330c564 100644
--- a/app/services/system_note_service.rb
+++ b/app/services/system_note_service.rb
@@ -222,7 +222,7 @@ class SystemNoteService
   # Called when a branch is created from the 'new branch' button on a issue
   # Example note text:
   #
-  #   "Started branch `issue-branch-button-201`"
+  #   "Started branch `201-issue-branch-button`"
   def self.new_issue_branch(issue, project, author, branch)
     h = Gitlab::Routing.url_helpers
     link = h.namespace_project_compare_url(project.namespace, project, from: project.default_branch, to: branch)
diff --git a/doc/workflow/web_editor.md b/doc/workflow/web_editor.md
index 5685a9d89dd721244229c9d3a112f115052b7270..1832567a34c94dd783b7b3d257e549109c370c4e 100644
--- a/doc/workflow/web_editor.md
+++ b/doc/workflow/web_editor.md
@@ -85,7 +85,7 @@ Once you click it, a new branch will be created that diverges from the default
 branch of your project, by default `master`. The branch name will be based on
 the title of the issue and as suffix it will have its ID. Thus, the example
 screenshot above will yield a branch named
-`et-cum-et-sed-expedita-repellat-consequatur-ut-assumenda-numquam-rerum-2`.
+`2-et-cum-et-sed-expedita-repellat-consequatur-ut-assumenda-numquam-rerum`.
 
 After the branch is created, you can edit files in the repository to fix
 the issue. When a merge request is created based on the newly created branch,
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb
index 15052aaca28ed42db4b3765a89e4c9d572636560..fac516f9568c8a06ee2f316a0d6ad39637d7ce20 100644
--- a/spec/models/issue_spec.rb
+++ b/spec/models/issue_spec.rb
@@ -191,12 +191,19 @@ describe Issue, models: true do
   end
 
   describe '#related_branches' do
-    it "selects the right branches" do
+    it 'selects the right branches' do
       allow(subject.project.repository).to receive(:branch_names).
-        and_return(["mpempe", "#{subject.iid}mepmep", subject.to_branch_name])
+        and_return(['mpempe', "#{subject.iid}mepmep", subject.to_branch_name])
 
       expect(subject.related_branches).to eq([subject.to_branch_name])
     end
+
+    it 'excludes stable branches from the related branches' do
+      allow(subject.project.repository).to receive(:branch_names).
+        and_return(["#{subject.iid}-0-stable"])
+
+      expect(subject.related_branches).to eq []
+    end
   end
 
   it_behaves_like 'an editable mentionable' do
@@ -210,11 +217,11 @@ describe Issue, models: true do
     let(:subject) { create :issue }
   end
 
-  describe "#to_branch_name" do
+  describe '#to_branch_name' do
     let(:issue) { create(:issue, title: 'a' * 30) }
 
-    it "starts with the issue iid" do
-      expect(issue.to_branch_name).to match /-#{issue.iid}\z/
+    it 'starts with the issue iid' do
+      expect(issue.to_branch_name).to match /\A#{issue.iid}-a+\z/
     end
   end
 end