# Gerrit User Summit 2023

## The Gerrit Community gets together

The Gerrit Community is happy to announce the Gerrit User Summit & Hackathon 2023,
THE event of the year for everything related to Gerrit Code Review and the
trunk-based development pipeline.

## Summit in Europe and USA

The Gerrit User Summit & Hackathon 2023 will be held in Gothenburg (Sweden) and
in Sunnyvale (California, USA) at the same time, to allow most of the community
around the globe to attend and share their experience and ideas.

The first part of the event is a 5-days Hackathon reserved for the current
Gerrit contributors and maintainers plus anyone that is willing to start contributing
to the platform.

It will then follow with a 2-days Users Summit opened to all the members
of the community or who is willing to learn and adopt Gerrit Code Review in their
development process.

> Please note that the seats for the Hackathon are limited and your request could be declined by
> the organizer. We will do our best, however, to get people in and help increasing the community
> of contributors.

### Gerrit User Summit - Europe and USA

*Location*

The Gerrit User Summit & Hackathon is hosted and sponsored by [Volvo Cars at their HQ in Gothenburg
(Sweden)](https://goo.gl/maps/aroy4fWDSb4c7Kp99) and [Polestar](https://www.polestar.com/),
and by [GerritForge Inc.](http://www.gerritforge.com) in
[Sunnyvale CA (USA)](https://goo.gl/maps/5NdP8v5fun7esNyG9)
in collaboration with the
[Gerrit Community](https://groups.google.com/forum/#!topic/repo-discuss/uVQbBOC9IeU).

*Dates*

- The Hackathon (reserved for Gerrit maintainers and contributors):
[25-29th September 2023](https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=MDJvaG4wZHJoOTg2bnZybzQxcWZmNXJzdW0gZ29vZ2xlLmNvbV91YmIxcGxhNmlqNzg1b3FianI2MWg0dmRpc0Bn&tmsrc=google.com_ubb1pla6ij785oqbjr61h4vdis%40group.calendar.google.com)
- The Summit (open for all members of the Gerrit Community):
[30th September-1st October 2023](https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=NzNvMmMyMGZhM3NtZHMxOW5sOThlNWpxbTggZ29vZ2xlLmNvbV91YmIxcGxhNmlqNzg1b3FianI2MWg0dmRpc0Bn&tmsrc=google.com_ubb1pla6ij785oqbjr61h4vdis%40group.calendar.google.com)

## Why two Gerrit User Summits, in Europe and USA, at the same time?

Starting from 2017, we promised to get in touch with a *wider and more diverse community*,
and, as promised, we are keen to listen to all Gerrit Users around the world.

Historically most of the Gerrit users were located in the USA. However, recently the adoption
has extended to many other locations around the world, including India, China, Korea and most
of the central and northern European countries.

Also, the recent COVID-19 pandemic and the following economic downturn has limited the
travel budget for many companies. Despite the continued restrictions, we want to encourage
all members of the community to get together and interact face-to-face, giving the possibility
to have a shorter and less expensive journey to reach the event.

We have moved to virtual events in 2020 and 2021, which has allowed to keep in touch with
the recent developments of the Gerrit Code Review platform; however, the remote virtual
interaction showed all its limitations, due to the lack of peer-to-peer information exchange.

Having two events on both sides of the Atlantic would help increasing the diversity of the
people attending the event, have a more organic and complete feedback on the direction
of the Gerrit roadmap, and allow again a direct networking between the members of the community.