SUMMARYTraditional programming environments represent program source code as a set of source files. These files have various 'dependencies' on each other, such that a file needs recompilation if it depends on a file which has changed. A 'build tool' is used to process these dependencies and bring the application 'up-to-date'. An example of a build tool is the UNIX 'make'. This paper examines what happens when the dependencies used by the build tool are expressed between functions (or objects) rather than between files. Qualitative differences arise from the difference in granularity. The result is an effective incremental compilation programming environment, based on the C++ language. It is called 'Barbados', and is fully implemented. The environment resembles an interpreter in that changes to source code appear to be immediately reflected in all object code, except that errors are reported early as in compiled systems. Incremental compilation is not a well-used technology, possibly because the 'fine-grain build' problem is not well understood. Nevertheless, incremental compilation systems do exist. The advantages of the system described here are that it works with relatively standard compilation technology, it works for the C++ language including the preprocessor, it is an elegant solution and it is more efficient than competing algorithms.