| I love your website. My experience (web app for heavily regulated industry): - Customers don't want major versions to be continuously deployed. Each deployment involves validation and training. They want the software to be left alone, perhaps with the occasional bug fix. - The business needs new features to stay competitive. - So you're left actually needing to host multiple versions. All the major versions the customers are on, and want to stay on, and one latest-and-greatest version for winning new business. - Never force a new feature on a user. It becomes obvious that you're building things that most of your customers don't want. This means don't create a major version and automatically deploy it. - Moving data between systems is hard. Plan to never move data between systems, or major versions of the same system. Users prefer to see their data where they left it, looking exactly how they left it. A major version should be empty. If you constrain a new version of your software based on old data, sooner or later you're stuck, either because of schema or because of volume. - So if you have a big new feature, you save it for the next rewrite. - Once you've decided that at some point in the future you're going to do a rewrite, things fall into place nicely... - You avoid the situation where your dev team is mostly useless apart from the few guys who originally wrote the system. - You avoid the endless accumulation of data. - You avoid being commanded by the product team. - You avoid being hated by your users, and your clients. - You avoid spending huge amounts of time and money on things you didn't really need to do. - You avoid the end of your business, which is inevitable given ~10 years of 'current best practice'. - The part that I don't know yet is... developers have been avoiding rewrites for so long, we haven't really got good at it. We need to do it, do it often, learn how to do it well, and share that experience. |
Unfortunately, it often felt that we were having to write everything from scratch; you can barely find anyone talking about this model, or any tools designed to handle it. Everyone seems to be either fully multi-tenant or manually launching individual servers (which is not feasible for low price SaaS).