Declarative versus scripted pipelines