anchor.diff:  We did mention earlier that our application was cross-platform. So, let's assume that the functional tests need to be run on three different operating systems - Mac OS X, Windows and Linux. We could start to approach this by adding jobs in Stage 4 and use GoCD's [*resource*](https://docs.gocd.io/current/introduction/concepts_in_go.html#resources) concept to make sure that the jobs are picked up by [*agents*](https://docs.gocd.io/current/introduction/concepts_in_go.html#agent) with the right operating system. This will involve running agents on the different operating systems and tagging them with resources "mac", "windows" and "linux". Once that's done, we could setup our pipeline to look like this:
   
   <div class='imagezoom'>
  -  <%= image_tag 'blog/beginnings-real-pipeline/pipeline-05.jpg', :alt => 'Pipeline', :title => 'Pipeline'%>
  +  <%= image_tag 'blog/beginnings-real-pipeline/pipeline-05.jpg', :alt => 'Pipeline with duplicate jobs', :title => 'Pipeline with duplicate jobs'%>
     <span class='info_txt'>Click image to zoom in</span>
   </div>
   However, this approach isn't the most optimal.
  
positive.code: To get around this, we can use GoCD's powerful [pipeline chaining mechanism](https://docs.gocd.io/current/introduction/concepts_in_go.html#pipeline_dependency), where a stage of a pipeline can be setup as a dependency for another pipeline. We can create one pipeline per operating system's functional test. Let's see how that looks:
  
  <div class='imagezoom'>
    <%= image_tag 'blog/beginnings-real-pipeline/pipeline-06.jpg', :alt => 'Pipeline', :title => 'Pipeline'%>
    <span class='info_txt'>Click image to zoom in</span>
  </div>
  
  
negative.code: A setup such as the one described above might look like this:
  
  <div class='imagezoom'>
    <%= image_tag 'blog/beginnings-real-pipeline/pipeline-04.jpg', :alt => 'Pipeline with multiple stages', :title => 'Pipeline with multiple stages'%>
    <span class='info_txt'>Click image to zoom in</span>
  </div>
  
  