Remove added logic from functions. Like in group service, ensuringGroupOwner fetches the user, but other functions should supply that. Maybe consider classifying functions as low-level, entry point, etc. to determine where DB calls should be made like this. Separate out pure functions and such. Make sure each operation hits the DB as little as possible