# Gerrit User Summit 2017 - Schedule

## The Hackathon - September 30th (Sat) to October 1st (Sun)

Two days of hacking on Gerrit Code Review and for building new plugins
by contributors and people passionate about understanding and extending
Gerrit.

*** note
__By invitation only__

The number of places available is deliberately very limited.
The primary purpose of the hackathon is to speed up the communication
between Gerrit contributors with white-boarding face-to-face sessions
and pair programming in a quiet and co-located
roundtable.
***

## The User Summit, October 2nd (Mon) to 3rd (Tue)

Introduction, intermediate and advanced sessions on Gerrit Code Review.

### Monday

| Time  | Session                                                                                      |
|-------|----------------------------------------------------------------------------------------------|
|  8:00 | Registration Opens, Breakfast, Expo & Networking                                             |
|  9:00 | Welcome introduction                                                                         |
|  9:15 | [What's new in Gerrit 2.14.x](sessions/new-in-2.14.md)                                       |
| 10:00 | [Gerrit at Google: Multi-master, multi-tenant](sessions/gerrit-at-google.md)                 |
| 10:45 | Break, Expo & Networking                                                                     |
| 11:30 | [PolyGerrit UX: Findings from research/experience on the new GUI](sessions/polygerrit-ux.md) |
| 12:15 | Lunch, Expo & Networking                                                                     |
| 14:00 | [Gerrit CI: keep logs forever](sessions/gerrit-ci-forever.md)                                |
| 14:20 | [improvements to Zoekt code search](sessions/zoekt-improvements.md)                          |
| 14:45 | [Beyond Gerrit](sessions/beyond-gerrit.md)                                                   |
| 15:30 | Break, Expo & Networking                                                                     |
| 16:00 | [What's new in Gerrit 2.15](sessions/new-in-2.15.md)                                         |
| 16:45 | [Q&A with the Gerrit Maintainers](sessions/maintainers-qa.md)                                |
| 17:30 | Drinks, Expo & Networking                                                                    |
| 17:30 | [PolyGerrit UX Testing/Research Sessions](sessions/polygerrit-ux-testing.md)                 |

### Tuesday

| Time  | Session                                                                                             |
|-------|-----------------------------------------------------------------------------------------------------|
|  8:00 | Registration Opens, Breakfast, Expo & Networking                                                    |
|  8:00 | PolyGerrit UX Testing/Research Sessions                                                             |
|  9:00 | [Extend Gerrit with Scripting](sessions/gerrit-scripting-plugins.md)                                |
|  9:15 | [A brand-new Gerrit integration for Jenkins](sessions/jenkins-gerrit-plugin.md)                     |
| 10:00 | [Diffy with enterprise grade](sessions/diffy-with-enterprise-grade.md)                              |
| 10:45 | Break, Expo & Networking                                                                            |
| 11:30 | Multi-master outside Google: rollout experience at Qualcomm                                         |
| 12:15 | Lunch, Expo & Networking                                                                            |
| 14:00 | [Mining Gerrit Data on OpenStack](sessions/mining_gerrit.md)                                        |
| 14:45 | [Export Review, Projects and Metrics to powerful dashboards](sessions/gerrit-graphs-dashboards.md)  |
| 15:30 | Break, Expo & Networking                                                                            |
| 16:00 | Conference wrap-up and Closing Keynote                                                              |
