Life is full of unexpected twists, and the two of us never imagined
we’d someday write a book about software engineering.
Like most computer geeks, we discovered that our hobby and
passion—playing with computers—was a great way to make a living
after graduating college. And like most hackers of our generation,
we spent the mid-1990s building PCs out of spare parts, installing
prerelease versions of Linux from piles of diskettes, and learning to
administer Unix machines. We worked as sysadmins, and then at
the dawn of the dot-com bubble, became programmers in smaller
companies. After the bubble burst, we started working for surviving
Silicon Valley companies (such as Apple) and later were hired by a
startup (CollabNet) to work full time on designing and writing an
open source version control application called Subversion.
But something unexpected happened between 2000 and 2005.
While we were creating Subversion, our job responsibilities slowly
changed. We weren’t just writing code all day in a vacuum; we
were leading an open source project. This meant hanging in a
chat room all day with a dozen other volunteer programmers and
paying attention to what they were doing. It meant coordinating
new features almost entirely through an email list. Along the way,
we discovered that the key to a project’s success wasn’t just writing
great code: the way in which people collaborated toward the end
goal mattered just as much.
In a perfect world, software engineers who produce the best code are the most successful. But in our perfectly messy world, success also depends on how you work with people to get your job done.
In this highly entertaining book, Brian Fitzpatrick and Ben Collins-Sussman cover basic patterns and anti-patterns for working with other people, teams, and users while trying to develop software. This is valuable information from two respected software engineers whose popular series of talks—including "Working with Poisonous People"—has attracted hundreds of thousands of followers.
Writing software is a team sport, and human factors have as much influence on the outcome as technical factors. Even if you’ve spent decades learning the technical side of programming, this book teaches you about the often-overlooked human component. By learning to collaborate and investing in the "soft skills" of software engineering, you can have a much greater impact for the same amount of effort.