- clear error messages (with the actual data that caused it, minus privacy-sensitive information) - possibility of reloading configuration without having to restart the whole application (configure-once-at-construction-time is not enough; not every application is a web application with a php-like lifecycle)
- atomic check pointing and restoring of long running operations, without leaving a trail of partially truncatd temporary files
- security: you do not know how to write secure software until someone hacks your software in an unexpected way. This includes knowing how actual infrastructure configuration affects the running software (symlinks, permissions, capabilities)
- performance: unless "scale" a software means blindly increasing the number of replicas, there are so many architectural lessons to be learned studying flame graphs of actually running software that it is hard to imagine to acquire those expertise without making your hands dirty. At that point, it is even possible that your software works so well it no longer needs so much hardware