Review
Product Description
Ship It! is a collection of tips that show the tools and techniques a successful project team has to use, and how to use them well. You'll get quick, easy-to-follow advice on modern practices: which to use, and when they should be applied. This book avoids current fashion trends and marketing hype; instead, readers find page after page of solid advice, all tried and tested in the real world.
Aimed at beginning to intermediate programmers, Ship It! 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 to get the job done. Readers can choose from a variety of recommended technologies according to their skills and budgets. 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 that teams face, then offers real-world advice on how to solve them.
From the Publisher
About the Author
Excerpted from Ship It!: A Practical Guide to Successful Software Projects by Jared Richardson, Will Gwaltney. Copyright © 2004. Reprinted by permission. All rights reserved.
How do you share code with your teammates? A surprising number of teams never answer this question explicitly and instead just get a big, old shared disk drive, with all of their source code and other files lying around. Any act by any developerfrom simply editing a file to compiling codewill instantly affect every other developer on the team. Their life is now filled with constant, unpleasant surprises.
Its just like a crowded kitchen on Thanksgiving, with everyone throwing something else into the mix, and it makes for a pretty frustrating work environment. While many teams continue to operate this way, you can take a safer and more professional stand. This will have a deep effect on your tools and infrastructure, so you need to get this straight right from the beginning.
Theres only one fundamental rule to keep in mind: isolate others from the effect of your work until you are ready. Thats why we call this sandbox development: every developer has their own sandbox to play in without disturbing other developers.
That may sound easy enough, especially in terms of isolating source code (see Practice 2, Manage Assets, on page 19), but the real trick is to remember that it applies to all resources: source code, database instances, web services on which you depend, and so on.
Your own development machine should be designed to contribute to your own productivity.1 It should not contribute anything to the global build processno one else should have to rely on your machine directly for anything.
But how do other developers get your code? Code is shared via the repository. Think of the repository as a big shared disk, but one thats repository managed by a librarian. The librarian ensures that everyone has the right version of any file (or other resource) that they need and that everyone can work without clobbering each other. Every developer uses a software tool to check in and check out files (just like a real book library) so they can work on them locally.
On your own developer machine, you edit local copies of source code files, compile, build, and test in splendid isolation from your team-1This means its perfectly okay for different developers to use different code editors or even Integrated Development Environments (IDEs).mates. If you need to use a database, a web server, or any other resource while developing, make sure that youre the only one using it. When youre satisfied that youre finished with a piece of code, you check it back into the repository.
But then how do customers get the finished product? In addition to the developer machines and the repository, you have a build machine. The build machine is an unattended server that simply gets all of the latest source code from the repository, builds, and tests it, over and over again. The result of this build is the product release.
Most of the time, this release will just be thrown away after each build, but every so often this is the pile of bits that youll ship to your customers and end users. Its built the same whether its the usual 10:00 a.m. build or its the final release after months of toil and sweat.
Its always consistent, because the build machine is an independent entity: it never looks at individual developer machines for any reason. The input to the build is the repository, and the output from the entire process is from a designated build machine. This system works great as long as developers dont cheat.
Sometimes its hard to "stay in the sandbox," especially if database licenses or web server ports are in short supply. You may be able to use a single database but create separate instances for each developer. Or, if forced to use one database with one instance, you may be able to partition the data space (for example, Joe is assigned test account data for accounts 10001999, and Sue is assigned accounts 20002999, and so on). This still leaves you open to risk of interference, but its better than nothing.
For other resources such as web services, every developer should have a clear shot at their own instance (whether they are providing the service or testing against it).
With this basic idea of isolation in mind, lets take a look at some of the tools and other bits of infrastructure youll need to achieve the sandbox effect.