The real secret weapon is to take the truth table and use a karnaugh map to reduce it to just the necessary states in a structured way.
You can transform it into a truth table by pulling these into input variables "f1ShouldBeCalledFirst", "f2ShouldBeCalledFirst" etc, or by using separate table for each binary decision, but that was overkill for my needs and it caused combinatorial explosion. YMMV.