single or multi-tenant system ? -> if multi think about splitting them into separate databases
Roles and Permissions this should be thought of BEFORE not afterwards
Auditing -> we audit everything per default, but we only activated auditing for the crucial features in production
Errors -> there are two types of errors -> errors for the dev / ops -> clear, structured "where, what, why" the customer how ever should not get system information
CI / CD ... start with tests, I don't care if it's TDD, BDD or whatever just test as much and as good as possible and start simple -> the bigger it gets the more complex changes are and the more things will explode in your face
caching -> no caching till you hit the bottlenecks ! if you have a clean layer structure you can set new cache layers everywhere but it will increase the complexity.
DB -> check what you need and how the data comes in and go from there ... you can scale with a lot of different databases so this is really about "what do I need" there is no silver bullet
Technology is your choice you can scale with almost any language and tech.
Try to use a log system like Logstash and collect metrics with graphana or so.