Eu acho que um bom lugar para começar (se você não vê nada óbvio) seria "depurando". A menos que você veja possíveis problemas logo de cara, um bom lugar para começar é fazer uma pequena lista de valores de teste. Bons valores são um valor de 'caminho feliz' (normal), um valor 'zero' ou 'vazio', valores nulos, um valor muito pequeno (uma cadeia de 1 caractere, o int 1, etc.), muito grande ou muito longo valor e valores 'estranhos' específicos ao tipo (por exemplo, caracteres Unicode para seqüências de caracteres, números negativos para entradas, etc.). Não faria mal mencionar aqui que normalmente você escreveria testes de unidade usando esses valores para testar o código e apenas executaria aqueles para verificar a função.
Comece caminhando com seus valores de caminho feliz. Para uma função de adição, você pode começar com 3 ou 4. Examine cada linha quanto a erros de digitação e lógicos, rastreando os valores das variáveis locais à medida que avança. Felizmente, você encontra alguns erros. Quando você terminar o caminho feliz, sentirá melhor o código e esperançosamente se sentirá um pouco menos sobrecarregado - diga algo como: "Agora que sinto melhor o que esse código está fazendo, estou voltando atrás e dando uma olhada nisso ", faça exatamente isso - procurando coisas que se destacam para você como coisas que você teria feito de maneira diferente (decisões ruins de design, variáveis mal nomeadas, investigar possíveis erros etc.).
Se isso não o levar a lugar algum, ou se você sentir que não tem mais o que dizer, retorne à sua lista de valores de teste e passe por ela novamente com uma nova que você acha que provavelmente causará problemas.
Isso vai pelo menos fazer você ir.