Flow-Based Programming is an approach to developing applications based on the concept of multiple asynchronous components communicating by means of data streams. An application is viewed as a system of data streams being transformed by components. In addition no component knows who its neighbours are - communication is indirect via connections defined externally to the components. This allows components to be "black boxes", so that complex applications can often be built without writing any new code at all. Although this concept is similar to concepts current in the area of distributed and parallel systems, up until now it has not been recognized that it is also an extremely productive approach to improving programmer productivity and application maintainability.