Hm, that's true. I've gone back and forth on this point in my head a lot. For objects that are only used in a subset of the task's methods, I agree that they probably shouldn't belong as part of the class. However, here, "helper" is used for both "upload" and "delete", which are the only real methods called as part of the task. "uploadSingleImage" is public because it's called directly by some maintenance scripts, outside of the context of any task system, legacy or modern. Once this task is known to work well, I'll refactor that bit of it.