Month: October 2014

Web vs Mobile vs Client-Server application?

What are your options when developing a new application? Both js and WPF/Winform support MVVM, real time data binding. You can build modern UI with MVVM framework in both js and WPF/Winform. You can now debug/compile/unit test both javascript with gruntjs as you can do with dotnet (from Visual Studio, Cruise Control/TFS/NUnit) or Java. How’d you choose?

Client Server

Pros

  • Unified, stable API. API/framework evolves (and become obsolete) less quickly in comparison to js frameworks. For instance, client can be built in dotnet/WPF or Winform for instance, while backend can be implemented in dotnet, Java, or C++ on Windows or Linux box.
  • Better organisation of code from maintenance/support perspective – dotnet/Java supports inheritance, Javascript doesn’t.
  • One less layer to code/develop, more Agile – In comparison to web based application, data need be wired to clientside/js, that’s additional dev lead-time
  • Not having to test against different browser
  • Access to Operating System API whereas js is sandboxed by browser. For example access to camera/mic.
  • Security – proprietary logic can be obfuscated with anti-tampering technologies.

Cons

  • Tied down to particular platform, or operating system

Web

Pros

  • Accessible from different platform/OS – mobile/tablet/workstations
  • Responsive  design – layout adaptable to different client devices, for example Bootstrap

Cons

  • Lack of unified standards, for example you’d need to choose between angular or nodejs (MVVM)
  • Testing against different browsers (At least Chrome/Firefox/IE) & clients (Desktop, Android devices & iPhone with various screen sizes)
  • Framework/libraries evolves very quickly, version change may be risky unless thoroughly tested
  • Browser updates may break your application (For example http vs https, security around websocket calls)
  • Very often there’ll be back-end development in dotnet, Java or C++ and unavoidably, you’d need to hire back-end developers
  • Everyone can scrutinize, hack, attack, *borrow* your Client side javascript

It’s quite obvious that for most applications, there will always be a back-end built in dotnet, Java or C++. The question really is, what would you choose to build the UI. There’s a lot of subjective preferences around this but personally, here’s my humble opinion on the subject.

1. Backend

Backend in dotnet or Java. Unless you’re writing device drivers, root kits, or highly optimized algo trading pipelines with DMA (Direct Market Access), there’s little reasons to do in C++. The small additions of complexity in syntax and availability of talents adds to the cost of choosing C++ for backend implementation. This add, you should be aware that you can implement *Backend* with node.js now. You can open database connection from js on node.js, you can even interface with RabbitMQ from js on node.js. Some market data vendors even begin to expose API for node.js – https://github.com/bloomberg/blpapi-node

So, truth is, you can implement backend in js – question is would you? (I wouldn’t – I prefer a proper OO language with availability of commercial & open source utility libraries. Math.NET for example.)

2. UI

Is this an end user applications? What’s intended Target Audience? Do you want to pay for the additional cost of developing UI in js?

  • If this is UI for a back-end server (And it has a UI), for example, workload automation/computing grid or EDI messaging infrastruture (more in manufacturing), then building UI in WPF/Winform/Swing/AWT/SWT saves you development cost and headaches in testing against different platforms and is thus the preferred option. Bear in mind while most workstations are Windows, on server side you can have Linux or Windows boxes. Further, your staff/clients may still prefer a responsive web interface so they can check application status/health on the run from mobile devices. One example is batch processing/grid system from Appliedalgo (https://appliedalgo.com). They have a client on Windows (https://www.youtube.com/watch?v=QdM9S0Bsc0A), also a responsive web interface (https://www.youtube.com/watch?v=dtYUona1omo)
  • If this is an enterprise application which requires complex data visualization/manipulation which can only be done on Workstation (not Mobile devices), for example, real time financial derivative risk management system (Example, Derivation.co.uk), then building UI in WPF/Winform (Most Workstations are Windows) saves you development cost and headaches in testing against different platforms and is thus the preferred option.
  • If this is an enterprise application for sales staff always on the run, example SAP REX (http://www.sap.com/pc/tech/mobile/software/industry-apps/retail-visit-management-app/index.html), then building in web or mobile application allows your application accessible from mobile devices, with responsive layout, and is the preferred option. If, for instance, compliance requires that all presentation (Investment Proposition to be specific) to clients be recorded (both audio/video), then you may even need build UI native Andriod or IOS. One such example CRM module from Axisoft.net.
  • If this is a web portal, for example, hotel booking system (hoteljen.com) or e-commerce portal (Amazon.com), then building in web application allows your application accessible to widest array of audience with responsive layout, and is thus preferred option.