For larger systems I generally wind up also writing a Wiki that is literally a brain dump with every single piece of information that could be relevant. This Wiki includes not only development information, but everything needed to operate, maintain, and troubleshoot the entire system. Part of the reason I do this is to help others understand everything. Another reason I do this is so I don't have to remember every single detail of code I wrote many years ago.
The title literally says "Personal Cloud Computer". I have run my own SMTP, HTTP/HTTPS, DNS and others over the years simply because I could. As a personal infrastructure I didn't give a rat's about massively parallel, redundant, 99.999% uptime, or any of the other 'advantages' of a cloud environment. I wanted the experience of knowing how things worked for myself rather than be dependent on another company.
For non-personal requirements, the cloud can quite often fit the bill very nicely. I own a telecom services company that is 100% cloud based and I could be happier. I have also consulted for relatively large companies and hosted 100% of their systems in the cloud. Why? Because it may be able to provide some advantages. Not that there aren't some disadvantages as well, but the good outweighs the bad.
Going back into a distant piece of career history I was at a large eCommerce company in 2005-2006 that was moving to self-hosted virtualization for efficiency reasons. The work they were doing might happen to be the major cloud vendor today.
"It's what you learn after you know it all that counts." -- John Wooden