Our web solution for our company is in its fourth major generation, which has changed significantly over the past 8 years. The new generation introduced many constructive solutions that helped precisely in this task, since it became inconvenient to update the previous generation based on new customer requirements. Thus, in 2009, I spent a lot of time thinking about this problem.
The most valuable thing you can do is use a flexible approach to creating software. In particular, you must maintain an environment in which a new assembly can (and is created) created daily. While daily builds are just one aspect of Agile, this is the most important practice in resolving your issue. Although this is not the same as the ability to upgrade, by itself, it nonetheless introduces discipline into a process that helps reduce the likelihood that your code base will become bulky (or you will become an Astronaut Architect ).
Regarding frameworks and languages, there are two basic requirements: the structure must be durable and stable and that the environment supports the Separation of Concern . ASP.NET did a good job for me in this regard: it evolved rationally and without breaks, which invalidates the old code. I use a separate layer of business logic to manage SoC, but ASP.NET now supports MVC development. In contrast, I came to dislike PHP after months of working with it because it just seemed to encourage promiscuous methods that threatened future updates.
Regarding the choice of DBMS, any modern RDMS (SQL Server, MySQL, Oracle) will serve you well. Here is the key: you will need to support DDL scripts to manage updates. It is just a fact of life. So how do you do this? The most valuable third-party tool is my copy of SQL Compare from Red Gate. This process was a complete nightmare and considerable resistance to my ability to develop my code until I found this tool. Thus, the general recommendation is to use a database for which there is a tool for comparing database structures. SQL Server is just very lucky in this regard.
The equipment hardly cares. You can always upgrade to new equipment while the development process includes a reasonable assembly process.
Strategy for constantly changing requirements. Again, see Agile. I would advise you not to even think of them as βrequirementsβ - in the traditional sense of a large document filled with specifications. Flexible changes in important ways. I do not comply with the requirements of the document, except when you are working on a contract for an external, paying customer so that I can be sure of the proper billing and prevent creep functions. At this stage, our internal process is so fast and accurate that reports from our query / error management software (FogBugz, if you want to know) serve as our documentation when preparing a new version for marketing.
Strategy / solution for a complete reorganization: no. If you attach a reasonable degree of thought to the process that you will use, select the basic tools and ensure separation of problems, then nothing but a complete rejection of HTTP and RDBMS should cause a general redesign.
If you are Agile enough for something to change, you are unlikely to ever find yourself in a position in which everyone should change.