Released my first app today - my experience
Tags: android, kotlin
Published: 2019-10-21 11:58:41

## Table of Contents
* [Preface](#Preface)
* [Introduction](#intro)
* [Google Sheets == perfect for an app right?](#sheets)
* [The progression](#progression)
* [The realization](#realization)
* [Back to Java](#java)
* [The process](#process)
* [I'm not saying I'm good at this](#imnotgood)
* [Rebase? Merge? Push? Pull? Ebb? Flow?](#gitgud)
* [Don't accidentally the whole API key](#api)
* [Some notes on Google Play Console and Privacy Policies](#playprivacy)


# Preface <a name="Preface">
Off the bat, i'll say the app is for a Bible reading system, so if you're interested, there's a [link here and at the bottom](https://play.google.com/store/apps/details?id=com.theunquenchedservant.granthornersbiblereadingsystem). If that doesn't interest you, the rest has little to do with the content of the app. 

# Introduction <a name="intro">
A year ago, I started a Bible reading system where you read 10 chapters a day, one from each list. The idea is that you bookmark or put tabs on each chapter, and move it along one when you finish that chapter. Problem was, at the time, I was using a digital Bible. 

# Google Sheets == perfect for an app right? <a name="sheets">
So I found a google sheet that someone made with all the books and chapters of the Bible. I started to move everything by hand but asked myself "I wonder if I can script this" (the answer is always yes, but also "do you want to spend the time?"). So I spent probably more time scripting the sheet to automatically move everything into a "column" three columns wide, in their respective list, as well as add the book and name and chapter number together. 

# The progression <a name="progression">
From there, it was constant "I wonder if I can.."'s. For the first few days, I was manually marking each list as done (changing the background color, each list had a different color as well). I found a way to make it so when a checkbox was checked, it marked that list as done, and then unmarked the checkbox. I have ADD, so I'd forget if I already marked a list, and then had to set it up so that it wouldn't let me mark the list again. Each day at midnight it would reset that hold so I could mark them again the next morning. After that, I made it so that I could get my list texted to me every morning. Finally, I had it so I could text back when I finished the reading, and it would take care of everything. 

# The realization <a name="realization">
My sheet at this point was about 6 columns wide, 1 row. And it only held the information needed to send texts and keep track of the lists. 

I knew I wanted to share this with others. I was getting interest from friends and pastors I would talk to. Problem is that the full set up involved not only copying the sheet, but then telling people to go in and add three triggers, as well as add a filter on their gmail to make the script parse correctly. Not really ideal. 

# Back to Java <a name="java">
2 months ago(almost a year later), after spending a lot of time in javascript and python (other side project) I picked back up Java, and said "how hard would it be to make an app?" It's not hard. If you're thinking about it, do it. It's time consuming, not hard.

I had a rough working version in about 2 days. And from start to release it took me 2 months. 2 months of neglecting responsibilities, but 2 months. 


# The process <a name="process">
There is a certain point that I got to where I knew it was best to release even if I wanted to add more. In fact, in-between 2 weeks ago when I intended to release (more on that in a second) and the version available now, I made about 10 changes. Not drastic, logic oriented changes, just switching ui stuff around, implementing better practices, etc. If I waited to release until I felt it was finished, I would never release. In fact, i'm currently waiting for information on how to access a different translation of the Bible from the publisher, and that will be most likely the first not-bug-fixing update after release. 

I'm also constantly learning about code practices that make things better. For instance, after having almost everything done, I switched to Kotlin. Having never learned it, I said "eh, why not" and i mean, there's a button in Android Studio to switch all the code, so that should just work. (it didn't. It took me 2 days to fix everything). Now, I feel more comfortable in Kotlin. Although it is a pain since most older SO posts are about java implementations of concepts. 

Another thing I implemented was livedata (to be fair, it was there right off the bat, and because I didn't want to take the time to learn about it, I deleted the viewmodels. Don't be like me, livedata is easy to learn). 

# I'm not saying I'm good at this <a name="imnotgood">
I'm sure, If I posted my code (i'd love to, more on that in a second) there'd be countless things that would horrify you (spoiler/teaser: I don't comment. Or rather, I haven't yet), and things that I should be doing but im not. And in time, i'm sure i'll get it. But it works, it's out. And dear God I hope it works. 

# Rebase? Merge? Push? Pull? Ebb? Flow? <a name="gitgud">
The hardest part, honestly, was git/github. 
1: Remembering to commit is tough.
2: I never understood what the difference was between rebase/merge/pull/etc. And so to me they were all the same (I still don't understand the difference, I just know there DEFINITELY is one). 
So at one point, after the switch to Kotlin, I decided to push that to github. Figuring "well whatever I push will overwrite what's on github", and I should have known i had to pull first. so I'm trying to figure this out, and it's changing almsot all of my code. This is a problem that plagued me until a week ago, when finally I got it to just accept my code as final authority.

# Don't accidentally the whole API key (or part of it) <a name="api">
The next thing, however, that I need to learn is how to delete a commit from github. Because I accidentally put up an API key. Hence, can't share that at the moment. 

# Some notes on Google Play Console and Privacy Policies <a name="playprivacy">
I meant to release 2 weeks ago. I had submitted and Google approved my release APK. it said "All updates are live". Except, when I went to the play store, there wasn't an install button. Figured I had to wait or sing a song to teh magic Google fairy or something. But I was also constantly submitting updates, so I also figured it needed time without me submitting. 

Finally, yesterday, I took a look. I was set to distribute the release in 0 countries. Facepalmed, and set that to all of them. 

Also, because I have set up firebase/store, I needed a privacy policy that was legit (prior, I just said that "we don't sell your data because we don't have your data) (The app didn't connect to the internet) (this was the alpha version). So I pay $9 a month for a company to make/host my policies. 

[The app is out now available here](https://play.google.com/store/apps/details?id=com.theunquenchedservant.granthornersbiblereadingsystem)