This article also inadvertently shows what I think is a big drawback of the inversion of control pattern.
Imagine you are trying to debug an issue with user creation.
In the last example, you would have to look up everywhere `createUser` is being called, and follow the code path through several different scattered files until you find your issue.
In the original code, you can simply look up `createUser` and you have the complete code flow in front of you.