The counter argument is Flow IS what you want.  Why poll for decision tasks and try to schedule the work execution between different servers when SWF Flow can do it for you?<p>All the things you found irritating are a one-time setup, and once you are chugging along you can write incredibly quickly powerful distributed systems without worrying about scaling or scheduling of any kind.<p>But I agree the documentation could do a better job of SELLING you on that point up-front.<p>Truth is, I don&#x27;t know of any other framework or service that allows you to simply write java code like this:<p>A = getA();
B = getB();
C = getC(A, B);
D = getD(C);
E = getE(B);<p>Assuming all these getCalls are complex, time-consuming, and stateful, Flow automatically sets it up so that at the start getA() and getB() start executing in parallel (and on different servers!), getE() i immediately started once B is realized, getC() is immediately executed once both A and B are both realized, and so on.<p>For complex workflow with undetermined execution time where the whole thing may take days to execute, the fact that you can just tweak a simple Java file to update your business logic, and add some servers to your fleet whenever you want to improve throughput is MAGICAL.<p>Not all problems in software are simple to abstract away. I think Flow does the best it can do