This document discusses Viterbi decoding in optical communication systems. It begins with an introduction and overview. It then covers electronic circuits for conversion, convolutional encoding including trellis diagrams, and the Viterbi algorithm for optimum decoding including computing metrics, path selection, and decoding a received sequence. It discusses the complexity of the Viterbi algorithm and recent advances like lazy Viterbi. In the end it provides a summary and references.