Q:

Como trabalhar com validação de dados no Laravel

Atualmente estou trabalhando com Laravel 5.5, entretanto, essa pergunta se aplica a "todas as versões" em razão da sua generalização.
Minha dúvida é: estou utilizando $this->validade para validar os dados vindos do form. Qual seria a receita para escolher entre usar $this->validate ou Form Request Validation?
Cheguei a pensar em usar Form Request Validation sempre que seja preciso realizar a validação em outros métodos, para não correr o risco de por um descuido acabar escrevendo regras divergentes em métodos distintos.
Outra coisa, poderíamos considerar "impraticável/inadequado" trabalhar em todos os métodos com Form Request Validation?

A:

Para obter uma melhor compreensão das diferenças do método validate e do Form Request Validation vou falar um pouco de cada, segundo o que a documentação oficial cita, ao final a principal diferença entre eles e qual valeria mais a pena usar.
No método validate fornecido pelo objeto, Se as regras de validação forem aprovadas, seu código continuará executando normalmente; no entanto, se a validação falhar, uma exceção será lançada e a resposta de erro correta será automaticamente enviada ao usuário. No caso de uma solicitação HTTP tradicional, uma resposta de redirecionamento será gerada, enquanto uma resposta JSON será enviada para solicitações AJAX.
Método validate na função dentro do Controller
public function store(Request $request)
{
    $validatedData = $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);
}

Simplesmente passamos as regras de validação desejadas para o método validate (em tempo de execução da função chamada). Sse a validação falhar, a resposta adequada será gerada automaticamente. Se a validação for passada, o Controller continuará executando normalmente.
Form Request Validation
É usado em cenários de validação mais complexos. Os Form Request são classes de solicitação personalizadas que contêm lógica de validação.
Para criar uma classe de Request
php artisan make:request StoreBlogPostRequest

A classe gerada será colocada no diretório app/Http/Requests. As regras de validação devem ser adicionadas ao método rules. Exemplo:
public function rules()
{
    return [
        'title' => 'required|unique|max:255',
        'body' => 'required',
    ];
}

Então, como são executadas as regras de validação? Tudo o que você precisa fazer é digitar a solicitação no método do seu controlador:
public function store(StoreBlogPostRequest $request)
{
    // The incoming request is valid...
}

O Form Request recebido é validado antes que o método do controlador seja chamado, o que significa que você não precisa desordenar seu controlador com qualquer lógica de validação, pois ele já foi validado!
Se a validação falhar, uma resposta de redirecionamento será gerada para enviar o usuário de volta ao seu local anterior. Os erros também serão exibidos na sessão para que eles estejam disponíveis para exibição. Se o pedido fosse uma solicitação AJAX, uma resposta HTTP com um código de status 422 será retornada ao usuário, incluindo uma representação JSON dos erros de validação.
Sendo assim a principal diferença entre eles é o tempo em que a validação ocorre, sendo um dentro do método no Controller e outro antes do Controller ser chamado. Mas qual deles vale mais a pena usar?
Tudo depende do escopo e tamanho do seu projeto, se existirem muitos forms com regras de validação semelhantes/iguais, valerá a pena construir um Form Request Validation, caso contrario valerá mais a pena usar os métodos validate dentro do Controller.
Quanto a ser impraticável/inadequado o uso do Form Request Validation em todos os métodos, imagino que por serem chamadas antes dos Controllers executarem, tornam o código como um todo mais limpo, organizado e rápido. Mas cai novamente no "depende", você construiria um Form Request para cada form? Eles poderiam ser aproveitados em diversas funções? Senão, acho que o validate seria mais apropriado.

