title: What is a good branching strategy when developing several future releases at once?
body: <h2>The past</h2>
  
  <p>I develop a software project using subversion as an scm. Until now, development always happened in <code>trunk</code>, so problems arose when a bugfix release was necessary. Now, we want to rethink our branching strategy and the requirement is: We want to be able to work on multiple future releases at once.</p>
  
  <h2>The task</h2>
  
  <p>That means: Assume, the current version we are working on is 1.0. The next planned version is 2.0, the version after that is 3.0. Now that we have released 1.0 we want to</p>
  
  <ul>
  <li>maintain version 1.0</li>
  <li>develop features for 2.0</li>
  <li>at the same time develop features for 3.0</li>
  </ul>
  
  <p>Of course, fixes that have been applied in 1.0 are also needed in the other two versions. Furthermore, features from 2.0 will also have to be in 3.0. Also, it might be possible that a minor release is planned, say 1.1 that also includes new features and will have to be maintained separately.</p>
  
  <h2>A possible solution</h2>
  
  <p>I came up with the following branching strategy:</p>
  
  <ul>
  <li>The trunk will be abandoned</li>
  <li>For each new planned release, a branch is created which stems from the last release branch</li>
  <li>Changes are propagated "upwards" in the version timeline</li>
  </ul>
  
  <p>Let me elaborate this a bit more: In the given example, we would branch version 1.0 from trunk. Also, we would branch version 2.0 from version 1.0 and version 3.0 from version 2.0. When a change is made in 1.0, it will be merged into 2.0 and subsequently into 3.0.</p>
  
  <p><img src="https://i.stack.imgur.com/FbafL.png" alt="Visualization of the described branching strategy (please excuse the crappy paint quality)"></p>
  
  <h2>The question</h2>
  
  <p>Is this a valid methodology? Will it work technically? Are there organizational pitfalls? Are there best practices? (All the internet would come up with is: "Develop in trunk, maintain in release branch"). It especially seems strange to me to abandon trunk -- is that wrong?</p>