This is the story of a tireless mobile developer meticulously working on a long overdue update to one of his beloved apps, PoopLog for Android.
If you would rather just get the update:
Back in 2010, I was on short-term disability leave from my day job, and my daily stomach pains were getting progressively worse. My doctor suggested that I track my bowel movements for frequency and consistency (using the Bristol Stool Scale), and the programmer in me decided to build a simple tracking app. At the time, I remember being excited about the introduction of a new and open mobile operating system by Google, and recognized Android’s potential to be a major force. My first release of PoopLog to the Android Market (now the Google Play Store) came after a few weeks of quick development on my HTC Dream, the very first commercially available Android phone.
PoopLog for Android was born March 20, 2010.
For the next two years after my initial release, I followed up with a few updates; adding the option to attach a photo and a pain rating, and overhauling the UI to something more akin to Android 2.2 Froyo styled apps. Previous to this latest update, the last version, 2.02, was published on April 29, 2012. Since then, I’ve experimented and released a few more Android apps, had a few different startup ideas, and even entered into a somewhat profitable venture with some friends.
It wasn’t until just over 3 years ago that I decided to jump back into Android development and update PoopLog for my users.
You read that right.. I’ve been working on this update for over 3 years. Realistically, I only get about a half-dozen hours every week to code, and even less time to get into a zen-like coding state. One of the tricks I used to keep myself on task with PoopLog was to spend at least 15 minutes, every single day, reviewing or researching something related to the app; This helped to keep the project fresh in my mind, allowing me to iterate through thoughts even when I wasn’t actively coding. Doing this daily was not easy, and I lapsed and broke the chain several times citing code fatigue, but luckily I had another motivational trigger that kept me coming back to my IDE: The notification of a new email from one of my fantastic users.
I’ve received hundreds of emails from my PoopLog users over the years, some offering suggestions for future versions, and others just to say thanks! One email in particular was especially thoughtful, and I think of it whenever I find it hard to sit back down and write code after a tiring shift at my day job. This user’s email, among many others, inspire me to keep on coding. I’m sure most developers feel the same, but for me, every single line of code I write is for my users, and I want them to have the best experience possible, with up-to-date design patterns and an expanding array of features and options.
In January 2012, Google introduced Holo, a new design style to help developers create a cohesive look across all Android apps, rather than the mishmash of customized widgets that was starting to become the norm. This effort leads to a better user experience as users no longer have to guess, or ‘hunt-and-peck’ for their desired action, and instead empowers users to reach for familiar targets in a recognizable layout with confidence. #HOLOYOLO excited me as a passionate supporter of Android and Android development; it was the main reason I started sketching new mock-ups of what a redesigned PoopLog might look like, including support for tablets and large screens.
In the early days of the redesign, I realized I didn’t have large enough image assets for the Poop Type selector, and phone resolutions were skyrocketing into HD territory, so I knew I had to come up with a solution. Now, I’m a strong advocate for the ‘If you want it done right, do it yourself’ mentality, but I knew that this project needed someone with a little more experience.. so I did what any resourceful developer does: I went to fiverr.com, found one of the better graphic design artists on there, and commissioned her for $40 to recreate all of the poop types (8 types x $5). This is the only aspect of the redesign and development that I didn’t do myself, and I am incredibly happy with the results. Thank you idioticgiraffe!
Day In, Day Out
In addition to the layout, look and redesign, I wanted to add many of the features requested by my users, so I started a simple TODO list. This TODO list became a massive, living Google Docs document that I placed front-and-center on my bookmarks toolbar, and I used it as a running checklist for everything.. new feature sets, activities/fragments to include, pseudocode for working through complex interactions, known code issues to grep later, a list of people and libraries to credit on release.. essentially anything and everything that I needed to remember, do, finish, or think about.
This type of TODO list worked like a charm for me when trying to organize my thoughts, and to keep myself motivated. I kept it open as a locked tab on first my browser window, and having it live on Google’s servers meant I could access it from anywhere, at anytime I had a random thought, or idea, or breakthrough. I’ve tried trello, wunderlist, and others.. but nothing I’ve found allows me the flexibility of a flat document with the ability to style rich-text to indicate anything I need (with strikethroughs, styles and highlights in different colours for important bits, etc..). One downside to this flat-file TODO list is the inability to associate deadlines/reminders to tasks.. maybe that’s why this update took me 3 years! ;)
While this massive TODO doc is great for an overview of the ongoing project, I also wrote “micro todos” inline with my code at the end of every coding session reminding myself where/what I was working on and what was immediately needed.. this allowed me to grok my code much easier after laying dormant for days at a time. I also never closed my IDE, leaving it open at the top of my taskbar, and I even changed the IDE display icon to the PoopLog icon, motivating me further.
There are plenty of traps I’ve fallen victim to from not releasing early and often, a mantra I try and live by. A very important facet of mobile development that I underestimated is the speed at which the the blazingly fast-paced mobile/Android development landscape moves. Since starting this update 3 years ago, I’ve suffered through an entire IDE change (from Eclipse to Android Studio), a change to multiple libraries, including one of the major libraries building the foundation of my app (from ActionBarSherlock to the Android Support Libraries), and a refinement in visual style which still isn’t complete (from HOLO to Material Design). Each of these changes required numerous hours of research and understanding before implementing, and resulted in several black triangles before being able to successfully compile my app, time and time again.
PoopLog, at it’s core, is just a simple database stored on your phone. You have the ability to create, edit or delete an entry, and you have the ability to view the entries, either in some type of list, or individually. On the surface, it’s a very simple app with limited scope, but this also allows for a lot of playful experimentation with how user data is entered and displayed. While this is a good thing, it can also be a trap if the experimentation isn’t managed effectively. Most recently, I toyed with the idea of throwing in a viewpager for the details screen (allowing the user to swipe left-and-right to see adjacent entries), and this idea took me nearly 4 weeks of development to get right. In the end, I ended up removing the pager from this update after testing it on budget devices and finding it’s performance to be subpar. I could have spent a few more weeks optimizing, but in the end, 6–8 weeks, for a feature that wasn’t on my initial roadmap to begin with is, to me, the epitome of feature creep. If I could do it again, I would have released the moment I had a build running with an actionbar and tablet support.
In addition to the daily development traps of a long project timeline, a lot happened in my life outside of the app development that drained my energy and made it harder to continuously come back to code every day. Early on, Something in the Mail still needed some daily love and attention, but eventually this project wound down. Two summers ago, my main development laptop had to be replaced after surviving on it’s last legs for far too long; and during that same summer, I was laid off from my previous employer after they downsized, so I took a position working overnight technical support, a decision I regret since I became a useless zombie during my awake hours. Most recently, I’ve been suffering through what I initially thought was carpal tunnel, but it’s now turning out to be an issue with my cervical spine/nervous system thanks to recent MRIs, and I just found out I’ll be going in for spinal surgery within the next month to have a couple of screws inserted and vertebrae fused. Interestingly enough, during these 3 years while life was happening away from the keyboard, I actually took solace in knowing that my code was always sitting there, waiting for me; A positive constant throughout the tribulations of daily life.
Oh, I almost forgot.. I just shattered my main development device which slowed down all of my final testing before release.. When it rains, it pours.
In addition to overhauling and refactoring code, I also worked on updating the graphics (logo, icons, color scheme, hero images, etc..). Now, call me old-school, but I still use my trusty copy of JASC Paint Shop Pro 7.04 from 2001 for anything simple, but for some of the more advanced and prettier designs, I forced myself to take the time to learn GIMP. I also registered a new domain and designed and developed an entirely new website to showcase the app/update (www.pooplog.xyz). Being able to work for only a few hours every week, these components take a lot of time to get just right, especially when learning new tools. Also, graphics have a tendency to become stale in my mind, especially after long periods without change, which prompts me to continuously work on and try new designs and ideas, taking more time away from actual development.
I learned my lesson. While I have plenty of features on my roadmap (including logging for multiple users (children, pets, etc..), a map view of all of your poops in the city (or world), custom tags, etc..), I intend to release early and release often going forward. This update took way too long to ship, and I appreciate every one of my users for waiting patiently. I hope it helps. ❤