While building consumer facing apps, one needs to have a very rigorous and comprehensive app development process. Some of the key aspects to focus are: right functionality or minimum viable product (MVP), rigorous testing, razor sharp focus on UI/UX and its usability testing, performance/load testing to handle high traffic volumes. Over and above, one needs to ensure that the branding of the app is consistent with the corporate branding. The risks involved are too high, if the app does not meet the high standards, the organization may not only end up losing revenue or customers, it may even end up damaging the business and/or the brand. As a result, development processes involved have to be aligned to mitigate these risks and, dare I say, classic software development methodologies with relatively longer cycles fit the bill.
On the other hand, while building productivity apps for employees/contractors, speed to market trumps everything. The faster one is able to move from idea to an app which employees/contractors can start using, better the gains, be it a competitive advantage or productivity improvement. Of course that does not mean one can ignore the user experience, this can be a key deciding factor between the success and failure of the app. Nevertheless, for these internal apps, one can incrementally add functionality, improve UX, test it more rigorously as one builds the apps. The key words here are agile, fail-fast.
These are some of the considerations that one should keep in mind to ensure that the mobile platform can support both application development methodologies:
1. Team and role based collaboration – Skills required for a typical mobile project include: creative design skills, mobile app development/coding skills, back-end integration skills apart from project management, testing & operations management skills. The platform needs to offer capabilities to ensure that all these different stakeholders can work concurrently and seamlessly on multiple projects to support both type of app development without impacting agility or compromising quality.
2. Support for multiple environments– As with any other software project, mobile projects need multiple project environments i.e. development,test, pre-production, production. The platform needs to offer capability to easily configure these different environments according to organization needs ensuring access control across these different environments.
3. Tiered Architecture – Already proven benefits of traditional 3 tier/n-tier web architectures also apply to mobile architectures. The platform needs to support a tiered architecture to be able to provide benefits like scalability, re-usability, multiple client support.
- Presentation Tier – The presentation tier consists of client apps UI code. It deals with how to present the information to the end user and can use different technologies based on the needs of the apps varying from a pure HTML5 app to a hybrid app built using frameworks like Apache Cordova, Xamarin(for those who love Microsoft) or Appcelerator or native Android/iOS/Windows app.
- Business Tier – This layer is an aggregation/mashup of different back-end services and also includes any business logic that needs to be applied to those services and finally making a mobile friendly, easy of consume service available for the presentation tier.
- Back-end Service Layer – This layer provides connectivity to backend enterprise applications like ERP, CRM, Salesforce. This layer will typically hook into an API Management/ESB layer of the enterprise and is generally referred to as MBaaS (mobile-backend-as-a-service).
- Common Services Layer – This layer provides a common set of services which most of the apps require e.g. an authentication service, Push Notification Service, storage service, data sync service and so on. This should ideally be available as part of the platform to be consumed as an API.
4. Source Control Management – Some of the large enterprises can easily have multiple of 100s of apps built by App factories. The lifespan of an app can vary from few weeks for a use and throw type app whereas on the other extreme some of these apps may live on for years. These apps need to be managed and maintained throughout the life-cycle of these apps. The platform needs to support/seamlessly work with SCM tools like git to be able to manage different part of the projects through their life-cycle.
5. Continuous Integration(CI) Tooling – For a smooth and rapid creation of apps in these App factories, CI tooling is a must have. The platform needs to support CI tools like Jenkins for rapid application development & deployment to embed test driven development in your development methodology.
In summary, different enterprise mobility projects may have different technology needs & constraints. The enterprise mobility platform needs to flexible enough to be able to support these varying needs.