The main problem of any expense tracker is input speed. A user abandons the app if logging a transaction requires more than two taps. Everything else — analytics, limits, export — is secondary. Our team has 5+ years of experience in financial app development and has delivered over 50 mobile projects. We have developed an approach: replacing the system keyboard with a custom numpad reduces input time by 200–300 ms. With 50 entries per day, this saves 5–7 minutes per month. Users report saving up to $200 per month with consistent use.
Why input speed is the key metric
User retention directly depends on how quickly they can log an expense. We ensure that logging a transaction takes no more than two seconds. On iOS, we use a Home Screen widget via WidgetKit with AppIntent — it opens the input sheet without fully launching the app. A custom Shortcut allows voice input through Siri. Live Activity in Dynamic Island shows the daily balance without unlocking the phone. On Android, a Tile in Quick Settings via TileService: one swipe and tap, the app doesn't open fully. A floating widget via WindowManager is a controversial solution but offers maximum speed. We employ asynchronous data processing and lazy loading to maintain sub-second response times under concurrent user operations.
| Platform | Quick input method | Taps | Latency |
|---|---|---|---|
| iOS | WidgetKit + Shortcut | 2 | 100 ms |
| Android | TileService + Widget | 2 | 150 ms |
A custom numpad keyboard for the amount replaces the system keyboard, which adds 200–300 ms of delay. Auto-focus on the amount field, default category as 'last used', geolocation-based suggestion (coffee shop nearby → 'Food' category). The custom numpad is 3 times faster than the system keyboard.
Designing categories and budget limits
Categories with icons and colors, nesting at most one level (subcategories). Set budget limits per category — stored as a separate BudgetLimit entity with categoryId, amount, month. When 80% of the limit is exceeded, a local notification fires. Progress calculation — only when the screen is opened plus a background recalculation once per hour.
Analytics and export: key features
Charts: pie chart by category for a period, bar chart by day. On Flutter — fl_chart, on iOS natively — Swift Charts. We don't drag in heavy libraries for two simple charts. Support for CSV and PDF export. CSV is trivial. PDF via PDFKit (iOS) or PdfDocument (Android) — we render an expense table with totals. The user can select a period and category set before export.
How to ensure cross-device synchronization?
If sync is needed, we use Firebase (Realtime Database or Firestore) with merge logic. The main pitfall: conflicts when writing simultaneously from two devices. Strategy: last-write-wins by updatedAt timestamp for simple cases, or CRDT for complex ones. For most trackers, last-write-wins is sufficient because the probability of conflict is low.
Technical details of synchronization
For CRDT implementation, we use the LWW-Register (Last-Writer-Wins Register) algorithm based on vector clocks. This guarantees consistency without locks. We apply the ready-made Automerge library for native platforms.During development, we follow App Store Review Guidelines 5.1.1 for data protection.
Deliverables
- Architecture documentation and data model
- Source code repository (Git)
- Configured CI/CD (GitHub Actions, Fastlane)
- Publication to App Store and Google Play
- Access to test builds (TestFlight, Firebase App Distribution)
- Training for the client's team (2–3 hour webinar)
- 30-day warranty on bug fixes after release
Process
- Analytics and requirements gathering — clarify scenarios, platforms, need for sync, import from statements.
- Design — data model, navigation prototypes, UX validation for quick input.
- Implementation — backend (if needed), client side, widget integration, push notifications.
- Testing — functional, load (up to 10,000 records), testing on real devices.
- Deployment — store publication, monitoring setup (Crashlytics, Google Analytics).
Performance testing
We conduct load testing with 10,000 records in the database. Check that the expense list screen responds within 200 ms. For widgets and Tile, we test on devices with iOS 16+ and Android 12+.
Time estimates and cost
| Version | Duration | Cost |
|---|---|---|
| Basic tracker | 3–5 weeks | From $4,000 |
| With widgets and sync | 7–10 weeks | From $8,000 |
Cost is calculated individually. Contact us for an engineer consultation before starting work. Order the development of an expense tracker — get a prototype in 2 weeks.







