rename: maybeSplitThenRecurse.
Take the outerProducer as the second parameter and keep the logic of outerProducerMergableWithSource local to the method. This makes it easier to understand by reading this method as a unit.