# Gerrit User Summit 2018 - Schedule

## The User Summit, November 15th (Thu) to 16th (Fri)

Introduction, intermediate and advanced sessions on Gerrit Code Review.

### Thursday 15th

| Time  | Session                                                                                      |
|-------|----------------------------------------------------------------------------------------------|
|  8:30 | Registration Opens, Breakfast, Networking                                                    |
|  9:00 | Welcome introduction                                                                         |
|  9:15 | [Upgrading to Gerrit 2.15: real-life story on GerritHub](sessions/gerrithub-2.15-upgrade.md) |
| 10:00 | [What's new in 2.14](sessions/new-in-2.14.md)
| 10:20 | [Bazel new and noteworthy](sessions/bazel-new-and-noteworthy.md)
| 10:45 | Break & Networking                                                                           |
| 11:30 | [Different change workflows in Gerrit](sessions/different-change-workflows-in-gerrit.md)     |
| 12:15 | Lunch & Networking                                                                           |
| 14:00 | [Gerrit Multi-master & multi-site: an OpenSource solution](sessions/multi-master-multi-site.md)|
| 14:20 | [Replication and Git LFS](sessions/replication-and-git-lfs.md)                               |
| 14:45 | [Gerrit 2.16, 3.0 and beyond](sessions/gerrit-beyond.md)
| 15:30 | Break & Networking                                                                           |
| 16:00 | [Q&A with the Gerrit Maintainers](sessions/maintainers-qa.md)                                |
| 17:00 | End of Day 1                                                                                 |

### Friday 16th

| Time  | Session                                                                                      |
|-------|----------------------------------------------------------------------------------------------|
|  9:00 | Breakfast, Networking                                                                        |
|  9:15 | [DevOps Analytics - Uncover the value of Gerrit Pipeline](sessions/devops-analytics.md)      |
| 10:00 | [Gerrit on Kubernetes](sessions/gerrit-on-kubernetes.md)                                     |
| 10:45 | Break & Networking                                                                           |
| 11:30 | [BLIMP Tracer: Integrating Build Impact Analysis with Code Review](sessions/blimp-tracer.md) |
| 12:15 | Lunch & Networking                                                                           |
| 14:00 | [Submit rules without prolog](sessions/simple-submit.md)                                     |
| 14:20 | [Code review goes cloud native - Gerrit on Kubernetes and Gardener](sessions/gerrit-gardener.md) |
| 14:45 | [Automated Security Analysis with Gerrit Robot Comments](sessions/automated-security-analysis-with-gerrit.md)|
| 15:30 | Break & Networking                                                                           |
| 16:00 | [Lessons learned from Gerrit 2.7 to 2.14 migration](sessions/migration-2.7-to-2.14.md)       |
| 16:45 | Closing note                                                                                 |
| 17:00 | End of the Summit                                                                            |
