not completed but commiting anyway

Good here but, int() will fail if passed a None so instead:

    interest = None
    if rate is not None:
        total = compound_interest(principal, duration, rate, interval=12)
        interest = int(total - principal)  # is it an int I ask for? I forget
    return interest

The reason is that we want it to return none if there is no rate (and thus no interest) but you can't call int(None) -- that would fail, so instead,