# 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.
The **Call For Papers is officially open**, [submit your talk proposal](cfp.md)
directly through [Gerrit Code Review](https://gerrit-review.googlesource.com/#/admin/projects/summit/2017)

The voting and final **selection of the agenda is totally driven by Community**,
the review score defines the chart of best rated talks.

> **Follow the instructions** described in the [sessions proposal section](cfp.md)
> and be active part of the Summit by sharing your experience and provide
> your feedback on how to improve Gerrit Code Review.

*** promo
__Open to everyone__

There are over 150 seats available on a first-come-first-served basis,
open to anyone who is using Gerrit Code Review or interested in adopting
it in their daily software development workflow.

[Register Now to the Gerrit User Summit 2017](https://www.eventbrite.co.uk/e/gerrit-user-summit-2017-tickets-34486175078)
***

### Monday

| Time  | Session                                          |
|-------|--------------------------------------------------|
|  8:00 | Registration Opens, Breakfast, Expo & Networking |
|  9:00 | Welcome introduction                             |
|  9:15 | **Gerrit Code Review Talk #1**                   |
| 10:00 | **Gerrit Code Review Talk #2**                   |
| 10:45 | Break, Expo & Networking                         |
| 11:30 | **Gerrit Code Review Talk #3**                   |
| 12:15 | Lunch, Expo & Networking                         |
| 14:00 | **Gerrit Code Review Talk #4**                   |
| 14:45 | **Gerrit Code Review Talk #5**                   |
| 15:30 | Break, Expo & Networking                         |
| 16:00 | **Gerrit Code Review Talk #6**                   |
| 16:45 | **Gerrit Code Review Talk #7**                   |
| 17:30 | Drinks, Expo & Networking                        |

### Tuesday

| Time  | Session                                          |
|-------|--------------------------------------------------|
|  8:00 | Registration Opens, Breakfast, Expo & Networking |
|  9:15 | **Gerrit Code Review Talk #8**                   |
| 10:00 | **Gerrit Code Review Talk #9**                   |
| 10:45 | Break, Expo & Networking                         |
| 11:30 | **Gerrit Code Review Talk #10**                  |
| 12:15 | Lunch, Expo & Networking                         |
| 14:00 | **Gerrit Code Review Talk #11**                  |
| 14:45 | **Gerrit Code Review Talk #12**                  |
| 15:30 | Break, Expo & Networking                         |
| 16:00 | Conference wrap-up and Closing Keynote           |

### Not-yet-scheduled sessions

* [How to extend Gerrit using Scripting Plugins](sessions/gerrit-scripting-plugins.md) _Luca Milanesio / GerritForge_
* [Mining Gerrit Data to Study Contentious Reviews and Community Evolution](sessions/mining_gerrit.md) _Shane McIntosh, McGill University_
