- Failing to install and load.
- Breaking other software (e.g., the operating system) on install or uninstall.
The three most common causes of failures are:
- Not verifying that the final release matches the last build tested.
- Failing to virus-check the final release.
- Untested configurations.
In the end, my checklist for releasing software looks like this:
Important! Before releasing software, please:
- Compare the last tested build against the release build to verify that they match exactly.
- Run at least one, preferably two, up-to-date virus checkers on the final release.
- Install, launch, and uninstall the final release on all supported operating systems.
Notice that all the items on this list are specific actions. It's tempting to include general guidelines such as "ensure the software does not corrupt data" on the list. Yet doing so would weaken the list. This is a prerelease checklist, intended to tame last-minute release chaos. It's not an all-encompassing list of things to test. Presumably someone tested the software before we decided to ship it.
Finally, it's important to note that different organizations will have different lists. Your checklists will reflect your requirements, your software's quirks, and your organization's historical weaknesses. Your context is unique; your checklists should be too.
Developing software is certainly more complex than brewing coffee, but both require attention to detail in order to avoid large messes. Just as the organization I visited learned from its coffee-brewing fiascos, all of us can use our past experience with failures to prevent trouble from brewing in the future.