There can be a lot of reasons to chose the one or the other. The main drivers are: * **Reuse and maintainability**: Seeking for the data itself, constraints the function to one way of getting the data (e.g. calling another function) and at one time (now). This prevents reuse with different sources, of working with possible future states of data (simulations). Having the caller chose the sources and assemble the pieces calling the functions with arguments, also facilitates maintainability (e.g. if access to the sources would evolve). * **Complexity and constraints**: Seeking for data by itself might require lengthy computation at the wrong moment, or overhead such as requiring the source to cache the data (not always possible) or might need digging into details at a lower level of abstraction and doing more than one thing (clean code). But "might" means that there are also cases where this is irrelevant.