The Wolf Golf Scorecard app for Android, by Rod Biresch of Chariot Solutions, is a record-keeping application for a classic four-player golf game. The full rules of the game can be found here. In short, as players move from hole to hole, the tee order rotates, and the players have the opportunity to form dynamic teams. Points are then awarded based on how well each team or sole player performs on the hole, and the player(s) with the highest points at the end of the game wins. Optionally, cold hard currency changes hands accordingly, and the players head off to the clubhouse for putting pointers and lively banter. This app helps players to configure parameters for each game, generate new dynamic team arrangements for each hole, collect scores, calculate point values appropriately and celebrates the winner(s) of the game.
The application architecture is similarly straightforward, displaying a set of
Activities allowing the user to perform direct CRUD operations on a normalized data model containing the sorts of objects one would expect:
Player, etc. Industry-standard design patterns (MVVM, MVC, MVP) were not necessary for this application and would only add complexity, increasing longer-term maintenance and development costs.
Fairly straightforward data model: Games have Players, Holes, and a Tee Order
Recently, Chariot had the opportunity to redesign and refresh the look-and-feel and usability of the application (first released in 2016) through a complete design deep-dive process. A full discussion between Head of User Experience Pete Fleming and Product Owner Rod Biresch regarding this effort is available here, and is well-worth a listen. Before-and-after screens should provide context for this interview:
Among the most significant decisions that went into the implementation of this application was the database selection. Any MVP implementation must meet the following requirements:
- local OR cloud storage option with minimal code changes
- 1 transaction / second throughput (low, certainly)
- CRUD operations
Additionally, given the possibility of a future iOS implementation, the following requirements were also desirable:
- cross-platform cloud-based synchronization (iOS, Android)
- support for user authentication operations
Just as important as what was required of this database is what was not required, or would never be required, and would only serve to increase complexity and maintenance costs:
- No real need for scalability, complex transactions, social network operations (Riak), or large data blobs
While a solid solution for many apps, the default solution for Android (the Android Jetpack Room Persistence Library) does not meet several of the desired requirements, particularly for future expansion. It is an excellent solution for on-device data storage and simple queries, but any networking or syncing to a cloud-based backend would require a custom implementation.
After much heated deliberation, Realm was chosen as the database solution. Realm acts as a sophisticated API that can switch between either on-device storage or synchronization to a MongoDB cloud-based backend through simple configuration changes (and minimal code tweaks). It also provides multiplatform support, allowing for future native implementation of the app on iOS. All in all, a solid option.
Realm.init(this) val config = RealmConfiguration.Builder() .name("wolf.realm") .schemaVersion(6) .deleteRealmIfMigrationNeeded() .build() Realm.setDefaultConfiguration(config)
Realm configuration is a breeze for on-device operation
Over the course of several weeks, a small team at Chariot was able to greatly enhance the Wolf Golf Scorecard app user experience through clean design, solid implementation, and an attention to detail by the product owner. The completed software should continue to provide hours of enjoyment for duffers and aces alike out on the links for many years to come.
Why not give it a try on Google Play? 🐺⛳📝