Client Requirements
Prior to selecting our technology stack, our client informed us that our app would need to support both iOS and Android, whether in the form of a cross-platform app or a mobile website. He specifically mentioned that having two separate code bases for an iOS app and an Android app would cause maintainability issues down the line (in case further development is necessary).
Possible Tech Stacks
- MERN
- https://www.mongodb.com/mern-stack
- https://www.groovyweb.co/blog/mean-vs-mern-vs-mevn-stacks/
- front-end display tier (React.js), application tier (Express.js and Node.js), and database tier (MongoDB)
- MongoDB works extremely well with Node.js
- We have experience with elements of this stack, especially React.js
- Pros:
- React offers a good experience to the user; Dropbox, Facebook, and Airbnb all use React to make great UI
- Covers both iOS and Android as a mobile website – meets client needs
- Cons:
- does not support direct calls
- Not recommended for development of large-scale web apps
- MEAN
- https://www.mongodb.com/mean-stack
- MongoDB, Express, Angular, and Node
- Pros:
- Easy to design and test apps hosted on the cloud
- Covers both iOS and Android as a mobile website – meets client needs
- Cons:
- Maintenance is difficult due to many libraries and frameworks, and frequent updates are required
- App sustainability may be a problem
- Swift
- https://www.javatpoint.com/swift-vs-objective-c
- https://www.sam-solutions.com/blog/objective-c-vs-swift-whats-the-difference/
- Pros:
- Simplicity (faster learning curve)
- Advanced, modern functionality make the language safer (less prone to errors) – generics, optional, type inference
- Cons:
- No experience among the group
- No support for versions of iOS before iOS 14
- Language still in development – could require continual migrations down the line to newer versions of Swift
- iOS only – doesn’t cover our bases on Android
- Objective-C
- https://www.javatpoint.com/swift-vs-objective-c
- https://www.sam-solutions.com/blog/objective-c-vs-swift-whats-the-difference/
- Pros:
- Stable, well-tested language (no future migration issues)
- High C and C++ compatibility
- Supports all versions of iOS
- Cons:
- No experience among the group
- Steep learning curve, complex syntax
- Limited functionality due to old age
- Security issues
- iOS only – doesn’t cover our bases on Android
- No experience among the group
- Kotlin
- https://www.openxcell.com/blog/how-to-choose-technology-stack-for-app-development/
- https://mindmajix.com/kotlin-vs-java
- Pros:
- Easier to have cleaner code
- Saves on a lot of code space compared to other languages
- Completely compatible with JVM so its possible to also use java frameworks at the same time
- Cons:
- Slower compilation time than Java
- Has a steeper learning curve
- Has a smaller community and therefore less resources to find solutions
- Android only – doesn’t cover our bases on iOS
- Java
- https://www.openxcell.com/blog/how-to-choose-technology-stack-for-app-development/
- https://mindmajix.com/kotlin-vs-java
- Pros:
- Widely used by many large companies and therefore is well supported with greate scalability
- Many open source libraries and tools to choose from
- Cons:
- Can cause problems with android API design
- An incredibly verbose language which may slow down development
- Also requires a great amount of memory space
- Realistically Android only – very difficult to adapt for iOS development
Selected Platform – MERN Stack
We’ve chosen to use the MERN stack for our project. This breaks down into the following
- Database – MongoDB
- Backend – Node.js and Express.js
- Frontend – React.js
This will require knowledge of HTML, CSS, and JavaScript. We currently don’t plan on using any packages for graphing/charting, image/video processing, etc., but this may change down the line.
The tech stack will allow for development covering both iOS and Android.