One of the services I want to provide more is building custom mobile apps. Mobile devices are nearly ubiquitous and provide and incredible platform on which to build new tools and services. I recently had the opportunity to build an app for a client for the first time.
The client’s needs were really straightforward: a simple time clock app. They wanted a prominent button that would clock them in when pressed, clock them out when pressed again, then submit the clocked in and out times, along with the elapsed time, to a Google Sheet. They wanted some way to track their hours working that didn’t feel like just another task they had to remember. Press a button when they start working. Press it again when they stop. Easy.
This app provided a good opportunity for me to learn some skills that I can carry forward. I had to implement data persistence. If the app went out of focus or even shut down, it had to remember if the user was clocked in and at what time. I used Android’s Shared Preferences to accomplish this.
The other skill that I learned was submitting app data to a Google Sheet. It turns out the easiest way to do this is to use a Google Form and hook into the input boxes. I spent the most time on this feature. Not because it is actually difficult to build, but because when I ran into errors, I failed to go back to my Google Form. Instead, I just parsed through Stack Overflow question after question trying to find out why the data wouldn’t submit. It turns out I had left off a portion of the Form URL. So, I also got a refresher in a classic lesson: check the simple stuff first!
As this is just a one-off app and is not meant for general release, I was able to take a few shortcuts. That is actually a benefit to building apps like this for clients. For example, the key value for the Google Form and the key values for the input boxes are all hard-coded into the app. This sped up the process of development and deployment to the client. If I was developing this same app for a more general release or use-case, I could not assume anything about where the data was going.
I spent 23.40 hours working on this app. At least a quarter of that was because I failed to realize the problem with submitting data to the Sheet was due to the URL being off. This is certainly longer than I would have wanted to spend on an app this simple. Yet, I learned a lot as I built it and subsequent apps will proceed more quickly as a result.
The client is extremely pleased with the app, as it does just what they need.
An improvement I am considering is for the case where the user forgets to clock in or clock out. In that case, the user would have to go to the spreadsheet and fix the data manually. This defeats the entire purpose of the app, which is to provide absolutely minimal friction. The solution I came up with is to create a toggle near the button. When the toggle is switched, hitting the app button doesn’t use the current time. Instead, it prompts the user to manually enter the time they want to either clock in or clock out. Then the app proceeds as normal.
I want to develop more simple, but extremely useful apps. If you have an idea for an app that would make your day easier, please contact me. I’m currently offering a deep discount on this service as I develop my skills.