https://en.wikipedia.org/wiki/
But project management triangles like these, for software, are almost always a lie; what works is requirements planning. So I'll list the requirements for a make-like tool:
- sandboxed / traced model of task execution, capturing dependencies (file I/O, subprocess creation, etc.)
- database (store) of recorded execution traces for each task
- unique stable identifiers for tasks, so you can build subsets of them and modify the task graph from the command line (like --touch and make a.o b.o)
- scheduler, buffering up file changes etc. and deciding which tasks to run when (ideally with the usual enhancements: multicore/multithreaded, perhaps distributed across a build farm)