The problem
Why it needed building
Goals.com is a CRM for goal tracking and incentive management. Sales teams need to see their targets and incentives in real time, on the move. The app works with a lot of data, so slow screens and network waits directly cost the people using it time.
My role
What I owned
- Built the native Android app in Kotlin and Jetpack Compose
- MVVM architecture with Coroutines and Flow
- Networking and caching with Retrofit, OkHttp and Room
- Push notifications with Firebase Cloud Messaging
The approach
Key decisions
- 1
Native Android with Compose and MVVM
The app is built natively in Kotlin with Jetpack Compose for the UI and MVVM to keep screens separate from business logic, giving a fast, modern Android experience.
- 2
Faster networking with caching
Retrofit and OkHttp handle the API, with response caching and Room as a local store. Screens show data immediately from the cache and refresh in the background.
- 3
Async work with Coroutines and Flow
Long-running work runs in Kotlin Coroutines, and Flow streams updates to the UI, so the app stays responsive while data loads.
- 4
Notifications that bring people back
Firebase Cloud Messaging sends timely updates about goals and incentives, and image-loading optimisations keep list screens smooth.
Challenges
The hard parts
Large data on mobile
CRM data grows quickly. Caching, background loading and careful image handling kept screens fast as the data grew.
Results
What it achieved
- 25% less processing time through optimised networking and async work
- 15% higher engagement from FCM notifications
- 30% increase in sales