Reflections on reference app development

As a developer you find yourself constantly trying keep up with the latest frameworks, patterns, and trends. To keep up to date with trends, developers create smaller side projects to experiment, learn, & reference later. Over the years, I've accumulated a number of such reference projects for both Android & iOS. These projects were kept in private Github repositories away from public preview as it was my crowned toolbox. It wasn't until 2020 did the thought of publishing these projects publicly come to mind for the following observations:

  • Projects with the latest patterns become out of date when published.
  • There's a ton of reference apps out there, who's to say mine is any better?
  • It shows my work. See this book.
  • Others may benefit from it.
  • Others may even help me out with it.

Last point got my eyes to glimmer with a new great ambition in sight: A crowd sourced reference app where devs go to learn latest development practices for iOS & Android.

To accomplish this I decided to be a bit more ambitious for the reference project: not just have a skeleton of a project, but a working app within it, as well as debug friendly developer tools such as a design system catalog viewer, theming viewer, date utilities, and more. The smallest of apps I could think of that requires networking, and possibly db for caching, was non-other than a weather app. I checked out existing apps out there, and began to draft out a prototype on paper:

Once the design was complete, I had go to the drawing board to determine what patterns, and technologies I'd use for the different platforms. The list of topics was quite long:

Dependency injection, app architecture, JSON parsing, logging, navigation, memory leak tracing, networking, view framework, theming, modules approach, CI/CD, testing, coroutines/combine vs rx, etc.

For each of the above, I quickly realized how involved, subjective, & research heavy it'd be to get the "best" practice down. For example for theming, I came across this great talk by two Googlers: Nick Butcher & Chris Banes called "Developing Themes with Style". I thought I had a good grip on theming, yet it blew my mind. It contained far too many gems that I was unaware of, and needed rewatching a few times to get their suggested practices down. Similar experiences for different topics kept coming up. After spending a number of nights after work, I came to the realization that making a "Grade A Application" even in the smallest of scales is no easy feat.

After developing about 70-80% of both the Android & iOS reference apps I burnt out. With hopes in selling the project's potential to candidate contributors, I published the app in its incomplete form. Its potential excited many devs, however no one managed to come through a commit's worth of help. I was initially let down. But like many open source developers come to realize, it's volunteer work: work throughput that is inconsistent at best & none existent on average.

It's now almost a year later since I started initiative. Today, I shared with a friend of mine the 2020 iOS reference app. I asked if he's interested in finishing it up since he's a rising junior dev. He responded by asking "What's the point of finishing the app to where it's feature complete? It's not making it to App stores, and you covered most of what you want to reference." I found myself agreeing and realizing the apps are indeed "Done" for reference purposes of last year. We're now in 2021, and I'm in a familiar situation: needing to learn more recent Android developments for work. I felt relieved to sunset the 2020 projects with a sense of accomplishment instead of failure. The feeling was then followed with excitment to start the 2021 version of Android next.

What are your experiences with reference apps? Email me & let me know.