A computer-implemented method of debugging a dataflow graph including: receiving a first dataflow graph that includes components (102, 103, 104, 106, 108, 110, 112, 114) and flows (116, 118), the components representing operations performed on data records, the flows representing flows of data records between components; receiving a specification (200, 306) that is separate from the first dataflow graph, the specification defining one or more insertions (201, 213), each of the insertions being indicative of at least one graph component (208, 220) to be inserted into the first dataflow graph and associated with a flow (116, 118) of the first dataflow graph into which the at least one graph component is to be inserted; generating the one or more graph components (420, 422) that correspond to the one or more insertions defined by the specification; and generating a second dataflow graph (400a, 400b, 400c, 400d) that includes components (402, 403, 404, 406, 408, 410, 412, 414) and flows (416, 418) that correspond to at least some of the components (102, 103, 104, 106, 108, 110, 112, 114) and flows (116, 118) of the first dataflow graph and the one or more generated graph components (420, 422) that correspond to the one or more insertions defined by the specification (200, 306); wherein the specification defines that the at least one graph component to be inserted is a probe configured to monitor data passing between graph components as the second dataflow graph executes or a test source configured to provide data to a component of the second dataflow graph; the method further including: compiling the second dataflow graph (400a, 400b, 400c, 400d) and executing the compiled second dataflow graph on a computer; modifying a parameter associated with one of the components of the second dataflow graph; determining whether the modified component, when executed, impacts any of the generated one or more graph components (420, 422); and re-executing the second dataflow graph; wherein, if the modified component, when executed, does not impact any of the generated components, the modified component is not re-executed; wherein one of the generated components is a probe and the modified component resides upstream of a flow associated with the probe; wherein the probe is further configured to store monitored data; wherein the modified component, when executed, does not impact any of the generated components (420, 422) when data stored by the probe would be unaffected by the execution of the modified component. receiving a first dataflow graph that includes components (102, 103, 104, 106, 108, 110, 112, 114) and flows (116, 118), the components representing operations performed on data records, the flows representing flows of data records between components; receiving a specification (200, 306) that is separate from the first dataflow graph, the specification defining one or more insertions (201, 213), each of the insertions being indicative of at least one graph component (208, 220) to be inserted into the first dataflow graph and associated with a flow (116, 118) of the first dataflow graph into which the at least one graph component is to be inserted; generating the one or more graph components (420, 422) that correspond to the one or more insertions defined by the specification; and generating a second dataflow graph (400a, 400b, 400c, 400d) that includes components (402, 403, 404, 406, 408, 410, 412, 414) and flows (416, 418) that correspond to at least some of the components (102, 103, 104, 106, 108, 110, 112, 114) and flows (116, 118) of the first dataflow graph and the one or more generated graph components (420, 422) that correspond to the one or more insertions defined by the specification (200, 306); wherein the specification defines that the at least one graph component to be inserted is a probe configured to monitor data passing between graph components as the second dataflow graph executes or a test source configured to provide data to a component of the second dataflow graph; the method further including: compiling the second dataflow graph (400a, 400b, 400c, 400d) and executing the compiled second dataflow graph on a computer; modifying a parameter associated with one of the components of the second dataflow graph; determining whether the modified component, when executed, impacts any of the generated one or more graph components (420, 422); and re-executing the second dataflow graph; compiling the second dataflow graph (400a, 400b, 400c, 400d) and executing the compiled second dataflow graph on a computer; modifying a parameter associated with one of the components of the second dataflow graph; determining whether the modified component, when executed, impacts any of the generated one or more graph components (420, 422); and re-executing the second dataflow graph; wherein, if the modified component, when executed, does not impact any of the generated components, the modified component is not re-executed; wherein one of the generated components is a probe and the modified component resides upstream of a flow associated with the probe; wherein the probe is further configured to store monitored data; wherein the modified component, when executed, does not impact any of the generated components (420, 422) when data stored by the probe would be unaffected by the execution of the modified component.