My only nit with their build stages is I don’t see them
mentioning that the pipeline stages they outline are logical. When it comes to how the real pipeline actually runs you should ignore the stages and just specify the minimal dependency graph and let everything that can be run in parallel run. This usually means produce your build artifact first and then run everything immediately after. If you’re feeling fancy you can have the steps remember the logical stage they’re in and bail out of later stages on failure.