od 2018 roku profesor zwyczajny.
Zawodowo związany z Uniwersytetem Jagiellońskim, w latach 2000–2002 adiunkt w Katedrze Postępowania Administracyjnego, a od 2002 roku pracownik naukowy Katedry Prawa Administracyjnego. W latach 2012–2018 profesor uczelni, a w latach 2019–2022 kierownik Katedry Prawa Administracyjnego. Od 2024 roku kierownik Zakładu Teorii i Filozofii Prawa Administracyjnego UJ.
W latach 1995–1997 odbył aplikację sądową w okręgu Sądu Wojewódzkiego w Krakowie, a w 1997 roku złożył egzamin sędziowski. W latach 1998–2004 był członkiem Samorządowego Kolegium Odwoławczego w Krakowie. Od 2004 roku związany z sądownictwem administracyjnym: najpierw jako asesor, następnie od 2007 roku jako sędzia Wojewódzkiego Sądu Administracyjnego w Krakowie. 13 września 2016 został powołany na sędziego Naczelnego Sądu Administracyjnego, stanowisko objął 11 października tegoż roku.
Stypendysta na Uniwersytecie w Orleanie oraz profesor wizytujący na Université Bretagne Sud w Vannes. Wykładał m.in. na Uniwersytecie Iwana Franki we Lwowie. Członek Rady Programowej Centrum Badań Zaawansowanych UAM w Poznaniu, współpracującego z Université Paris 1 Panthéon-Sorbonne i Université de Lorraine.