# Gerrit User Summit 2023 - Speakers

### Luca Milanesio - GerritForge {#luca}

Luca is co-founder of GerritForge and has over 30 years of software
development and application lifecycle management experience.
He has been Gerrit Contributor since 2012, Gerrit release manager, member
of the Gerrit Engineering Steering Committee and maintainer of [GerritHub.io](https://review.gerrithub.io),
the Open Service for Gerrit Code Review on top of GitHub repositories.

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

### James Blair - Acme Gating {#corvus}

James is the project lead for the Zuul project gating system, and a
founding member of the OpenDev collaboratory team.  As a sysadmin and
hacker he gets to write elegant code and then try to make it work in the
real world.  He started [Acme Gating](https://acmegating.com/) to provide
enterprise Zuul support and services.

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

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

Shane McIntosh is the current Ross & Muriel Faculty Fellow and an Associate Professor in the
[Cheriton School of Computer Science at the University of Waterloo, Canada](https://cs.uwaterloo.ca/).
At U. Waterloo, Shane directs the Software Repository Excavation and Build Engineering Labs
([the Software REBELs](https://rebels.cs.uwaterloo.ca/)), where he and his trainees
use empirical methods to study software build systems, release engineering, and
software quality.

[LinkedIn](https://www.linkedin.com/in/shane-mcintosh/)

### Farshad Kazemi - University of Waterloo {#farshad}

Farshad Kazemi is a Ph.D. Candidate at the University of Waterloo. The overarching goal of his
Ph.D. research is making pragmatic improvements to the quality and efficiency of peer code
review.

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

### 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 Gerrit
[DevOps analytics](https://gerrit.googlesource.com/plugins/analytics/)
tools, [multi-site](https://gerrit.googlesource.com/plugins/multi-site/) plugin
and many other.
He has also created the [Gatling protocol manager for Git](https://github.com/GerritForge/gatling-git)
which has finally provided a real E2E test suite for the validation of
the Gerrit Code Review releases.
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.

### Diego Zambelli Sessona - GerritForge {#diego}

Diego Zambelli Sessona is a software developer and started to discover Gerrit only a few
months ago. Working at Gerritforge started to add his small contributions in  June 2023.

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

### 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.

### 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 four 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) and pull-replication.

### Christoforos Miliotis - GerritForge {#cmiliotis}

Christoforos is a Software Engineer with a broad experience in distributed
systems. He joined GerritForge in March 2023 where he contributes to the
OpenSource Gerrit Code Review project.

### Jacek Centkowski - Unaffiliated {#jacek}

Jacek Centkowski is a Gerrit contributor since 2013. He deepened his Gerrit knowledge and
involvement and was trusted a maintainer in 2020. He has recently focused on
[owners' plugin improvements](https://gerrit-review.googlesource.com/c/plugins/owners/+/373094/1).

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

### Daniele Sassoli

Daniele is a Senior Software Engineer with a long experience in highly scalable
systems hosted in the cloud. As a member of the GerritForge team he has had the
chance to design, mantain and improve high throughput multi-site installations.
He also gets to learn from the team's wealth of experience in all things Gerrit
and contribute to the long list of plugin's maintained by them.

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