A computer-implemented method for executing a graph-based program specification, the method including: storing a graph-based program specification including a plurality of components corresponding to tasks, and links between ports of the components, at least some of the plurality of components each having at least one of: at least one first type of input port (332, 336, 340, 356, 360, 364) that receives a collection of data elements to be processed by a corresponding task, or at least one first type of output port (334, 338, 342, 358, 366) that provides a collection of data elements to be processed by a task corresponding to a component (328,330,352) linked to the first type of output port; the presence of the first type of input or output port being indicative that the data elements within a collection of data elements can be reordered; and executing a program specified by the graph-based program specification, the executing including: receiving two or more data elements of a first collection of data elements into a first storage in a first order via a link (344, 368) connected to the first type of output port of a first component (326, 350) of the plurality of components and an input port (336, 360) of a second component (328, 352) of the plurality of components, and invoking a plurality of instances of a task corresponding to the second component (328, 352), including dynamically parallelize processing of respective received data elements by instantiating respective instances of the task corresponding to the second component to process the respective received data elements of the first collection of data elements, and including retrieving the data elements from the first storage, or from a second storage different to the first storage, in a second order, without blocking invocation of any of the instances until after any particular instance completes processing one or more data elements, wherein the first order is different from the second order. storing a graph-based program specification including a plurality of components corresponding to tasks, and links between ports of the components, at least some of the plurality of components each having at least one of: at least one first type of input port (332, 336, 340, 356, 360, 364) that receives a collection of data elements to be processed by a corresponding task, or at least one first type of output port (334, 338, 342, 358, 366) that provides a collection of data elements to be processed by a task corresponding to a component (328,330,352) linked to the first type of output port; the presence of the first type of input or output port being indicative that the data elements within a collection of data elements can be reordered; and at least one first type of input port (332, 336, 340, 356, 360, 364) that receives a collection of data elements to be processed by a corresponding task, or at least one first type of output port (334, 338, 342, 358, 366) that provides a collection of data elements to be processed by a task corresponding to a component (328,330,352) linked to the first type of output port; the presence of the first type of input or output port being indicative that the data elements within a collection of data elements can be reordered; and executing a program specified by the graph-based program specification, the executing including: receiving two or more data elements of a first collection of data elements into a first storage in a first order via a link (344, 368) connected to the first type of output port of a first component (326, 350) of the plurality of components and an input port (336, 360) of a second component (328, 352) of the plurality of components, and invoking a plurality of instances of a task corresponding to the second component (328, 352), including dynamically parallelize processing of respective received data elements by instantiating respective instances of the task corresponding to the second component to process the respective received data elements of the first collection of data elements, and including retrieving the data elements from the first storage, or from a second storage different to the first storage, in a second order, without blocking invocation of any of the instances until after any particular instance completes processing one or more data elements, wherein the first order is different from the second order. receiving two or more data elements of a first collection of data elements into a first storage in a first order via a link (344, 368) connected to the first type of output port of a first component (326, 350) of the plurality of components and an input port (336, 360) of a second component (328, 352) of the plurality of components, and invoking a plurality of instances of a task corresponding to the second component (328, 352), including dynamically parallelize processing of respective received data elements by instantiating respective instances of the task corresponding to the second component to process the respective received data elements of the first collection of data elements, and including retrieving the data elements from the first storage, or from a second storage different to the first storage, in a second order, without blocking invocation of any of the instances until after any particular instance completes processing one or more data elements, wherein the first order is different from the second order.