Some other key parts
Make sure your builds are reproducable -- this
usually means tagging them in CVS before you
do the build.
Make sure you can test the release easily --
a regression framework is essential. Write
programs that test your program as much as
possible. If you can't automate your application,
your users probably can't either and are kinda
frustrated by it (this is hard for things like
window managers, yes. It's essential, though.
Re: My installation procedure
That's an pretty common method of ad hoc management, but it falls short on a couple counts. Pretty much any time filenames change, for example -- shared libraries, new/renamed binaries, etc.
Check out EPKG. Basically, move your /opt tree to /usr/local/encap, remove the package name symlinks (leave foo-3.1 but delete foo), and run epkg on it. You'll be pleasantly surprised.