Il commence le rugby dans le club de sa ville natale de Larche puis rejoint le CA Brive à partir des U15. Dès les cadets au sein du club briviste, il intègre le pôle espoirs d'Ussel de la FFR, qui le mènera vers de nombreuses sélections en équipes de France jeunes et aux portes du Pôle France de Marcoussis.
En juillet 2016, il figure sur la Liste développement de 30 joueurs de moins de 23 ans à fort potentiel que les entraîneurs de l'équipe de France suivent pour la saison 2016-2017[2].
Le 10 mars 2017, il honore sa première sélection en équipe de France face à l'Italie, à Rome pour le Tournoi des Six Nations 2017. Il profite notamment des absences de Damien Chouly et Charles Ollivon pour être aligné d’entrée face aux Italiens. Il est le troisième joueur de la liste «Développement» à être convoqué à l’échelon supérieur. Le , le CA Brive annonce qu'il a prolongé son contrat avec le club[3]. Sur le terrain de Bath en quart de finale de Challenge européen, les Corréziens s'inclinent (34-20). Fabien s'illustre en inscrivant un doublé en six minutes. Tout comme ses adversaires Toby Faletau et Semesa Rokoduguni, avec chacun un doublé.
En 2018, à la suite de la relégation du CA Brive en Pro D2, il s'engage avec le Racing 92[6].
Sélectionné pour la tournée en Nouvelle-Zélande en juin 2018, il joue le premier test match, avant de rejoindre les Barbarians français lors de la dernière semaine pour affronter les Highlanders à Invercargill. Titulaire au poste de troisième ligne centre, les Baa-baas s'inclinent 29 à 10 à Invercargill[7].
À partir de la saison 2022-2023, il est repositionné au poste de deuxième ligne, après les nombreuses absences à ce poste de Veikoso Poloniati, Bernard Le Roux et Anton Bresler. Il gagne finalement sa place à ce nouveau poste où il continue de joue la saison suivante[8] et prolonge ensuite son contrat de deux ans, soit jusqu'en 2026[9].