It's fine for simple transcoding jobs. Once it reaches certain complexity you at the very minimum want to outsource it to a shell script to organize the arguments in multiple lines or switch to some other language bindings that aren't limited by shell argument parsing.
Compare the CLI and python invocation in this example: https://github.com/kkroening/ffmpeg-python#complex-filter-gr...
For some subsets of ffmpeg functionality (e.g. creating webm videos from other sources) there also are dedicated GUIs.