Welcome & Acknowledgments From 1st Edition


There have been two dramatic software advances in the last decade that an an up-to-date textbook must include. These twin advances constitute the two halves of this book.
The first half explains Software as a Service (SaaS), which is revolutionizing the software industry. Having a single copy of the program in the cloud with potentially millions of customers places different requirements and offers new opportunities versus conventional shrink-wrap software, in which customers install millions of copies of the program on their own computers.

The enthusiasm for SaaS by developers and customers has led to new highly-productive frameworks for SaaS development. We use Ruby on Rails in this book because it is widely believed to have the best tools for SaaS, but there are many other good examples of languages and frameworks for SaaS: for example, Python/Django, JavaScript/Sails, and Java/Enterprise Java Beans.

The question then is which software development methodology is best for SaaS. As there is only one copy of the program and it is deployed in a controlled environment, it is easy to deploy new features quickly and incrementally, and so SaaS evolves much more rapidly than shrink-wrap software. Thus, we needed a software methodology in which change is the norm rather than the exception.

Since industry often complains about weaknesses in software education, we also spoke to representatives from many leading software companies including Amazon, eBay, Facebook, Google, and Microsoft. We were struck by the unanimity of the number one request from each company: that students learn how to enhance sparsely-documented legacy code. In priority order, other requests were making testing a first-class citizen, working with non-technical customers, and working in teams. The social skills needed to work effectively with nontechnical customers and work well in teams surely are helpful for the developers' whole careers; the question is how to fit them into one book. Similarly, no one questions the emphasis on testing; the question is how to get novices to embrace it. Thus, we needed an up-to-date software methodology that also works well with legacy code, emphasizes testing, integrates non-technical customers, and embraces working in teams rather than as lone wolves.

Coincidentally, about the same time that SaaS appeared on the scene, a group of developers proposed the The Agile Manifesto, which was a radical change from prior methods. One of the founding tenets of Agile is “responding to change over following a plan,” so it is a much better match to the quickly evolving nature of SaaS than traditional “Plan-and-Document” methodologies like Waterfall, Spiral, or RUP. Another Agile tenet is “customer collaboration over contract negotiation,” which leads to weekly meetings with non-technical customers. Two critical Agile foundations are behavior-driven design and test-driven development, which means tests are written before  the code, so testing really is a first class citizen in Agile. Agile ideas like pair programming and scrum emphasize working with others. Agile techniques are even a good match to evolving legacy code, as we shall see.

Therefore, the second half of the book explains Agile in the context of building and deploying a SaaS application implemented using Ruby on Rails. In addition, each chapter gives the perspective of the Plan-and-Document methodologies on topics like requirements, testing, management, and maintenance. This contrast allows readers to decide for themselves when each methodology is appropriate for SaaS and non-SaaS applications.

At Berkeley, we cover the entire content of the book in a very aggressive one-semester course; an even heavier variant of the course also includes an open-ended design project with a real customer, typically a nonprofit, campus unit, or student organization. The Instructors’ Guide contains more detailed information on how to use this material in your own courses.


 For the First Edition, we thank our industrial colleagues who gave us feedback on our ideas about the course and the book, especially these awesome individuals, listed alphabetically by company: Peter Vosshall, Amazon Web Services; Tony Ng, eBay; Tracy Bialik, Brad Green, and Russ Rufer, Google Inc.; Peter Van Hardenberg, Heroku; Jim Larus, Microsoft Research; Brian Cunnie, Edward Hieatt, Matthew Kocher, Jacob Maine, Ken Mayer, and Rob Mee, Pivotal Labs; Jason Huggins, SauceLabs; and Raffi Krikorian, Twitter.

We thank our academic colleagues for their feedback on our approach and ideas, especially Fred Brooks, University of North Carolina at Chapel Hill; Marti Hearst and Paul Hilfinger, UC Berkeley; Timothy Lethbridge, University of Ottawa; John Ousterhout, Stanford University; and Mary Shaw, Carnegie-Mellon University.

We deeply thank the content experts who reviewed specific chapters: Danny Burkes, Pivotal Labs;  Timothy Chou, Stanford; Daniel Jackson, MIT; Jacob Maine, Pivotal Labs;  John Ousterhout, Stanford University; and Ellen Spertus, Mills College. Thanks to Alan Fekete, University of Sydney, for pointing us to the 2013 ACM/IEEE Computer Society Curriculum on Software Engineering in time for us to consider it.

Our talented student instructors and teaching assistants not only helped teach and shape the course but created the initial versions of the programming assignments and autograders.  We thank our graduate student instructors Kristal Curtis and Shoaib Kamil for helping us reinvent the on-campus class that led to this effort, and graduate student instructors Michael Driscoll and Richard Xia for helping us make scalable automatic grading a reality for the thousands of students that enrolled in the online course. The incredible group of undergraduates includes Alex Bain, Aaron Beitch, Allen Chen, James Eady, David Eliahu, Max Feldman, Amber Feng, Karl He, Arthur Klepchukov, Jonathan Ko, Brandon Liu, Robert Marks, Jimmy Nguyen, Sunil Pedapudi, Omer Spillinger, Hubert Wong, Tim Yung, and Richard Zhao.

We’re especially grateful to the Beta testers who used early versions of our book in their own classrooms, starting with Samuel Joseph, Hawaii Pacific University, who also serves as Lead Facilitator for the edX MOOCs and whose extensive contributions to the development and improvement of both the course materials and the textbook material made it clear that we should ask him to assume the official mantle of Editor. Other early adopters who continue to give valuable feedback and contribute to the course materials include Daniel Jackson, MIT; Richard Ilson, University of North Carolina at Charlotte;  Ingolf Krueger, University of California, San Diego; Kristen Walcott-Justice, University of Colorado at Colorado Springs; Rose Williams, Binghamton University; and Wei Xu, Tsinghua University, who was the first to test this material in a classroom outside the United States and who facilitated our relationship with Tsinghua University Press to produce the Chinese language edition of the book.

Part of the “bookware” is the collection of excellent third-party sites supporting SaaS development.  For their help in connecting us with the right products and services that could be offered free of charge to students in the class, and valuable discussion on how to use them in an educational setting, we thank Ann Merrihew, Kurt Messersmith, Marvin Theimer, Jinesh Varia, and Matt Wood, Amazon Web Services; Kami Lott and Chris Wanstrath, GitHub; Maggie Johnson and Arjun Satyapal, Google Inc.; James Lindenbaum, Heroku; Juan Vargas and Jennifer Perret, Microsoft; Rob Mee, Pivotal Labs; Dana Le, Salesforce; and John Dunham, SauceLabs.

We'd also like to thank Andrew Patterson, Grace Patterson, and Owyn Patterson for their help in marketing the book, as well as to their managers Heather Patterson, Michael Patterson, David Patterson, and Zackary Patterson.