Curto o suficiente para ser otimizado corretamente
Os métodos devem ser tão curtos que façam exatamente uma coisa. A razão para isso é simples: para que seu código possa ser otimizado corretamente.
Em uma linguagem JIT-ted como Java ou C #, é importante que seus métodos sejam simples para que o compilador JIT possa produzir código rapidamente. Métodos mais longos e complicados naturalmente exigem mais tempo de JIT. Além disso, os compiladores JIT oferecem apenas algumas otimizações e apenas os métodos mais simples se beneficiam disso. Esse fato foi mencionado no Effective C # de Bill Wagner .
Em uma linguagem de nível inferior, como C ou C ++, ter métodos curtos (talvez uma dúzia de linhas) também é importante, pois dessa forma você minimiza a necessidade de armazenar variáveis locais na RAM e não em um registro. (Aka 'Register Spilling'.) Observe, porém, que nesse caso não gerenciado, o custo relativo de cada chamada de função pode ser bastante alto.
E mesmo em uma linguagem dinâmica, como Ruby ou Python, ter métodos curtos também ajuda nas otimizações do compilador. Em uma linguagem dinâmica, quanto mais dinâmica é uma característica, mais difícil é otimizar. Por exemplo, um método longo que pega um X e pode retornar um Int, Float ou String provavelmente terá um desempenho muito mais lento que três métodos separados, cada um retornando apenas um único tipo. Isso ocorre porque, se o compilador souber exatamente que tipo a função retornará, também poderá otimizar o site de chamada da função. (Por exemplo, não verificando conversões de tipo.)