First post here. I work for a company that writes and sells commercial, off-the-shelf software. We've got a software engineering team of approx 15 individuals that are fairly well-educated - some are only familiar with the Microsoft ecosystem while others have more diverse backgrounds.
We have several large web-based products that are both cloud-hosted and customer-hosted and we are currently heavily invested in the Microsoft .NET ecosystem. Most of our applications are older and are written in ASP.NET Web Forms (assume the largest application has approx 800 web forms). Most of the applications are NOT SOA-based - they mix business, UI (and sometimes but more rarely data) all within the web form and code-behind. As you can imagine, we're looking ahead and seeing the writing on the walls that ASP.NET Web Forms is a dying animal and are wondering what our next technology platform should be.
I've read a few articles that suggest we should avoid a re-write at all costs (most notably by by Joel Spolsky in his "Things You Should Never Do, Part I") but I see few other options for folks with large web forms-based applications. Open to everyone's thoughts in this regard.
Here are our requirements for a technology platform:
- We want a technology platform that we can write software cost-effectively in. ASP.NET web forms has served us well over the years from a rapid-development point of view, but has allowed us to follow poor software design principals. I'd be OK forgoing some productivity to give us more flexibility down the road.
- We want a stable technology platform that isn't being reinvented every year or two just for the heck of it. We make money by selling our software, not by re-writing it to suit the flavor of the day. I'll lose my job if I recommend a technology platform and it disappears or is re-invented in the next 5 years.
- Ideally, the technology platform would not have a large learning curve for our existing engineers.
- Ideally, the technology platform would not be tied to any one vendor. For example, we currently only support SQL Server but would like to have more options to offer our customers. Similarly, we'd like to be able to host our application on Linux as well.
Naturally, because we're a Microsoft shop, several engineers are suggesting .NET Core. My understanding of .NET Core is while it may be production-ready now, and it may meet a large number of the requirements above, it is still a bit of a work-in-progress. I was told that large quantities of breaking changes were made in the last couple of releases. The folks that are suggesting the .NET Core approach fell victim of some of these changes and had to refactor/re-write some of their code as a result. Our applications are too large and far too complex for any of that - we absolutely need stability and longevity. Please keep in mind I have zero .NET Core programming experience - this the impression I am getting from members of my team so please set the record straight if I've been mis-informed.
I look at some of our competitors and also the vendors of the tools we use on a daily basis and have great respect for (JIRA, TeamCity, UpSource, etc) and they are all on the Java platform. I have some Java experience, but it is 10 years old at this point so not sure I trust it any more.
All of that said, I'd like some recommendations on what technology platforms we should be considering, given those requirements, and what experience the community has had transitioning large commercial applications from a Web Forms-based platform onto their platform of choice.
DISCLAIMER: This post is NOT intended to spark a debate about which programming language/ecosystem is superior/inferior. I realize they all have their strengths/weaknesses and use cases. I'm looking for recommendations based on our requirements above and actual, real-world experience with enterprise applications.
Thanks in advance!
NOTE: This was originally posted on stackoverflow.com and put on hold due to it being off-topic. It was recommended that I instead post this question here.