One of the major goals of the Enzyme Protocol is to make shares continuously redeemable. i.e., an investor should be able to redeem any amount of shares at any point in time and receive their proportionate slice of fund assets instantly, without needing to worry about the limited availability of liquid assets.
The core contracts facilitate continuous redeemability, and indeed it is important that the redeemShares() and redeemSharesDetailed() functions are kept relatively simple with few external calls, to reduce the chance of a redemption-blocking error.
It should also be noted, however, that there is no core guarantee on being able to redeem shares for a full compliment of assets at any given time, as this is contingent on the fund manager's use of configurations and asset universe:
e.g., a fund manager can specify a sharesActionTimelock , which requires that a specified amount of time must elapse between buying shares and redeeming shares.
e.g., a fund manager can trade assets that do not have instant finality. Synths are one example of this, which do not achieve a final balance after a few minutes, and are not transferable until they do so. In fact, a malicious fund manager could exploit this non-redeemable period to continuously trade Synths and block redemption indefinitely, but a properly-configured policy can mitigate this risk. For example, when configured properly, the GuaranteedRedemption guarantees a redemption window daily.
It is thus important for the investor to consider the fund's configuration when determining if a fund manager has provided adequate guarantees for consistent redeemability.