Here are some very generic (and paraphrased) notes from a short talk today, by Deepankar Sharma.
- Whenever you release a new major version, make sure you keep a copy of the whole "ecosystem" to be able to run it whenever you want. At any point in time, you should be able to run any version of your software.
- When writing benchmarks/tests/etc., try and ensure that you cover a broad spectrum of test data, to try and replicate the different types of data that users could possibly have.
- Don't develop applications with modes. Be very careful before you add a new mode to your application, effectively adding one more code path to maintain.
- (Bonus) Beware of too much extensibility