Current wallets tend to commit to the inputs for a transaction during its construction. This is both undesirable and unnecessary.
A wallet only needs to commit to a partial excess.
The following describes a Just-in-Time method of picking inputs.
Both (or all in general) parties engaging in a transaction derive the blinding factor for their output (or each of their outputs in general), and also pick a random offset.
Their partial excess is the sum of all these.
EDIT: I had this wrong; the partial excess should be the sum of the output blinding factors MINUS the offset.
It also picks a random nonce.
After exchanging commitments to the partial excesses and random nonces, each party can compute their partial signature.
The slate is then passed around with each party adding their output(s), rangeproof(s), and partial signature to the aggregate. Only at this point does it add any inputs it might have, at the same time subtracting their blinding factors from its offset, and adding the resulting offset to the aggregate.
If there is only sender and receiver, and the slate ends up at the sender last, then it can publish the tx immediately after picking its input(s), minimizing the time they stay locked, no matter how long it took to construct the transaction. This should be of particular interest to exchanges.