Abstraction Hell, Planning, and Whatnot
Week four of Code Fellows is dedicated to writing your own app.
But writing your own app doesn’t start in the fourth week, it starts around week two where you have to present your app idea and some sort of wireframe for it. All this is intended to get you started thinking and planning your app.
But planning doesn’t really start until make the position of bits non-random, you start using friction to transfer ink from a pen to paper, or you make select parts of the whiteboard non-white. For various reasons, including the push of working on the apps we were putting together during the day, handbell performances, and the adjustment period needed to go from not having a fixed schedule to having a schedule of 35 hours week, I put off planning. Topping things off, all of this caught up with me in the third week, and I crashed and burned.
I didn’t make a first commit to my app’s repository until the Monday of week four, and that commit only had the boilerplate that Apple provides. I started roughing in a bit of code on Tuesday, but I didn’t start heavy lifting until Wednesday, and since the app is presented on Friday morning, you have to have it mostly done by Thursday evening.
So, I was time constrained. To add to the time constraint, I never intended this app to just be something that I deliver for class. My app fills a huge pain point for me in commuting, and I’ve spent much time thinking about it. I really want this app to be something that makes people’s day just a bit easier. So, I set out with this in mind, and tried to design a flexible, extensible foundation, and avoid technical debt. I thought I did a good job with abstracting the pieces out, making things flexible so that I could support multiple transit agencies, and add new transit agencies with just a configuration file, and I went about my day feverishly writing code.
By Thursday afternoon, I found myself in what I dubbed abstraction hell. I found myself needing to write code that I had no concrete understanding of what needed to be accomplished. Since I hadn’t really done any planning, I found myself lost in my own code, and unable to find spot that I understood to branch out from.
At one point I decided to throw in the towel and just not present all together. However, after some cajoling from an awesome developer who also is my cousin, I showed off the little bit of my app that I had managed to get written by having it output information to the console.
So how do I go forward from here? My app idea is once again on the backburner, but looking through what is needed and a seed planted by my awesome instructor, I’ve decided more abstraction is necessary, instead of less. I think a great little CocoaPod would be one that allows the API calls to be configured based on a configuration file, instead of code, so I’m going to write it.
I’ve got some investigation to do to better understand the tools I’ll be using, but I’m quite sure that the product of this whole exercise will not just be an app, but a portable little Cocoapod, that’ll help out developers in having flexibility with REST APIs out there.