Tutorial schedule for QCon New York is now Final, 14 tutorials total.


Day: Monday
By: Pete Soderling [Half Day]
Level: All
Prerequisites: none

Arguably the most important skill an engineering manager can learn right now is how to attract, hire and retain the best developers possible.   The best managers understand that people are their most valuable asset. The paradox is they rarely have put in the work in developing their own hiring process to consistently enable them to identify and attract the best talent.   This workshop will teach you a process for engineering hiring compiled from best-practices at top companies. We will address the entire technical recruiting process and will teach you tips and tricks that will enable you to get better and more efficient at each stage of your hiring.   Some of the topics we will cover include:

  • Understanding the hiring funnel
  • Fixing your broken job specs
  • Marketing that makes a difference
  • Using & misusing recruiters
  • Effective technical interviewing
  • Establishing a scalable process
  • Social media hacks that actually work

  You’ll leave this tutorial will your head full of practical insights and steps you can immediately take to improve your company's hiring process as well as the inspiration to implement them effectively.

Day: Monday
By: Nathen Harvey [Full Day]
Level: Beginner
Prerequisites: see below in Workstation Requirements

Chef is an automation platform that transforms infrastructure into code. This is a hands-on tutorial that will cover the basics that everyone needs to know about how to use Chef for system and infrastructure management. We'll discuss the server API, the code primitives, and the tools required to successfully use Chef.   Hands-on exercises throughout the tutorial will reinforce the material discussed. The agenda will cover:

  • Overview of Chef
  • Set-up a local workstation with Chef and connect to a Chef server
  • Create a new cookbook to manage a basic website
  • Refactor the cookbook
  • Tying it all together - wrap­up of the work performed
  • Further resources and references

  Workstation Requirements: Attendees should bring a wifi-enabled laptop to the workshop. The following operating systems have been tested as workstation systems with the hands on exercises: Ubuntu 10.04, 12.04, Mac OS X 10.7.3+, Windows 7+, Other platforms and platform versions may work without modification. Due to time constraints we will not be able to troubleshoot issues with unlisted platforms.   Attendees should install non-Chef required software before the workshop starts: SSH/SCP (OpenSSH, puTTY/WinSCP or equivalent), Programer's text editor (Vi/Vim, Emacs, Sublime Text 2 or equivalent) On Unix/Linux/OS X systems: C/C++ compiler, build environment (build-essential, Xcode, or platform equivalent). Additionally, all attendees should install the Chef Client (>= 11.8.2) using one of the following options: Install Chef Client using Opscode's Chef Installer (easiest option for all attendees). Install the chef gem (best option if you're already using ruby and a ruby version manager like rvm or rbenv)

Day: Monday
By: Peter-Mark Verwoerd [Full Day]
Level: Beginner
Prerequisites: Having a Java IDE and some Linux experience is all you'll need in this technical introduction to the ecosystem of big data.

Today data is exploding faster than the technology used to create it. Having the ability to harness that data, derive insight, and react intelligently is becoming a core competency for innovation in almost any industry.


Working with massive amounts of data lends itself to the elasticity of cloud computing. This tutorial will give you a hands-on walk through of realtime data services that enable developers to ingest, store, and analyze data at massive scales using Amazon's Cloud.


There are no minimum requirements for your laptop -- all you'll need is an AWS account where you'll be able to spin-up resources, glean insights from your data, and tear down your environment at the end of the day. Having a Java IDE and some Linux experience is all the development experience you'll need in this technical introduction to the ecosystem of big data.

Day: Monday
By: Dragos Dumitriu [Full Day]
Level: Beginner
Prerequisites: No tech skills or laptops required.

Are you in a software development role and find the demands overwhelming and the process chaotic? Are your customers saying your team takes too long to deliver or that they have no idea what your team is busy doing? Do you have a growing backlog with requests months to years old? Are people with critical skills not available when you need them? Do you feel like priorities are changing all the time? On top of your ever-growing delivery workload, are you able to develop the capabilities of your team?   Kanban uses an easy to adopt approach for individuals, teams, and programs to manage and improve the delivery of work (services) to customers. You will learn core concepts and will practice the design of a Kanban system via group exercises, practical examples, and engaging classroom type teaching. You will also learn how to use Kanban to reduce work delivery times, prioritize demand based on team capacity, reduce firefighting and minimize the negative effects of unplanned work. You will also see how within months of using Kanban systems, teams worldwide observe that cycle times, quality, trust with customers and team morale improve significantly.   The course is based on the theory outlined in David Anderson’s book Kanban, Successful Evolutionary Change for Your Technology Business.

Day: Tuesday
By: Jafar Husain [Full Day]
Level: TBD
Prerequisites: Attendees need to bring their laptop and a WebKit-based browser.

What's does a mouse drag event have in common with an Array of numbers?   The answer to this question may surprise you: they are both collections. This key insight holds the key to dramatically simplifying asynchronous programming in Javascript.


In this tutorial you will learn how you can use the familiar Javascript Array methods to create surprisingly expressive asynchronous programs. Using just a few functions, you will learn how to do the following:

  • Declaratively build complex events out of simple events (ex. drag n' drop)
  • Coordinate and sequence multiple Ajax requests
  • Reactively update UI's in response to data changes
  • Eliminate memory leaks caused by neglecting to unsubscribe from events
  • Gracefully propagate and handle asynchronous exceptions


In this tutorial we'll be exploring the Reactive Extensions (Rx) library (https://rx.codeplex.com/) which allows us to treat events as collections. You'll learn patterns you can use on both the client and the server, allowing you to build end-to-end reactive systems.

Day: Tuesday
By: Matthew Mc Cullough [Half Day]
Level: Beginner
Prerequisites: TBD

Git and GitHub have become important version control and collaboration tools in many software development organizations because of their ease of use, facilitation of code review, and flexible branching models.


In this half-day workshop, we'll show you how to effectively use the most important Git command line tools, including the how to initialize, commit, branch, merge, and share repositories with others. Having successfully shared a project, we'll examine the GitHub web flow, Pull Requests, Issues and connection to continuous integration systems. This workshop will provide you with a solid understanding of why distributed version control systems are an important part of a modern ALM pipeline and with skills to effectively apply Git and GitHub to your everyday work.

Day: Monday
By: Mark Meretzky [Full Day]
Level: Intermediate
Prerequisites: C++

This is a full-day tutorial in writing iOS apps using the Xcode IDE on Macintosh. An iPhone or iPad app is made of intercommunicating objects. Learn to create and destroy the objects and send them messages in the language Objective-C. Use them to draw text and graphics on the screen, display controls such as buttons and sliders, respond to a touch or keystroke, recognize a swipe or pinch, and perform simple animations.


We concentrate on three iOS design patterns:


1. A control object (e.g., a button) can call a method of its target object in response to a touch.


2. An object can call a method of its delegate object in response to a changing situation, e.g., upon reaching the end of an audio file during a playback.


3. A view controller object can create and send messages to the view object underneath it, and forms the connection between the view object and the rest of the app.


Requires previous programming experience, but not necessarily in the language Objective-C. The examples will be displayed and run on a Mac during the tutorial. If registrants would like to run the examples on their own machine, they can bring a Mac equipped with the current Xcode.

Day: Monday
Level: Intermediate
Prerequisites: Prior experience in building client-server HTTP applications (e.g. using JSF, Rails, Django, Express, etc.)

WebSocket has been in the wild for 2 1/2 years and is here to stay. It’s the gold standard for high-performance networking in your hand from managing high-speed trains to tracking live sporting events. It’s seen deployment in application servers (NodeJS, Tomcat, Glassfish, Jetty, etc.) and all major browsers. It works within iOS and Android.   And yet, developers still run into challenges when moving from HTTP to WebSocket. They’re puzzled at the best ways to ensure performance, compatibility, connectivity, and security. You might try using one of the out-of-the-box solutions such as Socket.IO, Atmosphere, any JSR 356-equipped application server, SignalR, or Kaazing but how can you tell which of these will work best for you? What will you have to build yourself, what might you have to buy, and what doe you need to look out for?   In this session, we’ll put WebSocket under the microscope, then look at it in multiple real-world deployments. You’ll learn how to approach WebSockets as an architect, developer, or devops. You’ll be able to make intelligent choices in connecting your choice of server-side technology to HTML5, native iOS, and Android. And you’ll get a peek into the crystal ball to see where WebSocket is going, from HTTP 2.0 to IoT.

Day: Monday
By: Adib Saikali [Full Day]
Level: Beginner
Prerequisites: You are comfortable programming in Java. Bring a laptop configured with the all the required software (see below - setup instructions)

Java 8 has been released with loads of exiting new features. To celebrate the release, bring your laptop and learn all these new features through hands on coding exercises.


By the end of the day we promise that you will have written some Java 8 code and learned how to use Lambdas in Java. The tutorial will rapidly alternate between lecture style presentation and hands on coding exercises.



  • Java 8 Lambda Expressions
  • Java 8 collections and streams api
  • Java 8 concurrency enhancements
  • Java 8 generics enhancements
  • Java 8 Annotation & Reflection Enhancements
  • Java 8 Date and Time apis
  • Java 8 usage examples with Spring 4.0


Setup instructions

  • Operating System: Windows, Mac or Linux
  • JDK : Download and install the latest JDK 8 for your OS from the oracle website or your linux distro
  • Download an install a Java 8 capable IDE latest IntelliJ, NetBeans or Eclipse
  • Eclipse users, please choose one of:
Day: Tuesday
By: Mark Meretzky [Full Day]
Level: Intermediate
Prerequisites: Java

This is a full-day tutorial in writing Android apps using the Eclipse IDE on Mac, PC, or Linux. An app is composed of objects written in Java, plus a screen layout in the Extensible Markup Language. See how the Java code manipulates the XML to present a user interface including buttons, sliders, and other controls. Draw text and graphics on the screen, respond to a touch or keystroke, recognize a swipe or a pinch, and perform simple animations.


We concentrate on three Android design patterns involving views, which are visible areas on the screen.


1. A listener is an object whose methods are called in response to a stimulus. We plug the listener into a view to make the view touch-sensitive.


2. A cursor is a source of data, possibly from a database. We plug the cursor into an adapter, which encases each item of data in a separate view.


3. An adapter view displays a series of views on the screen. We plug an adapter into the adapter view to provide the views to be displayed.


As our finale, we let a component of one app launch and communicate with a component of another app on the same device.


Tutorial level: Intermediate. Requires a reading knowledge of the Java language. The examples will be displayed and run on a Mac during the tutorial. If registrants would lke to run the examples on their own machine, they can bring a Mac, PC, or Linux equipped with Eclipse and the current Android Developer Tools (ADT) plugin.

Day: Tuesday
By: Kirk Pepperdine [Half Day]
Level: Intermediate
Prerequisites: A laptop with recent JVM is recommended.

This seminar blends theory and practices that have been proven to be effective in solving real performance problems. The objective to demonstrate what steps are needed in order to quickly identify and eliminate performance bottlenecks. It will also help you to understand and avoid common and often costly mistakes that developers make when they embark on a tuning exercise.


The seminar will cover:

  • What performance counters say about your application
  • The performance tuning environment
  • A simple peformance tuning process
  • Tooling including VisualVM
  • Java memory management


The session will include a hands-on exercise so it is beneficial to bring a laptop with the latest version of Java installed on it with all of your development tools.

Day: Tuesday
By: Matt Walters , Sahat Yalkabov [Full Day]
Level: Intermediate
Prerequisites: This tutorial is for all intermediate and advanced developers with experience in other platforms and would like to dive into Node.js for the first time and learn what it's all about. This is a hands on workshop, so you'll need to bring a laptop. You'll benefit greatly from having OSX or a common linux distro like Ubuntu. Many of the tools we'll be using also work on Windows, but some may not. If in doubt, load up an Ubuntu VM using VirtualBox and vagrant!

In this get-coding-quick tutorial, you'll:

  • Get up and running with nvm, npm, Node.js and Express.
  • Learn fundamental Node and JavaScript concepts like callbacks, events, and promises.
  • Become familiar with some of Node's most popular modules and learn their benefits.
  • Bootstrap a site and API with the latest tools like yeoman, bower, and others.
  • Deploy your site to heroku or a cloud of your choice.
Day: Tuesday
By: Eric Evans [Full Day]
Level: TBD
Prerequisites: Some experience with projects developing complex software systems. Familiarity with iterative development processes. Attendees don't need to bring their laptop.

Build your awareness of the basic concepts and value of Domain-Driven Design (DDD) in one day.   Understand what DDD is and when and why it is valuable to software intensive organizations. Overview the basic principles and processes needed develop the useful sort of models, tie them into implementation and business analysis, and place them within a viable, realistic strategy.   Target audience: Any person seriously involved in software development, including developers, technical leaders, analysts, development managers and non-technical business experts.

Day: Tuesday
By: Peter Wang [Full Day]
Level: Intermediate
Prerequisites: Basic working knowledge of Python is expected, and attendees should have laptops with at least 4gb of RAM, and ideally have the Anaconda Python distribution already installed. (Anaconda is cross-platform and can cleanly install into a subdirectory, without interfering with your system Python installation).

You will learn the basics of how to effectively use modern Python tools for data analytics, visualization, and collaboration. We will see how Pandas (in conjunction with NumPy) can be used to import, clean, and structure data. Then, we will use Bokeh to construct interactive graphics to explore some datasets. Finally, we will see how doing all of this within IPython Notebook allows us to easily share our work on the web.