Evolving code without breaking compatibility


Speaker: Kohsuke Kawaguchi

As software development gets larger in scale, modular applications are becoming more and more common, where individual modules and libraries are built and packaged separately, and where pieces are only brought together at runtime to form a functioning application. In such an environment, evolving code that doesn’t break other modules that depend on you becomes more tricky.

In Jenkins project (http://jenkins-ci.org/), where the ecosystem revolves around 800+ community-developed plugins, this is a very important consideration.

In this presentation, I will go over techniques and tools I have developed over time to help me evolve Jenkins core code while retaining compatibility. The topics covered range from simple rules of thumbs for junior Java developers (e.g., prefer getter methods over exposing fields) to bytecode manipulation at compile-time and runtime, all the way up to invokedynamic!

Speaker: Kohsuke Kawaguchi

Kohsuke is a well-respected developer and popular speaker at industry and Jenkins community events. He’s often asked to speak about his experience and approach in creating Jenkins; a CI platform that has become a widely adopted and successful community-driven open source project. The principles behind the Jenkins community – extensibility, inclusiveness, low barriers to participation – have been the keys to its success. Kohsuke’s sensibilities in creating Jenkins and his deep understanding of how to translate its capabilities into usable software have also had a major impact on CloudBees’ strategy as a company. Before joining CloudBees, Kohsuke was with Sun Microsystems and Oracle, where he worked on a variety of projects and initiated the open source work that led to Jenkins.