anchor.diff:  
   A setup such as the one described above might look like this:
   
  -<%= image_tag 'blog/beginnings-real-pipeline/pipeline-04.jpg', :alt => 'Pipeline', :title => 'Pipeline' %>
  +<%= image_tag 'blog/beginnings-real-pipeline/pipeline-04.jpg', :alt => 'Pipeline', :title => 'Pipeline', :data => {:imagezoom => 'true'}%>
  +<span class='info_txt'>Rollover image to zoom in</span>
   
   Hopefully, that change didn't feel like the "How to draw an owl" [image](http://sethgodin.typepad.com/seths_blog/2014/01/how-to-draw-an-owl.html)!
   
  
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:
  
  <<<<<<< HEAD
  <<<<<<< HEAD
  <%= image_tag 'blog/beginnings-real-pipeline/pipeline-06.jpg', :alt => 'Pipeline', :title => 'Pipeline' :data => {:imagezoom => 'true'}%>
  =======
  <%= image_tag 'blog/beginnings-real-pipeline/pipeline-06.jpg', :alt => 'Pipeline', :title => 'Pipeline', :data => {:imagezoom => 'true'}%>
  >>>>>>> gocd/master
  =======
  <%= image_tag 'blog/beginnings-real-pipeline/pipeline-06.jpg', :alt => 'Pipeline', :title => 'Pipeline', :data => {:imagezoom => 'true'}%>
  >>>>>>> gocd/master
  <span class='info_txt'>Rollover image to zoom in</span>
  
  This change brings in three new GoCD pipelines and also shows that moving the functional tests to their own pipeline enables better orchestration and control. In this case, there's a "smoke" test stage at the beginning of each pipeline and the functional tests themselves are split into two parallel jobs, which can execute on different agents, potentially improving the end-to-end time. As soon as the installer stage of the "Build" pipeline finishes successfully, all three downstream pipelines are triggered. At this stage, it might occur as if we've replaced duplications that arise with many jobs with multiple pipelines. We'll address how this can be optimized with Pipeline Templates in a later post.
  
negative.code: 
  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:
  
  <%= image_tag 'blog/beginnings-real-pipeline/pipeline-05.jpg', :alt => 'Pipeline', :title => 'Pipeline', :data => {:imagezoom => 'true'}%>
  <span class='info_txt'>Rollover image to zoom in</span>
  
  However, this approach isn't the most optimal.
  
  