Having botched releases is a software developer's nightmare. One spends a lot of work designing, coding, and publicizing, only to have it so that users who download the just-released package can't use it at all. This destroys users' faith in the software and developer, and may not even come back to it when the problem is fixed. Even worse, often the users will not even report the problems to the author, so the developer is left in the dark as to the fact users are having problems!
I personally have horrendously botched releases; in particular, once I had to do about 4 releases in 3 days, due to a mixture of errors ranging from missing files in the package, to failure to compile. It was a mess; thankfully, I had helpful users who actually reported the problems they were having in a quick manner, so that I was able to repair my mistakes. However, since I had not yet had a developed a processto go through before releasing, I would fix the problem, but release with a different problem. It was awful, and demoralizing.
After that incident, I made up my mind to write down the steps I should take when releasing software. The steps are primarily for Perl software, since that what I primarily work on. I follow these steps religiously, not deviating from them one bit during the release process. And it has helped; since I began following these steps, I have not botched a release yet, and I'm very proud of that.
Note that these steps assume you are packaging your product using the standard Perl tools such as ExtUtils::MakeMaker, and use CVSto manage your code.
If any of these test-checking steps fail, then start overat the beginning of the steps.
This step checks for files not in MANIFEST.
This step creates a temporary package, and runs through the testing process.
I like to use the tag-template release- x- y- z. For example, release-0-1-5.