When the order/structure of calling functions matters, it should be explicitly required that they are called in that order.
public void dive(String reason) { saturateGradient(); reticulateSplines(); diveForMoog(reason); }
vs
public void dive(String reason) { Gradient gradient = saturateGradient(); List<Spline> splines = reticulateSplines(gradient); diveForMoog(splines, reason); }
The latter enforces the order in which the functions are called due to their arguments, which is good.