Before this was invented, people had to manually find expressions for these derivatives, and implement the code to compute them. Needless to say, this took way too much time and was likely to result in sub-optimal and unoptimized code, while nowadays nobody has to deal with this anymore (except on their homeworks)!
For the curious of how this works, I present a simple implementation on my blog [1].
[1] https://e-dorigatti.github.io/math/deep%20learning/2020/04/0...