1. A method of iteratively selecting coverage assignments from a plurality of candidate coverage assignments, the method comprising: generating a candidate error-correction product code based on a selected coverage assignment and at least one input, encoding data based on the generated candidate error-correction product code, comparing a performance level of the encoded data to a desired performance level, and if the desired performance level is satisfied by the encoded data, returning the selected coverage assignment and terminating the iterative selection of coverage assignments from the plurality of candidate coverage assignments.