The lazy Viterbi decoder is a maximum-likelihood decoder for block and stream convolutional codes. For many codes of practical interest, under reasonable noise conditions, the lazy decoder is much faster than the original Viterbi decoder. For a code of constraint length 6, the lazy algorithm is about 50% faster than an optimized implementation of the Viterbi decoder whenever SNR > 6dB. Moreover, while the running time of the Viterbi decoder grows exponentially with the constraint length, under reasonable noise conditions, the running time of the lazy algorithm is essentially independent of the constraint length. This paper introduces the lazy Viterbi decoder and shows how to make it efficient in practice.