Monday, November 14, 2016

Application Modernization - Part 1

I recently worked on a application modernization project to upgrade enterprise web applications to the restful architecture using open source technologies like AngularJS / Spring-framework. Here are some of my take-aways:

- Application Development is considerably fast in AngularJS & Spring MVC, however almost 50% of time goes in R&D activities & developing framework utilities & services.

- As compared to existing frameworks, Angular gives an opinionated view of project layout rather than an standardized directory structure which provides the team a choice, however it may take 3-4 sprints to customize it as per project requirements & PMOs should be digestive enough to allow the burn rate.

- As for Solution Architects, they have to tailor requirements and map to the modules, and then lay out options as per the technology / framework.  Sometimes, it make sense to develop piecemeal modules in existing frameworks for quick project wins and keep stakeholders at ease.

- Some level of patience is required by project stakeholders and allow team to play with open source, especially if an enterprise is in process of adopting these technologies and applying transformation at small scale.

- System Architects have to participate the different framework options available in an enterprise and have to develop prototype / proof of concepts and especially focus on the integration points across different layers of the architecture while baking in some level of non-functional requirements in the initial phase.

Some of the important technical aspects that we leveraged in the project:

AngularJS

- Established an entry point App module through and ng-app directive and a centralized controller to manage the application scope and enable cross-cutting features like security, logging by creating services and injecting it through common module.

- Develop partials like Header, Footer, Panels using the components and enable them through entry point index page. 

- Leveraged routeprovider / ng-route to configure routing to enable navigation along different views in the app and used customized UI-router state based routing to enable partial nested views in different modules along with their own controller.

- Leveraged bootstrap for enabling common look & feel along with custom stylesheet for cross applications standardized visuals.

- Wrap commonly used angular services like $http in custom utils service and decorate the functions calls with custom requirements like ‘enabling context root’, wrapping multiple async calls using deferred / promise implementation pattern.

Spring MVC

- Develop Restful Controllers using annotations like @RestController & @RequestMapping by taking a tactical approach of implementing module specific URI rather than CRUD operation on enterprise entities.

- To enable project delivery, sometimes it make sense to take the middle path where we leveraged the domain entities (Pojo) to define the json based input & output for restful services.

Open Points for discussion

- How would restful service implementation differ as it is compared between open frameworks like Spring MVC and Gateway implementations using products like MuleSoft, Apigee etc ?


- What level of infrastructure requirements has to be addressed if team chose to use ruby rails for front end development as opposed to AngularJS.