1. A method of programming a non-volatile memory comprising: (a) determining a tendency of a threshold voltage of a first memory cell transistor to shift from a programmed state; (b) selecting a first verification voltage from a plurality of verification voltages in response to the determining; and (c) programming the first memory cell transistor to alter the threshold voltage of the first memory cell transistor, the programming including verifying the threshold voltage of first memory cell transistor has been altered sufficiently using the first verification voltage, wherein the step of (a) determining a tendency of the threshold voltage of the first memory cell transistor to shift comprises performing a read operation of the first memory cell transistor after completion of a program of the first memory cell transistor to determine a shift of the threshold voltage of the first memory cell transistor outside of a first range.