We consider performance-complexity tradeoffs when a soft-decision low-density parity-check code is used in concatenation with a hard-decision error-correcting code, such a staircase code. The inner code is carefully designed to reduce errors to the point where the outer code can provide the required error-correcting performance.