There is a principle that makes you do this but it doesn’t say it the way your professor did. Every function orchestrates other functions. Even adding two numbers together and assigning them to a variable is orchestrating functions. This you can twist yourself in knots thinking this way. [The single level of abstraction principal][1] holds up spirit of that idea but doesn’t require you to pretend you know where the bottom is. It only requires that you set a level of abstraction and stick with it. That means this is not structural. It’s conceptual. It doesn’t matter if you mix functions from your own code, a library, or even the basic language functions. What matters is that when you mix them together they don’t yo yo your brain up to hand waving high abstraction and down to low level details all within the same function. Do that and you’ll end up separating orchestrating and doing just fine. [1]: https://8thlight.com/blog/javier-garc%C3%ADa/2019/06/11/refactoring-levels-of-abstraction.html