This is a journey through technology, persistence, and collaboration. We're sharing every detail, from our tech stack choices to the real-world challenges we faced—an authentic account of our growth. We hope to connect with others who love to create, meeting you in code and conversation.
1. UI Design: Our Figma Workflow
For our project's UI design, we relied on Figma, a powerful online design tool. Figma isn't just about drawing screens; it’s a hub for real-time collaboration with a wealth of resources and features that make remote work highly efficient. For our team, the benefits of using Figma for UI design were obvious: it allows multiple people to edit simultaneously, dramatically boosting our workflow.
Because we worked remotely, our process involved scheduling evening meetings with all stakeholders to review new designs as soon as our UI designer completed them. The designer would explain the thinking behind each design choice and patiently help everyone understand the product's complex interaction logic. This open, transparent, and interactive communication style was crucial in optimizing our development process.
2. Client-Side Tech Stack
Choosing the right client-side development technology is a critical decision that directly impacts development efficiency, user experience, and long-term maintenance costs. Among many options, we ultimately chose Flutter as our cross-platform development framework for several key reasons.
Our initial goal was to launch our product on both the Google Play Store and the Apple App Store to reach the widest possible audience. Using Flutter allowed us to develop for both iOS and Android with a single codebase, significantly shortening our development cycle and reducing future maintenance work. This is especially important for a startup or a project that needs to quickly test market feedback. This doesn't mean other technologies are worthless; the best choice is always the one that fits your specific needs and target market. But for an app like ours, aimed at quickly responding to market demands and delivering an exceptional user experience, Flutter was the most suitable choice.
① Technical Architecture Comparison
||
||
|Dimension|Flutter|Native Development|
|Implementation Principle|Self-developed Skia rendering engine directly draws the UI, doesn't rely on platform widgets, compiles to native code via the Dart language|Uses platform native widgets (Android View/iOS UIKit), and directly calls system APIs|
|Cross-platform Capability|codebase supports iOS/Android/Web/desktop, with high UI consistency|Requires separate development for Android (Kotlin/Java) and iOS (Swift/Objective-C/SwiftUI) versions|
|Flexibility|Weak flexibility (AOT compilation), requires reliance on a DSL or server-side configuration|Can be updated via hotfixes or App Store review, but dynamic capabilities are limited|
② Performance Comparison
||
||
|Dimension|Flutter|Native Development|
|Rendering Performance|Near native (60fps), but complex animations or high-frequency interactions may have slight delays|Optimal performance, directly calls the GPU and system APIs, suitable for high-performance graphics/AR applications|
|Memory Usage|includes the rendering engine and framework), app size is typically 20-30% larger than native|Lower memory usage, no extra runtime burden|
|Startup Speed|Slightly slower than native (needs to initialize the Dart VM)|Instantaneous startup, directly runs machine code|
③ Development Efficiency & Cost
||
||
|Dimension|Flutter|Native Development|
|Development Speed|Hot reload (millisecond previews), single codebase, shortening the development cycle by 30-50%|Requires developing two separate codebases, with high debugging and integration costs|
|Learning Curve|Requires learning the Dart language, but the syntax is similar to Java/JavaScript, making it easy for frontend developers to pick up|Requires mastering platform-specific languages (Swift/Kotlin) and toolchains, with a steep learning curve|
|Team Setup|One Flutter team can cover both platforms, with lower personnel costs|Requires separate iOS and Android teams, with high hiring and maintenance costs|
④ Functionality & Ecosystem
||
||
|Dimension|Flutter|Native Development|
|Platform Features|Some low-level features (e.g., background services, Bluetooth) require calling native code via platform channels|Full access to all system APIs and hardware functions (e.g., sensors, secure modules)|
|Third-party Ecosystem|Fewer plugins are available, but the community is growing fast (e.g., Firebase plugins are robust)|The most mature ecosystem (e.g., Android Jetpack/iOS CocoaPods)|
|Maintenance Difficulty|A single codebase simplifies maintenance, but requires handling platform compatibility issues|Multiple codebases increase maintenance complexity, but platform feature adaptation is more stable|
3. Server-Side Tech Stack
Since our target market is overseas, primarily foreign users, we decided to use an overseas server to ensure a better service experience and faster data transfer speeds. After a series of investigations and considerations, we chose Google Firebase as our backend platform. Firebase offers a rich set of easy-to-integrate solutions, including cloud storage, multiple user authentication methods (e.g., email and password, third-party accounts), a real-time database, and detailed in-app behavior analytics. What's more, Firebase's pay-as-you-go model allowed us to flexibly adjust costs based on our actual usage.
For our tech stack, we chose Node.js as the main development language. It has a massive community and integrates well with all of Firebase's features. Additionally, for team members who are more familiar with Python, Firebase also provides excellent support. This means developers can choose the most suitable programming language based on their preference or the project's specific needs. Regardless of the choice, the most important thing is to make a comprehensive decision based on your own situation, such as budget constraints and team skills.
4. Payment Methods
When developing and operating an application that supports in-app purchases, choosing the right payment method is a crucial step. We adopted Google Pay and Apple Pay as our payment methods. However, during our actual testing, we encountered many problems, the biggest of which was unstable network connections. To ensure the subscription process can be completed smoothly during testing, we strongly recommend using a stable and reliable method for internet access.
5. Analytics
Once an application is developed and launched, analytics become unavoidable. Regardless of the user base size, effective data analysis is essential for understanding your app's operational status and user behavior. By collecting and analyzing data, developers can gain deeper insights into how users interact with their app, including key metrics such as user activity, frequency of use, and most popular features. These insights not only help optimize the user experience but also guide future feature development and service improvements.
Among the many available data analytics tools, we chose Google Analytics for Firebase as our backend service. This tool provides comprehensive and intuitive data reports, helping developers easily track every important step of the user's journey from installation to uninstallation. It supports various types of event tracking and automatically collects basic but very valuable information, such as session counts and screen views. Furthermore, by setting up custom events, we can monitor specific behaviors or conversion paths based on our needs.