Ship It! A Practical Guide to Successful Software Projects
"Ship It!" avoids current fashion trends and marketing hype; instead, readers find page after page of solid advice, all tried and tested in the real world. This book is a collection of tips that show what tools a successful team has to use, and how to use them well. Developers will get quick, easy-to-follow advice on modern techniques and when they should be applied.
Aimed at beginning to intermediate programmers, this book will show you:
- Which tools help, and which don't
- How to keep a project moving
- Approaches to scheduling that work
- How to build developers as well as product
- What's normal on a project, and what's not
- How to manage managers, end-users and sponsors
- Danger signs and how to fix them
Few of the ideas presented here are controversial or extreme; most experienced programmers will agree that this stuff works. Yet 50 to 70 percent of all project teams in the U.S. aren't able to use even these simple,well-accepted practices effectively. This book will help you get started.
"Ship It!" begins by introducing the common technical infrastructure that every project needs. Readers can choose from a variety of recommended technologies according to their skills and budgets to get the job done. The next sections outline the necessary steps to get software out the door reliably,using well-accepted, easy-to-adopt, best-of-breed practices that really work.
Finally, and most importantly, "Ship It!" presents common problems-and danger signs-that arise and offers real-world advice on how to solve them.
Review By: Peter Clark
07/27/2007"Ship It!" is an overview of some of the key concepts and practices in managing software development projects. Its audience is novice project managers and team leads, although team members and managers would also benefit. It is assumed that these people are in “Level 0” organizations, with little or no formal software development methodology. It is not so much a description of a coherent, unified process as it is a collection of well thought out advice based on the authors’ experience reforming dysfunctional teams.
The authors clearly and concisely cover a wide range of topics, which are organized into three broad categories: infrastructure, process, and techniques. The section on infrastructure covers key process areas that the authors feel must serve as a foundation for successful projects--version control, build and release, issue tracking, etc. The section on techniques is a grab bag of recommended practices, such as maintaining a project-wide to-do list, holding daily meetings, and code reviews. The process section describes an iterative development process that the authors call “Tracer Bullet Development.” This involves the construction of the entire deliverable system using stubbed-out mock objects and the gradual inclusion of additional functionality.
In each section, the authors include tips which give a 50,000-foot view of what they want you to do. The remainder of the section covers the tip in more detail. I was particularly fond of how the authors closed each section with three bulleted lists: how to get started, how to tell if you are successful, and warning signs that you are failing. These lists will help inexperienced leads in assessing their progress.
The final section is a collection of short essays addressing specific problems and how to fix them. The problems don’t fit into any general category, but the advice is well written and they attempt to tie it closely to suggestions from earlier in the book.
There is a series of appendices in the back which give lists of vendors for tools, recommendations for test frameworks, and suggested reading.
I thought the section on infrastructure would be the most helpful to an inexperienced project lead. The sections covering source code management, builds, and defect tracking clearly identify what the issues are, but the advice on how to implement them is somewhat thin. However, the authors do make recommendations for freely available software packages, and there are also useful descriptions on how to set up a test harness for your application, as well as how to grow a continuous integration system. I found the section on process less useful.
The book has a definite bias towards Java programming in a Linux environment. My shop is almost exclusively Microsoft and C++. Most of the tools suggested are more applicable to the Linux environment than anything else. However, the code examples are simple to understand.
This book is not a blow-by-blow description of how to do anything. It provides a reasonable overview of many key concepts and practices that a manager would face in attempting to fix a team with no process. The information is enough to get the reader to understand the concepts and perhaps get started, and offers a bibliography to point the reader toward more in-depth treatment.