Let the rates of work be R1, R2, R3, and the total distance be D.
Team 1 should always start immediately and work continuously.
If team 2 is slower than team 1, then team 2 should start after a delay equal to the minimum separation between the two teams (and team 1 will then pull further and further ahead)
If team 2 is faster than team 1, then team 2 should start later, such that
delay2 + D/R2 == (D+minsep12)/R1
where minsep12 is the minimum physical separation distance between teams 1 and 2. You might need a ceil() or two to get the proper separation semantics.
... and knowing the rates and minimum separation, that allows you to calculate the delay.
Then team 3 just has the same logic, except with respect to team 2, so by knowing the rates and minimum separation, you can calculate the delay between them and team 2 fairly easily.
What becomes more difficult is the case where the production rates are not constant. For example it would be expected that the rate of laying down pipeline would be less where there was blasting to be done, compared to loam; the rate of laying down pipeline in wetlands would perhaps be faster than areas where you had to blast, but slower than loam.
Then there are contingencies, especially in the part about laying down the pipeline. For example, you might discover an Artesian well that leads to a section of ground being unacceptably subject to slip-faults, so you might have to re-route.
Or there might have been problems leading to a leak...