For me it’s basically magic that I can now write a simple declarative file that describes how to run an application, and from there it works with all of the expected features.
Same for timers. Debugging not running cronjobs is a pain in comparison.
Writing sysv init scripts is so fucking shit, people started to dump everything in /etc/rc.local, especially for earlier RPi versions of Debian.
Do you know about Kafka, Spark, and Jenkins? They're all Java but they each have their batshit fucking insane quirks on starting up.
One of them runs in foreground. One of them runs in background.
Jenkins (actually as Hudson) had it's own fucking Unix daemon-isation inbuilt. For a Java program!
Nuts!
Thankfully pretty much popular Java server has a systemd unit file written for it which avoids any shell and Exec's Java directly.
I don't know if systemd is better (I've never managed a server fleet with it), but Upstart certainly wasn't good enough.
Put another way, as a couple of anecdotes at $day_job, the boot time benefits (the one thing people always seem to bring up in defense of this ever-growing behemoth) were eaten up months ago in time troubleshooting, transitioning, and working around its corner cases.
More humorously, the words "fucking" and "goddamn" used to be followed by the name of some internal program known for being clunky. After getting up to Ubuntu 16 and Cent 7 in the whole environment, those words tend to be followed by "systemd".