Software Engineering

Blazor WebAssembly and .NET Core

A company recently brought me in to help them deliver several related software projects including one web based data mining application.  Their work involves advanced scientific analysis using robotics. This includes software to control the robots and sensors, very advanced mathematical analysis, and then a web-hosted data mining component. The former Sr. SW Engineer had started them down the path of using JavaScript with AngularJS for the web-hosted system. They had invested a lot of time and money down that path but were still not finished. After assessing their situation it became clear to me that a new architecture utilizing Blazor WebAssembly and .NET Core 3.0 would be a much better fit for their needs. The risk of starting over so late in the project was pretty high. However, the developers were very familiar with C# development but not with JavaScript or Angular and so initial development and maintenance would be much more efficient using a common language. Thankfully after careful consideration, management decided to support the change.

Our initial experience with Blazor has been stunning. Development productivity has been very high. The resulting code is much more structured, clear, concise, understandable, testable, and maintainable than before. Blazor has helped us get a very nice looking presentation of complex information with minimal effort. I wish I could show the application but it is a highly proprietary internal application. Suffice it to say that it has pretty extensive data mining with alternative ways to drill into the data. It also includes some advanced mathematical logic on the analysis and graphical representation of the results relative to the target being analyzed by the robots. We have been able to encapsulate each part of the drill down into components so we can remix and reuse them for different views. Each component can show a list or collapse and show one selected line which automatically triggers the next component to show its list. This allows the users to quickly drill down, pop back up, and drill down another path. The performance is very snappy encouraging the user to engage with the data. Implementing all of this in C# with .Net has proven to be very productive, clear, concise, understandable, testable, and maintainable.

Obviously no language or environment is perfect or even ideal for every situation. Using an environment at this early stage of its development brings additional risks and challenges. Debugging in the client is limited. WebAssembly is still limited. Support for the HTML Canvas is  very limited. When Microsoft released new preview versions it broke our app in very obscure ways. Their error messages when this happens are totally useless. However, even with this, I am very glad we forged ahead when we did. In the last several months we have nearly surpassed what was accomplished over a couple of years with the prior technologies. Of course much of this is due to the lack of experience with AngularJS by the team. The risks and delays of using new technology have proven to be small relative to the huge gains it has brought. I would certainly not recommend an Angular shop to convert everything to Blazor.  However, for new development with developers who are familiar with C# and .NET, I highly recommend giving Blazor serious consideration.