Azure DevOps Pipeline — Choosing Between YAML and Classic UI

You’re here probably because you’ve been asked the question, or you’re asking the question — should I use Classic UI or the newer YAML definition for my Azure DevOps pipelines?
The answer is not that obvious for most people. And here I’ll list out a few pros & cons to make it easier for you to decide.
But first, what’s a Classic UI pipeline and what’s a YAML pipeline?

Classic UI is the original way Azure DevOps pipelines are created. You build a pipeline by using a GUI editor.

YAML is the newer way where you can define the pipeline as code, in YAML format, which you then commit to a repo. Azure DevOps does have an assistant to help you create/modify the YAML pipelines, so you don’t have to remember every possible setting or keep having to look up references.
And who are you?
I’m a DevOps engineer helping 500+ engineers of different levels adopting DevOps practices. In our organisation we use Azure DevOps extensively, and I’ve been asked the “Classic vs YAML” question numerous times.
Now let’s get to the pros & cons.
Classic UI
💗 No DSL (domain specific language) to learn, which enables super fast on-boarding, especially for those that come from a SysAdmin background rather than a Developer background
💗 Very easy to make quick changes, which encourages experimentation
😐 Contrary to popular belief, it does have versioning, and you can revert to a previous one easily
👎 It’s being deprecated. This will become lower and lower in Microsoft’s priority list when it comes to new features
YAML
💗 It is code, and managed as a source file, so it will go through a standard code review / pull request process
💗 Because it is in the repo, when you need to revert the source to an early commit, the pipeline will be reverted together as well
💗 Like all text files, it is easy to manipulate and change multiple values in one go. If needed it can even be generated from a script
💗 Comparing changes is much easier compared to the Classic UI versioning, which means it’s easier to identify root cause if build breaks
💗 Encourages collaboration — it’s much easier to code snippets through Slack or whatever than cropped screenshots
💗 Supports Container Jobs, which is quite important to some teams
😐 Azure DevOps does have assistant to help building a YAML file, so it’s not as daunting as it first looks for inexperienced users
👎 Not as mature as the Classic UI — some features are still on the roadmap
Summary
At the end of the day, it depends very much on the use case and more importantly the people.
Personally, for a new project with a modern team, I’d go straight for YAML. For a brown-field project starting to adopt DevOps practices, I’d go for Classic to ease the people in, and later they can choose to migrate to YAML if they so wish to.
Agreed? Disagreed? Let me know.