# Gerrit User Summit 2017 - Speakers

### Dave Borowitz - Google {#dborowitz}

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

Dave Borowitz is Staff Software Engineer at Google and principal
project maintainer.

### David Ostrovsky - Unaffiliated {#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.

### David Pursehouse - CollabNet {#dpursehouse}

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

David is a contributor to Gerrit since 2011 and a maintainer/committer
since 2012. He is based in Japan and works remotely as part of
CollabNet's Git Engineering team in Berlin.

### Eryk Szymanski - CollabNet {#eszymanski}
[LinkedIn](https://www.linkedin.com/in/eryk-szymanski-94b92ba)

Eryk is CollabNet’s Engineering Manager responsible for Git and Gerrit
related development efforts.

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

[LinkedIn](https://www.linkedin.com/in/han-wen-nienhuys-794753)

Han-Wen Nienhuys is Staff Software Engineer at Google and manages Google's
Gerrit backend team in Munich.

### Krzysztof Miesniak - Intel Corporation {#kmiesniak}

[LinkedIn](https://www.linkedin.com/in/krzysztof-miesniak-9036132/)

Krzysztof Miesniak is a Workflow Architect and Software Engineering
Manager at Intel Corporation.

He leads Software Workflow Architecture and Development team responsible
for designing, implementing and rolling out software workflow and methodology
solutions for a large development organization.
In the past he has worked in various companies leading projects related to
Software Integration and Continuous Delivery.
He holds a Master's degree from Wroclaw University of Science and Technology.

### Luca Milanesio - GerritForge {#lmilanesio}

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

Luca is co-founder of GerritForge and has over 20 years of software development
and application lifecycle management experience.
He is a Gerrit Contributor for over five years and is the maintainer
of [GerritHub.io](https://gerrithub.io), the Open Service for Gerrit Code Review
on top of GitHub repositories.

### Luke Ashe-Browne - GerritForge {#lashebrowne}

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

Luke is a contract engineer working on CICD workflows, deployment automation
practicing devops for companies in London.
Luke has recently joined the Gerrit project focusing on containerisation,
kubernetes and the cloud readiness of Gerrit.

### Matthias Sohn - SAP {#msohn}

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

Matthias is an Open Source enthusiast and Product Owner at SAP.
He maintains the Eclipse EGit and JGit projects and contributes to git, JGit,
EGit, Gerrit, Gardener and Kubernetes.

### Shane McIntosh - McGill University {#mcintosh}

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

Shane is an assistant professor and leader of the Software REBELs — a research
group that develops tool and decision support for modern development and release
teams.

### Bruno Bossola - Meterian {#bbossola}

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

Bruno starts coding in machine language on a small Commodore computer, and he's
been coding professionally for thirty years with various languages. Bruno is the
co-founder of [Meterian](https://www.meterian.io), a cyber-sec company
that focuses on the security of software components.
