# Gerrit Virtual User Summit 2021 - Speakers

### Luca Milanesio - GerritForge {#lmilanesio}

[LinkedIn](https://www.linkedin.com/in/lucamilanesio/)

Luca is the co-founder of GerritForge and has over 25 years of software
development and application lifecycle management experience.
He is a Gerrit Contributor since 2012 and member of the Engineering
Steering Committee since 2019.

Luca maintains [GerritHub.io](https://gerrithub.io), the Open Service
for Gerrit Code Review on top of GitHub repositories.

### Fabio Ponciroli - GerritForge {#fponciroli}

[LinkedIn](https://uk.linkedin.com/in/fponciroli/)

Fabio is a Senior Software Engineer at GerritForge where he contributes to the
OpenSource Gerrit Code Review project.
He has been involved since the beginning in the design and development of DevOps
analytics tools for Gerrit.
He has extensive experience in working on backend systems, on-premise and
cloud-based, with different programming languages, such as Scala, Java, NodeJS
and related ecosystems.

### Paul Jolly - CUE {#myitcv}

[Twitter](https://twitter.com/_myitcv)

Paul is a core contributor on the [CUE](https://cuelang.org/) project. He
co-created [play-with-go.dev](https://play-with-go.dev), co-founded the [Go
Tools Working Group](https://github.com/golang/go/wiki/golang-tools), is a
regular contributor to the [Go](https://golang.org) project, and helps maintain
various Go and CUE-based open source projects.

### Shane McIntosh - University of Waterloo {#smcintosh}

Shane is an associate professor at the [University of Waterloo](https://cs.uwaterloo.ca/), where he directs the Software Repository Excavation and Build Engineering Labs ([the Software REBELs](https://rebels.cs.uwaterloo.ca/)). Previously, he was an assistant professor with McGill University, where he held the Canada Research Chair in Software Release Engineering. He received the PhD from Queen's University, for which he was awarded the Governor General's Academic Gold Medal. In his research, he uses empirical methods to study software build systems, release engineering, and software quality.

### Patrick Hiesel - Google {#patrick-hiesel}

Patrick joined Google and the Gerrit project in 2016 working primarily on the backend. Since then, he has worked on making Gerrit faster and more stable as well as different features including (most recently) Submit Requirements.

He is a Gerrit maintainer and a member of the Engineering Steering Committee.
