One of the most common pitfalls developers face on larger projects is backward compatibility. This session shows how to ensure that new versions of a library do not break either source backward compatibility or binary backward compatibility. After reviewing what each type of compatibility means and why it is important, the presentation covers requirements for each type, along with ways to meet these requirements. The main areas of interest are API evolution and evolving classes in a way that does not break “wire compatibility” for Java serialization. The presentation also covers techniques for verifying backward compatibility through regression tests.