Technology choices - culinary-code/algemeen GitHub Wiki
Technology choices
The following page covers the considerations we poured into the technology choices we made.
Frontend
Technology Evaluation and Choice for Frontend Development
When deciding on the technology for the frontend of our application, we conducted a thorough evaluation of several frameworks and languages. Below is an overview of the options we considered and the reasoning behind our final decision.
Evaluation of Frontend Technologies
Flutter
- Cross-platform: Enables development for both Android and iOS from a single codebase.
- Extensive Documentation: Comprehensive resources for learning and troubleshooting.
- Challenging but Rewarding: A relatively new technology for our team, providing both a learning opportunity and a challenge.
- Complex UI Components: Supports building intricate and visually consistent user interfaces.
React Native
- Limited Framework: Offers fewer built-in capabilities compared to Flutter.
- Familiarity: Similar to React, which some team members already know.
- Native Component Differences: Potential variations in behavior and appearance between Android and iOS due to reliance on native components.
Kotlin
- Cross-platform Potential: Supports cross-platform development, particularly through Kotlin Multiplatform.
- Java-like Syntax: Familiar to developers with a Java background.
- Ease of Learning: Straightforward for developers with Java experience.
Our Choice: Flutter
After evaluating the available options, we chose Flutter for the following reasons:
-
Cross-Platform Consistency:
Our goal is to create a cross-platform application with a consistent look and feel on both Android and iOS. Flutter excels at ensuring visual and functional parity across platforms. -
Complex UI Requirements:
Flutter is highly recommended for developing complex and dynamic user interfaces, which aligns with the needs of our application. -
Team Learning Opportunity:
While Flutter is a new technology for our team, this challenge presents a valuable learning opportunity. Adopting Flutter allows us to gain experience in a modern and versatile framework. -
Comparison with Other Options:
- Jetpack Compose (Kotlin) was ruled out due to its limited cross-platform capabilities.
- Kotlin, while easy to learn, lacks widespread internal support within our organization.
- React Native, though familiar to some, has limitations in consistency across platforms and fewer built-in capabilities compared to Flutter.
By choosing Flutter, we are embracing a robust framework that not only meets our technical needs but also supports our team's growth. We are confident this decision will contribute to a high-quality application and a positive development experience.
Backend
Technology Evaluation and Choice for Backend Development
For the backend of our application, we carefully evaluated multiple languages and frameworks to select the best fit for our technical and deployment needs. Below is a summary of the options considered and the reasoning behind our decision.
Evaluation of Backend Technologies
Java
- Robust: A mature and widely-used language with proven stability.
- Extensive Support: Backed by a large developer community and abundant resources.
- Compatibility with Kotlin: Shares similarities with Kotlin, offering flexibility if we choose to expand or switch in the future.
.NET
- Optimized for Azure: Designed to integrate seamlessly with Azure, Microsoft's cloud platform.
- Efficient Data Processing: Known for strong performance when handling large data sets.
- NuGet Packages: Provides excellent Azure-related libraries and tools for streamlined deployment and integration.
Our Choice: .NET
We chose .NET as the backend framework for the following reasons:
-
Azure Deployment:
We will work with an Azure environment for hosting the application. As both .NET and Azure are Microsoft products, the synergy between the two ensures a smooth and efficient deployment process using well-supported NuGet packages. -
Comparable Performance to Java:
Both Java and .NET offer comparable performance, making the choice largely dependent on other factors. Given .NET's Azure compatibility, it was the logical option. -
Ease of Integration:
.NET simplifies the integration of Azure's services, saving time and effort in building and deploying the application.
By choosing .NET, we align our backend development with Azure's capabilities and ensure a robust, high-performance application. This decision leverages the strengths of Microsoft's ecosystem to deliver a seamless development and deployment experience.