Monday, July 10, 2017

Tools for fools

In project management there's this idea of "fast, good, cheap; pick two":
https://en.wikipedia.org/wiki/Project_management_triangle

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)
I think that's as far as I can go here; the requirements are pretty generic. But in a bigger organization like Google or whatever it makes sense to encode the knowledge as software so it can be shared as quickly and easily as possible.