# Gerrit User Summit 2024 - Speakers

### Luca Milanesio - CEO, GerritForge {#dmilanesio}

With 33 years of experience in all aspects of Source Control Management, CI/CD
and Application Lifecycle Management, I have contributed to the success of many
large companies across the globe.

I co-founded GERRITFORGE 16 years ago, when I then join forces with Google,
Qualcomm, SAP and the other Gerrit contributors to fuel innovation and drive the
Gerrit Code Review open-source project. I play an active role in the OpenSource
Community, contributing to several major projects.
* Jenkins Continuous Integration (http://www.jenkins-ci.org) since 2007 in
cooperation with CloudBees (www.cloudbees.com)
* Gerrit Code Review (https://code.google.com/p/gerrit/) and JGit
(https://projects.eclipse.org/projects/technology.jgit) since 2011 in
cooperation with Google (www.google.com) and SAP (www.sap.com) I have been
speaking in international conferences (Krakow, Varsaw, San Francisco, Palo Alto,
GooglePlex - Mountain View) and author of whitepapers and books on Git and
Gerrit Code Review.

### Jacek Centoswki - Senior Software Engineer - SoftwareMill {#jcentoswki}

I am a software engineer and architect with experience across various domains.
Over time, I’ve seen how good architecture and thoughtful design choices
directly influence the quality, maintainability, and long-term impact of a
product.

I care about practical, scalable designs and clear separation of concerns. In my
work, I focus on designing and maintaining systems that support change and are
easy to reason about. I believe that during the implementation phase, code
reviews are a crucial step - and making them as efficient as possible pays off.

Outside of work, I contribute to open source, particularly Gerrit Code Review,
where I’m active as a developer, maintainer, and occasional speaker.

### Farshad Kazemi - MLOps/SE researcher - Arteria AI {#fkazemi}

Yet another developer seeking to find the answer to "why" questions!

### Antonio Barone - Senior Sofware Engineer - GerritForge inc. {#abarone}

Gerrit maintainer and Release manager

### Vasdev Gullapalli - Senior Staff Site Reliability Engineer/Manager - Qualcomm {#vgullapalli}

Vasdev Gullapalli is a Senior Staff Engineer and Manager at Qualcomm,
specializing in Site Reliability Engineering, DevOps, and platform engineering.
With over 15 years of technology leadership, he architects and manages
large-scale software delivery platforms, including GitHub, GitLab, and Gerrit,
supporting over 100,000 engineers worldwide.

### Fredrik Medley - Lead Architect - Meroton {#fmedley}

Fredrik is the Lead Architect at Meroton, focusing on improving developer
experience by finding the bottlenecks in the build, test and bug-fixing flows.
He has used Gerrit and Zuul since 2013, Bazel since 2017 and is a maintainer of
Buildbarn.