Making it right, not just making it work Quality

4 Ways to Make the Ship/No-Ship Decision

At some point, you have to declare the software development project “done” and move on to the next one. But the decision-making process is different in many environments. Here’s how to make the decision… for better or worse.

I fondly remember my graduate course in software development management at Grand Valley State University. Good old CS 651 made the ship decision seem so easy. Why, you just shipped the software on the day the test phase ended, after all, and the testing phase ended on the day the schedule said it would.

Looking back, I am most amazed at the advice the CompSci textbook gave me. Oh, not at the book’s naiveté or its academic approach; that was to be expected. I was more amazed that a 600-page book about the software development process never addressed such a critical question.

To be fair, we don’t do that much better at the “ship/no ship” decision in industry. The testing literature suggests that, outside of certain types of regulated projects, the tester’s role is to inform, not to decide, and the ship decision is best left up to general management. The Agile literature tends to either advise a “whole team” approach or suggest the decision is up to the product manager, the “single wringable neck” responsible for the tough choices.

Yet how, exactly, can a product manager make up his mind?

In the last decade, I’ve seen a few ways to make the call. I present a four ways I’ve seen for “when to ship” decisions, along with some of the tradeoffs involved with each technique. (And, unlike that textbook, I do it without the big words or fancy symbolic notation, thank you very much.)

Here are my four favorite ways to make the ship/no-ship decision, from worst to best:

1. The Magic Deadline, or “The Big Boss Said So”

Sometimes the deadline is forced upon you: a trade show, the Christmas holidays, a contractual agreement. In this case, I prefer to structure the project incrementally, building the most important features first, so that developers, testers, and stakeholders can compromise on scope instead of quality.

Occasionally, compromising on quality can work. You might only show a demo at the trade show, and not actually sell the finished product. Or you may have an accepting user community. For example, Twitter users are famous for putting up with outages.

On the other hand, Twitter is free. Is your software free? Are people relying on the software to get their work done, not just to keep in touch with friends?

2. No “Show Stopper” Issues

There’s a reason they call them “blocking” defects – their presence means you don’t ship. So one way to manage the project is to proclaim, “We don’t ship until all the blockers are resolved.”

The “show stopper” method is about defining the earliest moment you can responsibly ship software. The most attractive benefit is that it’s also the cheapest.

Speaking of responsible, the “no show stoppers” ship methodology does not mean you can bang out code and not test at all. The “no show stopper” moment needs to be at the end of some sort of release-testing process, which I cover later. And yes, it is always possible that the latest Priority-1 Bug Fix introduced a new defect, so you may want to do a little more testing.

3. No “Show Stoppers” after a regression-test run, or a waiting period

Earlier I mentioned a regression-test run, which I might call a “cadence.” This a responsible plan for testing; some shops might call it a test cycle. The idea is that when there are no “blocker” bugs known, and a test cycle completes, and you still have no “blockers,” well, then, now you can ship.

Likewise, if you have some beta test process in which the software is staged and used (provisionally) by actual users, you could ship when some period of time has passed without anyone discovering a new “blocker” bug. This length of time is generally related to the development cycle. For example, Microsoft might have a six-month beta for a new operating system, but if your team ships a new build every month, your code might only be on staging for a week or two.

Each of these methods means less risk (and generally, more quality) for the end customer – and they cost you an increasingly large amount of time and money. The basic tradeoff is the amount of risk to the company is versus the cost of shipping late. That cost could mean lost third quarter sales, a broken contract, or opportunity cost. After all, if the team ships one product today, they can get started on another product tomorrow.

Most of the teams I work with try to do “No show-stoppers after a regression run,” but if a bug fix is trivial or low risk they may do a very light final regression run.

#4. Consensus

Some software teams I’ve worked with have staff with advanced degrees and decades of software experience. Those developers and testers knew the customer extremely well, or actually were the target audience. It seems strange that we would lock ourselves into a policy like something above if the whole team just “doesn’t quite feel right,” doesn’t it?

If your organization is profitable, doesn’t have a revenue gun in its back to ship on a deadline, and the technical staff has incentives that match the long-term goals of the business, the consensus method might just be the best choice for you.

If the team has the right level of confidence (and especially if it has a financial stake in the long-term outcome), you might just take a vote. If the risk to the company is high, you can require more than a simple majority; before you agree to ship the software, you could require two-thirds or all-hands to agree. Knowing that they get to make the decision can be a huge thing to help a team gel and take ownership.

I’ve been told a few times that this could never work, yet ID Software, one of the more profitable and well-known game makers has an old slogan: “The software will ship when it’s done.”

There are other ways to make the ship/no-ship decision. You could assign a weight to every bug and say the total score has to be below some bar. Yet in my experience, arbitrary and complex metrics tend to be over-ruled by political or organizational pressures.

Which Method Should I Use?

Some methods are out of your control; you ship when the big boss says so. Perhaps you can inform executive management of the risks, perhaps the team can trade off some scope or defer some work, but when the CEO makes the call, the decision is pretty easy. Even if you don’t like it that way.

Yet I find that corporate cultures are in the middle of a transition, moving away from command and control and toward multi-disciplinary work teams. Companies like Amazon.com are increasingly replacing the “single wringable neck” with self-organized, self-directed work teams that can decide for themselves when to ship – which can put a lot of weight on your shoulders.

