This is the first time I will be delivering code for a freelance project (web-app), and, since I don't have much experience shipping code, I am having a hard time deciding whether my program is ready for deployment or not.
My understanding is that a production-level code must have the following characteristics:
- Fault tolerance: ability to survive uncaught exceptions
- Data redundancy: never lose user data
- Scalability: Handling extra load should not require re-writing the app
- Test Coverage: a "decent" amount of code tested
Some of these characteristics are specific to the program itself, while others are more environment-related (whether using multiple clusters). However, even the environment-dependent characteristics do affect the way the program is designed.
My question then is: What are the other characteristics that make production-code so different than code not meant for production?
Just to reduce the scope of the question, please focus only on web apps.
Edit: I will try to narrow down the scope by asking for characteristics specific to my situation. As a freelancer, I was responsible of everything from purchasing a VPS, to configuring it, to writing the code, to deploying it. Although the project and its setup are well documented, the customer will not be able to maintain it. The app is not complex, but depends on a lot of external components, which makes it really prone to breaking if these components change/disappear. The goal is to set up a service that would be able to last as long as possible without the customer's intervention.