In an ideal world, all your code is packaged into a universal install script, with dependency checking, updating, and logging services handled automatically. Conflicts between resources required by different applications are resolved according to predefined policies. Site-specific configuration changes are automatically applied as part of the unattended installation, and tests are run across the environment to confirm that everything is good to go. This article shows you how the general tenets of autonomic computing are applied to software installation.