# Gerrit User Summit 2019 - Speakers

### Edwin Kempin - Google {#ekempin}

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.

### 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 in 2019.
Luca maintains [GerritHub.io](https://gerrithub.io), the Open Service for Gerrit Code Review
on top of GitHub repositories.

### Nicholas Mucci - Volvo Cars {xnupanic}

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

Nicholas is a Technical Expert in Continuous Deployment and a System Architect
for the Electrical Propulsion Systems group at Volvo Cars.  He has worked on
modernizing software engineering processes using Gerrit and other CM/CI systems
previously at Garmin and Apple and has been a member of the Gerrit community
since 2009.

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

### Alice Kober-Sotzek - Google {#aliceks}

Alice has been a software developer for 8 years with a strong focus on Java
development (both backend and frontend). In 2016, she joined the Gerrit
project and became a maintainer 8 months later. When the Engineering Steering
Committee was formed in 2019, she became one of its members.

Since joining the project, Alice has been part of Google's Gerrit backend team
who develops Gerrit core and maintains the Gerrit infrastructure at Google.
She is passionate about code health and wants to bring a good developer
experience to everyone.


### Michael Watkins - Softagram {#mwatkins}

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

Michael joined Softagram as a backend developer in the beginning of 2019,
helping to reinforce the small team of developers in their new approach to
code review and source code visualization. Shortly after joining the company,
he began working on integrating Softagram's impact reports into the Gerrit
workflow. Although he had no prior experience with Gerrit, Michael quickly
learned some of the ins and outs, and is on his way to becoming a Gerrit
expert. Besides sharing Softagram's simplified approach to code review at
the Gerrit User Summit in Sweden, Michael is looking forward to participating
as an attendee and continuing to build on his Gerrit Code Review knowledge.


### Thomas Gerbet - Enalean {#tgerbet}

Thomas is a software developer who has at heart to make application
security easier to get right for everyone.
Since 2015, he is one of the maintainers of the open-source ALM software
[Tuleap](https://www.tuleap.org/) which gives him the chance to work daily
with Gerrit.

### James E. Blair - Red Hat {#corvus}

James is a core member of the OpenStack project infrastructure team
and a maintainer of the Zuul project gating system. As a sysadmin and
hacker he gets to write elegant code and then try to make it work in
the real world. He has been active in free software for quite some
time, and has previously worked for UC Berkeley and the Free Software
Foundation.

### Patrick Hiesel - Google {#hiesel}

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

Patrick joined Google and the Gerrit project in 2016 working primarily on the
backend. He is a Gerrit maintainer and a member of the newly formed Engineering
Steering Committee. Before joining Google, Patrick worked on mobile apps and web
backends as a freelancer and at another big tech company.

Patrick's main focus is performance and stability. He makes the latency graphs
go up and the user satisfaction graphs go down. Or was it the other way around?

### Monty Taylor - Red Hat {#mordred}

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

Monty currently leads the team that works on the Zuul project for
CI/CD in Red Hat's CTO Office. He's the founder, core member and past
PTL of the OpenStack Infra team which runs CI and developer tooling
for OpenStack. He's a member of the OpenStack Foundation Board of
Directors, a Python Fellow and past member the OpenStack Technical
Committee. Monty is the PTL of the openstacksdk project and is the
maintainer of the Ansible modules for consuming OpenStack. Before his
OpenStack days he was a core developer on Drizzle and was a Senior
Consultant for MySQL, Inc.

### David Ostrovsky - GerritForge {#davido}

David is a contributor to Gerrit since 2013 and a maintainer/committer
since 2016. David has been an open source and free software enthusiast
for many years and has contribited to a number of open source projects.

### Marian Harbach - Google {#mharbach}

Marian joined Google in 2018 as a UX Researcher looking at internal developer
tools. In a previous life, he did academic research on the UX of security and
privacy in smartphones and the Web. Marian also used to be part of the connected
car security team at a large German automaker.

More recently, he is researching code review workflows and hoping to help improving
the Gerrit experience.

### Delphine Carlson - Google {#delphinec}

Delphine is a UX Designer at Google and works on Gerrit and Critique (the
Google internal code review tool).

### Ben Rohlfs - Google {#brohlfs}

Ben spent the past eleven years at Google working as an engineer on developer
tools, most of that time on Critique, the Google internal code review system.
Since 2019 he is Gerrit's frontend lead and a member of the Engineering Steering
Committee.

Unlike many engineers Ben is deeply in love with colors and pixels and has a
tendency to waste his time on css tweaks. Feel free to report issues to him
when something is one pixel off center.

### Ivan Frade - Google {#ifrade}

Ivan Frade is a software engineer at Google. He works in the git service
that hosts popular repositores as Chromium and Android. He is a regular
contributor to the JGit library.

Before working in Git, Ivan worked for Nokia in their linux-based mobile
platform, Maemo/Meego, and has contributed to the GNOME desktop.

### Matthias Sohn - SAP {#msohn}

Matthias is a long-time Gerrit contributor. He joined the Gerrit project in 2010,
and assumed the role as community manager in 2019.  He leads the Gerrit team at
SAP and is project lead of Eclipse JGit and EGit.


### Han-Wen Nienhuys - Google {#hanwen}

Han-Wen leads the Gerrit Backend team in Munich since 2016. Aside from managing
the team, he occasionally writes code when nobody is watching.

### Miikka Andersson - CollabNet {#mandersson}

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

Miikka joined CollabNet in 2016 as a Sr. Product Manager with special focus on
company’s version control and software configuration management offering. Prior
to joining CollabNet, he was architecting and driving large-scale CI/CD initiatives
when working for enterprises, such as Nokia and Microsoft. Being a huge advocate
of Agile and DevOps, he is always eager to help organizations to apply best SW
engineering practices.

### Tao Zhou - Google {#taoalpha}

Tao is a software engineer at Google. He joined the Gerrit Frontend team in Munich
in Aug, 2019.

