Growing in the Black Hills of South Dakota, I designed and developed websites for local businesses in the tourism industry. With a strong interest in computers I continued that interest by getting a dual major in Computer Science and Psychology at Rensselaer in upstate New York as well as a master's degree in Human Computer Interaction. I have since worked professionally as UX / Product Designer but have maintained my interest in development through various hobbies over the years.
In 2009 I began designing and developing mobile apps, primarily for fun, but as a potential income source. While the income never amounted to much and I don't have time these days to continue work on them, the apps were great fun to work on and a few continue to be available for download today.
Stacks, a flashcard application was my first application. The design was very much of the time with a skeuomorphic shelf and lights. The application featured packs of flashcards that were available for purchase and covered topics ranging from jokes and trivia to SAT vocabulary. To create the content, I hired people using elance.com for the most part, but also experimented with sites like Amazon Mechanical Turk, but with very poor results. At the time of launching this app, In-App-Purchase was a completely new API and wasn't public yet. It was a formidable challenge to navigate the iOS documentation and piece together the code needed to make the appropriate calls to Apple's servers. In the end it worked and launched alongside iOS 3.
Along the lines of simple app ideas that would be easy to make, I created Mini Golf Scorecards. While at the time there were few scorecard apps, there soon was a flood of competition. A few highlights of the app included some clever shortcuts such as double-tapping on an empty score entry to set it to par. The Plus and Minus buttons allowed a very straightforward score entry without opening a keypad. Additionally, if you played the same course twice, it would carry over all relevant data for your next game such as the title, hole count, and par for each hole.
One of the apps I put the most effort into was an app for keeping track of scores when playing disc golf. With many lessons learned from Mini Golf Scorecards, I built out a proper database back-end along with an architecture to capture a tremendous amount of detail about disc golf play. With many releases over the years, feedback was incorporated from players and the app was even utilized among the professional disc golf circuit. The app could track GPS locations of Tee and Pin locations, as well as each throw which allowed detailed distance stats to be captured. Users could specify the disc they used, the flight pattern and more. Lastly, the app would generate nice visual scorecards that could be shared after the game.
In a throwback to playing travel bingo on car trips growing up, I desired to create an app. This app was very simple in concept to build. I created over 150 tiles and grouped them into collections that could be purchased with in-app-purchase. The collections included city, neighborhood, highway, country, and more. While there wasn't anything particularly challenging about this app, it was the first app I created to work on both iPhone and iPad. Interestingly, Travel Bingo For Kids has provided the most income of all the apps I've made.
Coming back from a family holiday trip in which a lot of the game Bananagrams was played, I really wanted to continue to play on my phone. Unfortunately banana grams wasn't available as an app so I decided to make my own. Inspired by Bananagrams, I created a one-player version called Ducky Letters.
The development of this app was one of the most challenging to date as I utilized many of the modern iOS capabilities including Sprite Kit, and needed to be able to drag and drop tiles around the game board. While a challenge, it worked tremendously well. Beyond the new APIs, I recall the most challenging aspect was to validate that all connected tiles were words or not, and if not, mark the specific tiles that were invalid. To validate the words, I build a recursive algorithm that would check each string of letters, including sub-strings, against the tournament scrabble word list. Through some optimizations I ended up with an extremely efficient design that was fast and could be run every time a tile dropped on the board.
Capitalizing on the joy received from playing the game 2048, I decided to create my own variation. This app was built and submitted to the app store within 4 weeks. My particular twist on the 2048 game was the inclusion of a wildcard tile with a duck on it. Whatever tile the duck was swiped into, it would double in value. As the overall score increased, fewer ducks appeared making it ever more challenging. With this app, I'm particularly proud of the micro-interactions and effects that I added. The tiles have a lively feel as you swipe around, the score animates, and with each increase in level, confetti appears making it a joy to play.
My most ambitious app to date is Peak Active and while I got really close to launching the app, my first child was born and I couldn't spend the time necessary to complete it. Frustrated by the requirement of hitting start at the beginning of an activity and stop at the end, I wanted to be able to simply derive activity from the data available.
Peak Active does just that, in real-time it looks at the activity captured whether from the iPhone or Apple Watch and determines if you are active and what kind of activity it is. It reports on the activity and you can choose to annotate it or not, but you never have to remember to interact with the app. Additionally, it provides a myriad of motivational aspects which make the app freakishly addictive through tracking statistics and displaying relevant celebrations when appropriate.
While there were many challenges with the app such as bringing together data from multiple sources, building out the calendar view, etc. The biggest challenge was in assigning activity to the appropriate data. This aspect becomes problematic whenever the time changes such as Daylight Savings Time, or the user flies to a new time-zone. Unfortunately I was unable to resolve this issue, but the challenge still remains.