Nunca use a palavra-chave estática. Bem, é claro quando você está fazendo métodos de extensão. Caso contrário, não faça.
A estática está codificando sua dependência e eliminando OOP (você não opera com instâncias). Em vez disso, use injeção de dependência.
Caches são aparentemente implementados naturalmente usando estática. Não! Você obtém mais flexibilidade evitando essa estratégia de implementação e pode deixar outra pessoa cuidar da estratégia de despejo. Freqüentemente, alguém tem uma ideia melhor sobre a estratégia de despejo com base no cenário de uso, em vez de uma classe de cache genérica.
Às vezes, vejo pessoas tornando o método estático quando os métodos não acessam o estado no objeto. Resharper também o incentiva. Novamente, não siga esta prática. Se o seu método não estiver acessando nenhum estado no objeto, pode ser uma dica de que o método não pertence a essa classe. Não torne esses métodos estáticos, pois eles irão prejudicá-lo quando o código evoluir.
A configuração é freqüentemente ensinada em candidatos a estática. Confira o projeto https://github.com/kbilsted/StatePrinter que não usa estática para configuração. Isso me permite usar diferentes configurações ao executar meus testes em paralelo.