What is the intended ALM pattern for use with Ionic?
To put that question into context, let me explain our goals. Our desire is to create many different applications that target as many platforms as possible as cost effectively as possible. What might make our applications different from some or even most is that our applications are not throw away and a specific application is not under constant development. What I mean by throw away is that the application is created, deployed, and outside of a critical bug fix that testing missed, it is never enhanced again. Kind of like the business model for producing a movie. In a throw away application, if there is going to be a second version of the application 2 years later, the previous version of the application is thrown away and a new version is created based on current technologies and perhaps some common code that can be salvaged from the first version.
Our intended workflow is to create an application as either an MVP or for some core set of requirements, deploy that application, understand the additional needs of that application, and then come back later and enhance that application if needed based on either requirement changes or new business opportunity changes.
What makes me ask the question with respect to Ionic is me questioning the viability of making a set of enhancements to an application 18 months later after it was initially deployed? Angular already only supports their versions for 18 months with any given version expected to be the current version for only 6 months. But, Angular does provide a tool that allows a user to specify the original version and new version and they give a list of changes to apply to the code to move you forward. I have not performed this step so I don’t know how viable this in fact is.
We wrote an application such as the one I mentioned on Ionic Version 3.0 and every few months we want to make a few small modifications to it and deploy a new version to our customers. It is my understanding that Ionic Version 3.0 is tied to Angular version 5.0, which is no longer supported or recommended. It is also my understanding that the officially recommended way of moving an Ionic application to Version 4.X is to create a new application and start moving code from the original version to the new version. I recall reading that some of the design concepts have completely changed in version 4.0 which implies far more than just moving code from the old project to the new. But I have not learned 4.0 due to the concern I am asking about.
I can imagine if you are writing relatively small disposable apps as a service company that you never intend to update in the future that this model may work well. I can also imagine if you are a company with a single application that you have a team constantly updating that the expensive cost of moving between versions may be relatively insignificant even if painful once every couple of years.
But with our business objectives of creating multiple targeted applications and moving them forward based on business requirements and not technology changes, it seems to me that we must budget a substantial percentage of our resources to updating these applications technologies as compared to their capabilities.
Clearly this problem does not sit squarely with Ionic. But with Ionic being yet another dependency in addition to node, angular, typescript, cordova, android, and IOS; I am wondering if our business objectives are viable using Ionic or even Cordova for that matter.
But I could be missing some critical point. So I am asking with this post:
- Should we be using tools like Ionic with these application objectives?
- If so, how should we be using them so that are not using a significant portion of our development budget to update application technologies instead of application features?
To provide some context, we already have a mono repository with our Typescript code (all the same version of tsc) broken into libraries where each significant library related to a domain or core technologies sits below frameworks such as Angular or Ionic. This allows us to replace the end technology such as dropping Ionic 3 and Angular for React Native or some other yet to be made decision. If we were to stick with Ionic, is the recommended pattern to rewrite each application every 2 years while leveraging the code not tied to the UI, CSS, and formatting from the previous application the same way a movie maker might reuse some sets and costumes, but otherwise create the new movie from scratch?
Any ideas, discussion, or experiences is appreciated.