Tuesday, 10 October 2017

Learned Lessons – Developing a MVC 9V2.0 Full Stack ASP.NET Application called MulderbertPX

A full stack experience from being on the team at College for V1.0 and then doing V2.0 as a solo developer! 

So, yesterday I was a very satisfied Software Developer for finishing the development and launching MulderbertPX, the V2.0 release of the full stack ASP.NET application. This release brings it to the next stage of its development as a project. You may have seen this trailer for yesterday’s application launch on Github and Azure, which was going around Social Media sites.

The application’s stack is a nice full stack iteration I would recommend to anybody developing a Minimum Viable Product (MVP) and is as follows:

Application Layer:
ASP.NET in C# using cool features like @Razor

Database Layer:
Native XML DB for Contacts & SQL Server for Customer Details/Transactions

Network Layer:
Azure Cloud Deployment with configuration at Storage and Network layer making the application more efficient and secure

So, yesterday’s launch was totally awesome but what’s new in general terms for V2.0?

Application Reengineered from a Database First design I re-engineered the application with data modelling (database) tables moved up-to the application layer as modelling Enums. The V2.0 code first approach and MVC design pattern made sense as a redesign decision given the decreased pressure on database calls for information in processing transactions in particular.

More Structured DataData generation for transactions has been mainly transferred from database tables to app layer Enums, which also provides flexibility for future development direction keeping data accuracy high and customer effort low.

Database Redesigned - As I’m still a poor student in spirit (and pocket), I could not afford to have a larger SQL Server instance on Azure so a thrifty architecture for the application made sense making the SQL Server instance as small as possible. By Microsoft Azure’s pricing tiers go, I cannot make the database resource any smaller, which is good news for my empty pockets and also good direction for anybody looking to develop an Minimum Viable Product (MVP)!

The new features for this re-engineering orientated release is as follows:

Responsive Design – Two stages (768px/500px) of responsiveness are styled so this MVC application can render just enough resources to be presentable at screen sizes less then a general desktop. This includes a hamburger menu in the restricted states, which is run on JavaScript functions.

Login Box – Whilst technically a developed feature, the use of customer details (e.g. Customer ID) in a box like presentation along with options applicable to the logged in and logged out state are a basic but useful feature to have.

As the project is Open Source, you can check out my code on Github at at Project MulderbertPX. Below is a 7 minute 50 second feature movie demonstrating the application’s features with wonderful ambience music from Pytor Ilyich Tchaikovsky… hope you like it!!

The main lessons learned from this experience has been that:

ASP.NET still has great abstracted functionality to do cool things concisely such as @Razor Enums helper methods, which streamlines “View” code immensely.

Good Software Architecture is incredibly important, as you don’t want to struggle with technology access like I have done. I completed my SQL Server instance on Azure using a Mac and had no view of my DB internals. I started developing this project on Windows machines at Dublin Business School (DBS) working on SQL Server Management Studio  (SSMS) with full view of my DB internals. When my access to DBS resources finished 29th of September, the last part of the project was done on Azure’s brand new SQL Server Query window. I enjoyed the SQL coding BUT missed looking at how many tables, attributes, views, stored procedures and indexes I had. So please consider this my “Dear Santa” letter as Christmas is coming…   “Dear Microsoft, I would like SQL Server Management Studio for Mac please? Will you be my Secret Santa this year???”

Good Programming Practices like abstraction, encapsulation, inheritance and polymorphism are kernels that support clean, neat and reusable code! Considering these concepts was how I developed the application so its understandable that mirroring the service and product’s coding paths may look like an inefficient implementation. However, future development may see the customer journey diverge on goods versus service products or maybe a phased introduction of an online payments service is required. Both scenarios are likely making separate implementation paths in this release a good idea. It’s a judgement call based on the V1.0 frontend design, which hopefully will prove useful in future developments.

Version Control is your friend. The extensibility of the application was apparent to me and working as part of a multi skilled team would be the only way to develop larger and scaled future versions of the application. Also, if everything goes up in smoke on my Mac (I call her “Debs!”), using version control like Github is the only option!

SEO Counts. It’s a good idea to ensure your metadata is working and you register the application with Google and Bing especially if it’s a real e-Commerce site. There is an impressive array of API options available for Facebook and Twitter so taking time to understand what they are is a good idea! 

I guess as I start my next application (ASP.NET Core app) to showcase my projects to date, I will remember this application as a fun development experience that was loaded with learning for the future!