A method for detecting at-risk non-volatile storage elements, comprising: programming first data into a first set of non-volatile storage elements; after successfully completing the programming, determining whether the first set of non-volatile storage elements are prone to fail; and if the first set of non-volatile storage elements are prone to fail, re-programming the first data to a second set of non-volatile storage elements that are different than the first set of non-volatile storage elements; wherein the determining whether the first set of non-volatile storage elements are prone to fail comprises: performing a first test on the first set of non-volatile storage elements to determine whether the first set of non-volatile storage elements are prone to fail; if the first set of non-volatile storage elements fail the first test, performing a second test on the first set of non-volatile storage elements to determine whether the first set of non-volatile storage elements are prone to fail; and concluding that the first set of non-volatile storage elements are prone to fail if the first set of non-volatile storage elements fail the second test; and characterised in that: the programming includes performing multiple iterations of a programming operation and maintaining a count value of a particular programming loop counter indicating how many iterations were performed to successfully complete the programming operation of the first set of non-volatile storage elements; and the performing the first test comprises comparing the count value of the particular programming loop counter to data based on other programming loop count values for other successful programming operations. programming first data into a first set of non-volatile storage elements; after successfully completing the programming, determining whether the first set of non-volatile storage elements are prone to fail; and if the first set of non-volatile storage elements are prone to fail, re-programming the first data to a second set of non-volatile storage elements that are different than the first set of non-volatile storage elements; wherein the determining whether the first set of non-volatile storage elements are prone to fail comprises: performing a first test on the first set of non-volatile storage elements to determine whether the first set of non-volatile storage elements are prone to fail; if the first set of non-volatile storage elements fail the first test, performing a second test on the first set of non-volatile storage elements to determine whether the first set of non-volatile storage elements are prone to fail; and concluding that the first set of non-volatile storage elements are prone to fail if the first set of non-volatile storage elements fail the second test; and characterised in that: the programming includes performing multiple iterations of a programming operation and maintaining a count value of a particular programming loop counter indicating how many iterations were performed to successfully complete the programming operation of the first set of non-volatile storage elements; and the performing the first test comprises comparing the count value of the particular programming loop counter to data based on other programming loop count values for other successful programming operations. performing a first test on the first set of non-volatile storage elements to determine whether the first set of non-volatile storage elements are prone to fail; if the first set of non-volatile storage elements fail the first test, performing a second test on the first set of non-volatile storage elements to determine whether the first set of non-volatile storage elements are prone to fail; and concluding that the first set of non-volatile storage elements are prone to fail if the first set of non-volatile storage elements fail the second test; and characterised in that: the programming includes performing multiple iterations of a programming operation and maintaining a count value of a particular programming loop counter indicating how many iterations were performed to successfully complete the programming operation of the first set of non-volatile storage elements; and the performing the first test comprises comparing the count value of the particular programming loop counter to data based on other programming loop count values for other successful programming operations. the programming includes performing multiple iterations of a programming operation and maintaining a count value of a particular programming loop counter indicating how many iterations were performed to successfully complete the programming operation of the first set of non-volatile storage elements; and the performing the first test comprises comparing the count value of the particular programming loop counter to data based on other programming loop count values for other successful programming operations.