# 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 has been a Gerrit Contributor since 2012 and a 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 to 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 Ph.D.
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.

### Edwin Kempin - Google {#edwin-kempin}

Edwin is a long-time Gerrit contributor. He joined the Gerrit project in 2010,
became a maintainer in 2012 and assumed the role as community manager in 2019.

Since 2015 he's working at Google in the Gerrit backend team that develops
Gerrit core and maintains the Gerrit infrastructure at Google. Previously Edwin
worked 10+ years at SAP where he was responsible for Gerrit development and
hosting as well.

### Ian Gauthier - Flywheel.io {#igauthier}

Ian is a recent Master's graduate from [McGill University](https://www.mcgill.ca/),
where he studied Software Engineering with a particular focus on Software
Modelling and Software Repository Mining. Ian currently works at Flywheel.io.

### Delphine Carlson - Google {#delphinec}

Delphine is Gerrit UX Designer since mid-2019.
She is the designer behind Gerrit's new features: the attention set UI, the code
owners plugin, the Checks UI, the Submit requirement, and multiple Comments
experience improvements.

She loves collaborating with the Gerrit team and users to improve Gerrit's user
experience and help developers get their work done with ease.

### Ben Rohlfs - Google {#brohlfs}

Ben was the Gerrit frontend tech lead from 2019-2021 and has been a maintainer
since 2019. He loves working on web apps for developers and tries to make Gerrit
users happy and productive.

His largest contributions to Gerrit so far were the Attention Set, the new
Checks API/UI (see lightning talks) and heading large infrastructure migrations
such as JavaScript->TypeScript and Polymer1->2->3->Lit.

### Marcin Czech - GerritForge {#mczech}

Marcin is a Senior Software Engineer at GerritForge where he contributes to the
OpenSource Gerrit Code Review project.

Over the last two years, he has been involved in the design and development of
numerous parts of the Gerrit ecosystem, such as Gerrit core, multi-site,
events-broker(Kafka and AWS Kinesis), pull-replication and external-ids
online migration.

### Antonio Barone - GerritForge {#syntonyze}

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

Antonio joined GerritForge in 2018. Since then, he has contributed to the design
and development of various tools and plugins for Gerrit, such as DevOps
analytics, multi-site and chronicle-map. Recently, he zeroed in on the
integration of Gerrit with the cloud.
