A process to discover the dependencies between different data items manipulated by a program. The order of execution in a data driven language is determined solely by the data dependencies. This technique is implemented in hardware in some pipelined processors with multiple functional units. It allows instructions to be executed as soon as their inputs are available, independent of the original program order.