If you are in that situation, or if you are the single wringable neck at a more conservative company, you should give serious thought to your release practices. By developing a release cadence, understanding how the customer will use the software, and taking a hard look at the known defect list, you can make a best estimate of the software’s usability as well as the consequences of not releasing the software, such as lost revenue.

As the saying goes, it’s a tough job… but that’s why they pay us the big bucks.

Share with your friendsJoin and Stay Current with the Community
JOIN RSS
About Matt Heusser

Matt Heusser consults on software and business issues with a focus on quality. A member of the Board of Directors of the Association for Software Testing, Matt was also the lead organizer of the Great Lakes Software Excellence Conference, now in its sixth year. You can read Matt's columns in Software Test & Quality Assurance Magazine, where he is a contributing editor, or read his blog. Matt tweets as @Mheusser.

  • http://twitter.com/benklaasen Ben Klaasen

    Hi Matt – you say: “…the tester’s role is to decide, not to inform, and the ship decision is best left up to general management.”

    Shouldn’t this be “…the tester’s role is to inform, not to decide, and the ship decision is best left up to general management.”?

  • Esther Schindler

    Eeek! How did Matt and I both miss that?! It’s fixed, now. Thanks for the catch.

  • http://twitter.com/benklaasen Ben Klaasen

    ;-) That’s why I’m a tester!

  • http://topsy.com/www.softwarequalityconnection.com/2011/01/4-ways-to-make-the-shipno-ship-decision/?utm_source=pingback&utm_campaign=L2 Tweets that mention 4 Ways to Make the Ship/No-Ship Decision — Topsy.com

    [...] This post was mentioned on Twitter by sjvn, Jack Tsai. Jack Tsai said: i like these words. very valuable! 4 Ways to Make the Ship/No-Ship Decision http://goo.gl/9NHF8 [...]

  • Anonymous

    woops. duplicate return key press..

  • Anonymous

    This is good typology of the ship/no-ship decision making, and I hope it spurs a few more people to abandon the clustering of bugs in the “medium severity” and “medium priority” death spiral, where gutless management eventually confines all decision making to your #1. As you have pointed out, there are really only two severities of bugs: those that can be shipped with the product, and those that cannot go out the door.

    In my history, I had the good fortune to work at Boeing and HP Labs where bugs were categorized by what they caused to happen (crash, loss of data, probable call to customer support, likely hardware recall, reworking the documentation, etc.) rather than how engineering or business departments responded emotionally to their discovery. These methods prevent the other death spiral, #4 on your list.

    Politics are the enemy of #2 — someone in the business section decides what is and is not a show stopper. Management in most companies is not known for spine. Weaknesses in the engineering ranks are the enemy of #3, because many engineers prefer to (and are rewarded for) ignoring testability during design, and later create test plans that only test what is easily testable.

  • Anonymous

    The way it has worked at software companies I’ve been at; is that it ships when no more testing can be done (either due to time or personnel or knowledge constraints). Then, a few customers are selected and asked if they would participate in a trial. It goes out to them for a week, and a few people are assigned ready to handle critical issues that arise. Then, once these are ironed out (and sometimes not, if it’s not likely to impact other businesses that use the software in a different way), a general release is done; with half the customers on one day and the other half a day or two later.

  • http://twitter.com/mheusser mheusser

    That’s what I would call a “beta” program and it’s pretty common, especially when we used to ship CD’s and DVDs. The problem I saw with the week-long beta was that it would be installed on a PC in the corner and people would be told to use it “in their spare time”, rarely with a “what’s different” list. At the end of the week, it hadn’t been trusted with any real project work, the customer gives a thumbs up, and it may, or may not, be ready for release. Still, that’s likely better than shipping with no beta! :-)

    Thank you for your comment.

  • http://maxxmaster.soup.io/post/111735394/4-Ways-to-Make-the-Ship-No maXXmaster’s soup

    4 Ways to Make the Ship/No-Ship Decision…

  • Anonymous

    True, I should have clarified I work in SaaS environments with under a hundred customers, so when a company agrees to use the new beta, their whole operation is on it for the week :-)

    I think sometimes things were pushed out with lots of known issues, and it was the reaction of the test business as to whether those were big enough problems to halt a release or not; and how to prioritise bug fixes.

    I can imagine this is quite different to other products where yes, it would sit in a machine in the corner. I’m so used to working with internally-used software that I’d forgotten that kind of problem exists for some companies.

  • http://www.facebook.com/people/Martin-Payne/657582694 Martin Payne

    Just a comment on terminology. Although a blocker is usually a showstopper, a showstopper is not always a blocker. A blocker is a bug that prevents further testing in a particular area (the other test cases are blocked). It is a term used by testers to communicate information with regard to the progress of the testing effort.

  • http://www.syngu.com/development/1512808420/4-ways-to-make-the-ship-no-ship-decision/ 4 Ways to Make the Ship/No-Ship Decision | Debugging | Syngu

    [...] day the test phase ended, after all, and the testing phase ended on the day the schedule said… Read more… Categories: Debugging     Share | Related [...]

blog comments powered by Disqus