I am currently consulting with a client that is using Mathematica to prototype a number of proprietary algorithms. Many man-hours of work have gone into the development of these algorithms and there is an expectation that this work will be reused as-is.
I have been brought in to help design and develop my client's products with a focus on getting them ready for a market beta.
The above information is relevant only to set the scene; my client has very little experience in commercial software development, as their focus is more on academic research. As you may imagine I face quite a bit of push back when discussing or proposing solutions to problems that I've faced many times previous, so I'm looking for some solid information that I can use to inform our decisions.
We are currently considering a few options for the software product; either outsourcing development to Wolfram or developing in-house with .Net (either importing the Wolfram code into .Net, or rewriting the algorithms in .Net). .Net is a preference because my client has other applications already written using it.
State of the Code
I am by no means an expert in Mathematica, but from what I can see the MMA prototype code is monolithic - essentially a few big blocks of text in a single notebook. I find it quite difficult to read, but in all honesty it's probably going to be dealt with as a "black box" by a product developer anyway. All they really need to know is the input and the output requirements for the functions / algorithms (unless it ends up being rewritten in another language).
The algorithms will form a small (but important) part of a much larger piece of commercial software.
It is my understanding that Mathematica is a front-end for the Wolfram language that is best suited to presentations and prototypes. If this is an incorrect assumption, please put me right!
I'm also facing a number of challenges getting the Mathematica notebook format working in any useful way with source control (git). I've looked up many solutions, but none are really suitable for day-to-day development, branching and merging.
As for integrations, I have looked at .Net / Link, but have not yet tested it to see if its suitable. Any comments on experiences around this would also be welcome.
Is Mathematica suitable as a platform to develop a fully-fledged commercial software product or is there another Wolfram product that would be better suited to this?
The full product is part of a cloud-based enterprise solution and will be a cross-platform mobile app and / or SaaS web application that heavily integrates with an in-situ RESTful API (data lookups, data storage, federated identity / security etc). It may also potentially require integration with mobile device hardware, depending on how the requirements pan out.
I have briefly looked at using .wl files and Workbench but am yet to convince the consultant doing the work that this is the way to go.
Thank you in advance for any replies. I appreciate this is a long post but hopefully you experts can expedite any decisions that need to be made here!