I work on the astronomy side of these things (job workflow management), and it&#x27;s kind of frustrating to develop against a supercomputer. We&#x27;re still stuck with schedulers and batch systems as opposed to provisioning.<p>If you have a job and it just needs one core (your code is embarrassingly parallel), that&#x27;s all well and fine, except you can&#x27;t just get one core, you get 16 or 24 as the smallest unit. That&#x27;s fine, except now you end up writing a task queue, and a system which spins up new workers whenever the old ones are killed due to wall clock time. But most of these supercomputing centers aren&#x27;t too keen on having services running locally, so now your task queue is a remote system, and now you&#x27;ve got to do clever things wherever you can to make all this work the way you want it to (leverage any remote APIs, write SSH tunnel wrappers, etc...) Now you&#x27;ve got another batch system for a batch system.<p>The solution to this at the system level is to instead also provide serial queues which schedule one job to one core. But if too many serial jobs are in the works, especially if they aren&#x27;t confined to a subset of the nodes, the true MPI jobs which will struggle to get scheduled. This isn&#x27;t too much of an issue so long as everyone has a wall clock, but it&#x27;s definitely not ideal.<p>Ideally, you&#x27;d provision your machines, run a few services, and have them as long as you need them, do a bunch of shit, and release your machines. But it doesn&#x27;t work that way.<p>More pain comes around should you need to stage in&#x2F;out your massive amounts of data.