Building and using software with other people requires skills beyond those used when programming alone. Over the past twenty years, software engineering researchers have learned a lot about which working practices actually pay off, while practitioners have developed interesting alternatives to the "big design up front" methodologies that dominated discussion from the late 1960s to the late 1990s.