1 Compétitions officielles nationales et internationales senior, incluant le parcours amateur et en équipe réserve. 2 Matchs officiels. Dernière mise à jour : 2 juillet 2023
Après avoir débuté et engrainé de l'expérience dans le club de sa ville natale de l'Augusta Lumezzane, il commence dans l'équipe de l'Atalanta à l'âge de sept ans, au sein de l'une des équipes juniors du club bergamasque. Il joue successivement dans toutes les formations juniors du club, jusqu'à évoluer avec la seconde équipe dite Primavera, gagnant même le championnat Primavera 2012-2013.
Il réalise sa première apparition en Serie A sous les couleurs de Bergame le , à 19 ans, lorsque l'entraîneur Stefano Colantuono le fait entrer sur le terrain à la place de Daniele Baselli à la 69e minute du match contre l'AS Roma perdu 1-2. Toujours la même année, le , il joue toute la seconde mi-temps du match de Coupe d'Italie contre l'US Avellino, son équipe sortant victorieuse 2-0. Par la suite, durant ce championnat 2014-2015, il collectionne 2 présences sous les ordres du nouvel entraîneur Edoardo Reja, venu remplacer Colantuono lors des deux dernières rencontres contre le Chievo Vérone et l'AC Milan.
Lors de la saison 2015-2016, il est très souvent titularisé au milieu de terrain de l'équipe bergamasque.
Le , il quitte les bleus et noir pour rejoindre le SSC Napoli, en signant un contrat jusqu'en 2020.
Sélection
En 2011, il joue un match amical avec l'équipe d'Italie des -16 ans ; au cours des deux années suivantes il dispute au total 10 matchs avec le maillot des -17 ans et ensuite une fois avec ceux des -19 ans. En 2014, il commence à jouer avec l'équipe d'Italie des -20 ans, totalisant 7 matchs.