What No One Tells You When You Start a Mobile Project from Scratch
If you've ever been asked to estimate how long it will take to develop an app from scratch, you've probably had that moment of doubt: "How long is this really going to take?" After more than four years of developing mobile apps, the same challenges always arise. It doesn't matter if the app is for food delivery, task management, or a social network; there are certain things you absolutely need to consider. Let's go through them in a simple and relatable way, with a few examples from my experience using React Native.
1. Authentication and Authorization:
Almost all apps require users to log in. And this is not just about adding a form with a username and password—there are many things to consider:
- Log in / Log out
- User registration
- Temporary or initial password
- Password recovery and update
- (Optional) Multi-factor authentication (MFA)
- (Optional) Biometric authentication (Face ID, fingerprint)
My comment while developing with React Native: For a member management app, we used an external API with Keycloak for authentication. It seemed straightforward at first, but integrating the login flow and token refresh with the mobile app took longer than expected, especially to ensure compatibility between iOS and Android.
2. Design and UX: Making It Look Good Everywhere
Design is not just about "looking pretty," it's about ensuring it works well across different devices and resolutions. Some key things to keep in mind:
- Use of existing design systems (Material Design, Human Interface Guidelines)
- Platform-specific customization (iOS / Android)
- Responsive design for multiple screen sizes and orientations
- Accessibility (WCAG & specific mobile guidelines)
- (Optional) Light/dark mode support
- Optimized asset loading (lazy loading)
- Skeleton loaders to improve speed perception
- Smooth animations and transitions
- Offline support and data synchronization
My comment while developing with React Native: It always happens that styles look different on iOS vs. Android, so you have to test the app on both operating systems and make the necessary adjustments. Details like icon sizes, fonts, and shadows never look exactly the same.
3. Data Handling: Not Everything Is Instant
Mobile apps rely on APIs to function, but there are a few things to consider:
- Management of global/local state (React Context, Redux, Zustand, MobX)
- Integration with APIs (REST, GraphQL, WebSockets)
- Cache management and data storage (AsyncStorage, SecureStore, SQLite, MMKV)
My comment while developing with React Native: If you don't plan this properly, you end up with screens that take forever to load or data that disappears when the user closes the app.
4. Security
Handling sensitive data is crucial:
- Protection against XSS, CSRF, and API vulnerabilities
- Secure authentication and session management (JWT, OAuth)
- Secure storage of sensitive data (AsyncStorage, Keychain, EncryptedStorage)
- Input Validation and Sanitization: Never trust the data users input. Sanitizing inputs means removing malicious characters to prevent attacks like SQL Injection or XSS. Validation also helps prevent unexpected errors by ensuring only correct data in the expected format is sent.
5. Components and Interactions:
Component development is not just about code, but also about how they interact with the user:
- Handling interactions and events (touch gestures)
- Reusability and scalability of components
- Integration with UI frameworks (Native Base, React Native Paper, UIKit)
- Forms and validation
- (Optional) Animations and transitions (Reanimated, Lottie)
My comment while developing with React Native: I’ve often encountered problems with touch gestures, particularly on iOS, where elements like nested scrolls inside modals can cause unexpected behavior or interference. These superimpositions can make it challenging to implement smooth touch interactions. Ensuring that gestures work as expected across both iOS and Android requires extra testing and sometimes custom solutions.
6. Integrations with External Platforms
An app rarely works alone; it almost always needs to be integrated with external services:
- Platform-specific integrations (iOS and Android SDKs)
- Third-party APIs (Maps, payments, camera, notifications)
- External platforms & services:
- Firebase (Auth, Firestore, Push Notifications)
- Payment gateways (Apple Pay, Google Pay, Stripe)
- Deep linking and universal links
7. User Experience and Error Handling
Details matter when it comes to UX:
- Confirmation modals (to delete, update, or cancel actions)
- Warnings before leaving without saving changes
- Accessibility and internationalization with i18n
- Caching strategies to improve performance
8. Error Handling and Logging
No matter how well you code, errors will occur:
- Error and exception handling
- Reporting mobile-specific crashes (Firebase Crashlytics)
9. Notification System
Notifications are key to maintaining engagement:
- Push or pull strategies (FCM, APNs)
- In-app notifications
If you're just starting with mobile app development, these are just some of the challenges you'll encounter. Don’t underestimate details like authentication, adaptive design, and performance. React Native is a great tool for faster development, but it also has its own pitfalls.
After years in this field, I can tell you that there will always be unforeseen issues, but by planning well from the start, you can save yourself a lot of headaches. Have you ever had to estimate a mobile project? Share your experience in the comments! 😊📱
Top comments (0)