The "subcommand" approach is the one popularised by Git. It makes sense for complex tools that incorporate many different actions. Every action is essentially its own CLI tool. That approach isn't suited well to the traditional Unix mindset where a single tool is supposed to do one thing and do it well – "ls" is meant to list files and "tr" is meant to replace characters, and you should be able to pipe them together.
Not to challenge anything you said, but rather expand upon it.. git just followed a grand tradition of software version control systems in general (sccs/cvs/svn/..): https://lobste.rs/s/dnazns/contextual_clis#c_b7rl9k
`command -function`
To
`command function -option`
Example:
Why is it:
ssh -l bob myhost.com
Vs
ssh login bob myhost.com