I work as a developer mainly within the financial services sector. The solution my company develops is complex and handles all aspects of a finance company's business. The product is quite mature having first been developed in classic ASP then redeveloped in ASP.NET. It does all the day to day stuff well and offers great benefits in terms of information management and automation of repetitive tasks.
The other day I was thinking how could we significantly improve the product and I came up with two areas that currently represent problems that are non trivial to fix.
Firstly due to the complex nature of the system the finance companies would like to be able to test configuration changes for exsiting and new clients. When they have tested them they would like to be able to auto-promote those changes to Live in a controlled manner and if there were any problems roll back the changes quickly. This represents something of a design challenge. We can build as many environments as we like but promoting changes from one to the next is not straightforward. We could create some stored procedures that would move data accross from a Trial database to the Live one but it is not obvious how these changes could later be rolled back, what's more these stored procedures would have to be maintained whenever schema changes occured. It would also be difficult to know whether all changes in the trial environment were to be moved or just specific ones for specific clients. I can see there being a solution for promoting specific changes as required by the finance company but not a generic solution to this problem.
The other major problem we face is regression testing after new functionality is added or existing functionality is altered. Like any complex solution there is a lot of interaction within the system changing something can have one desired effect and five undesired ones. If we could do it all again differently maybe a test driven development approach would help allieveate some of this pain. The only problem with this approach is it would have taken longer to get a working product out the door. At the time the highest priority was to get to a point where we had a working solution. This could be viewed as short-term thinking but the finances of the company were dictating this. It is also worth remembering we were developing web applications when the internet was a pimply faced youth so there was a steep learning curve as no-one had done it before and written a book on how to do it.