How we cut our CI pipeline execution time in half