In the almost-month since I have seen you last, I have done something either incredibly inspired, self-indulgent, or both.
I threw out everything — everything — related to my thesis and completely started over, twelve days before the deadline.
This is the story of why I made that decision, and an introduction to the app and book I ultimately ended up writing for my senior thesis.
I fucked up, badly
A few days after I wrote about completely re-writing my thesis, I had twenty or so pages done. It seemed like I was making good progress, but I had run out of steam, and all I’d really written about was how I planned to make this iOS app that was a Tinder for clothes. I had no technical content in my writing because my actual prototype was hacked together from tutorials, Cocoapods, and random snippets of code I’d found from Stack Overflow. I barely understood “my” own code, and I was at a total loss as to how I was even supposed to approach it.
I value clarity, understanding, and organization above all else when it comes to software development. Nothing irks me more than hacky code projects where the programmers don’t even know what’s going on, and I don’t give a fuck if it “works like it’s supposed to”. Houses built on shitty foundations don’t last, no matter how pretty they appear to be.
Sadly, this time around, my own project had become a hacky thing, and no amount of good thesis-writing could save it. I literally felt the dissonance as I went through my codebase, where I had blindly copied and pasted so much crap that I had no idea what some things in there even did.
Therein lay the problem. In a moment of self-assured cockiness, I had picked a project that was far more complex than I’d originally thought. The original version of Catch included views with complex animations, networking, a completely external backend, and a lot of weird logic regarding the matching of clothes.
I, a fairly new iOS developer, was not prepared to take on those challenges on my own. Sure, I could have figured at least some of it out, but not with the deadline fast approaching. Since the only requirements for my thesis were that I have an app and have a written portion describing the process of making that app, I probably could’ve turned in my twenty pages and my shitty codebase, but I made a promise to myself long ago that any project that I attached my name to would be Great Work (or at least Great Effort). Turning in Catch in that state would have been breaking my promise to the extreme.
So, with twelve days left until the deadline, I decided to pivot — which is a fancy startup code word for “scrap absolutely everything yet again and start over, from scratch, with a completely new idea.”
In which I build Catch 2.0, a pocket-sized closet
The new version of Catch was to be as simple as possible — I’m talking baby-iOS-dev simple, so that I could have maximum control when shit started to happen. Bugs pop up everywhere at the least opportune moments, even in the tiniest projects. If I only had twelve days to do this project, I had to be confident that I could deliver.
I thought about the multiple virtual closet programs I had made over the course of my computer science career, and decided to make another version for iOS — with a twist. Catch 2.0 would be a place for people to upload their clothing items and outfits, and it would also tell them the last time those items had been worn.
This is how it works:
Once you open Catch, you’ll immediately see a list of the items you currently have stored in the app.
Tap the Edit button or swipe left to delete an item.
Once you hit Delete, Catch will prompt you and make sure you really want to delete your item:
Moving items around
Move an item around in the list by pressing down on the hamburger icon at the far right and dragging it where you want it to go.
Tap the Add button to add an item to Catch.
Upload a photo for the item by tapping Change Photo. You can either take a photo with your device’s camera, or choose an existing one from your Photo Library.
Once you hit Save, the app will prompt you and make sure you really want to save:
Viewing and editing existing item
Tap an item in the list to see and edit its details.
Tap on the text field next to Name: to change the item’s name.
Tap on “Update Date Last Worn” to update the date and time to the current date and time.
Tap on “Change Photo” to change the photo.
That’s it — Catch’s user experience is designed to be light and simple, not tedious and overwhelming. Users can snap or upload a single picture, quickly type in a name, and be on their way.
The actual development took the full weekend — Friday to Sunday — to go from blank project to finished app. I was a little disappointed because I thought I could get it done in two days, hackathon-style, but Catch took a bit longer because it was coded in the comfort of my own room, where there was nobody at hand to help with my technical issues. Also, I shamelessly rabbit-holed down every technical rabbit hole I could possibly rabbit hole down, which is a privilege I can only take with one-person projects such as these.
Team programmatic views all the way
Although there’s a drag-and-drop Interface Builder that many iOS developers use to create their apps’ user interfaces, I prefer building everything programmatically because it’s more precise, accurate, and reproducible (it’s hard to copy and paste graphical elements and get all of their positions just right, but easy to do so through code). Plus — and I don’t know if it’s just my brain that works this way — I know how views in iOS work, and can “see” user interfaces a lot better when I look at them in code.
A pink “Press Me” button created graphically in Interface Builder …
… and the same button created in code.
I’ve gotten into some pretty heated debates with other developers as to why I vastly prefer the programmatic approach, and I do understand that I’m in the minority … which made development a bit slower when I got stuck and had to look for answers on the Internet. There exist many places a developer can get help online, but the majority of code examples that one finds tends to not be programmatic. I actually ended up spending more time digging through old threads in help forums, reading documentation, taking careful notes, and figuring out how the fuck it all translated to my own app than actually coding.
And there’s tons of little details. For example, we all take being able to scroll on our screens for granted, but that’s not a default with certain types of views, so the scroll has to be implemented separately. And then you need a separate thing in your code to interpret the fact that your finger has touched upon the screen, and the whole codebase has to be organized in an easy-to-read way. Even the simplest app has a shit-ton going on behind the scenes.
A book is written
When I set out to do the actual writing part of my thesis, I didn’t want to just talk about the challenge of finding up-to-date programmatic examples on the Internet and how much time it took me to distill that knowledge into stuff I could actually use. I wanted to make my notes and newfound technical knowledge a part of the thesis itself.
I believe in paying it forward; that is, using all the resources available to you to further along your own personal goals, and then turning everything you learned on that journey into resources that help others. I figured that, if it had taken me a long time to find helpful resources regarding programmatic iOS development, others were probably having an equally hard time. Most of the guides I read were written by people who had struggled before me. Without some of them, Catch would not have been made. So I spent a few days designing and writing up three tutorials on the parts of programmatic development that had tripped me up the most, and turned them into an 87-page book called Paradigms of iOS Applications.
Paradigms walks a user through setting up an app without using the default Interface Builder, messing around with the application lifecycle, and creating functional views on their own. Every single line of code is explained (I had a great time deep diving into tons of documentation to write it!). It’s the guide I wish I had when I started iOS development, and something I think will really help other iOS devs.
A thesis is born, but it’s just the beginning
In addition to the 87 pages that made up Paradigms, I added another 50 describing my engineering process (there was no page limit, and I love long-form writing, as you should know by now), and handed that baby in literally on the 5 PM deadline. I plan on releasing Catch to the App Store and publishing Paradigms as a series/ebook on Sweetness and Light after some refinement — both the app and the book are rough prototypes right now, and I have a lot of things I’d like to add to them before sending them off into the world.
I do not regret my decision in the slightest; between “turning in a steaming heap of shit” and “working your tail off for the next twelve days to create something good”, the choice was easy. Of course, not every thesis student can pivot this late in the game — I’m very fortunate to have an understanding thesis sponsor — and I doubt that I can start over from scratch whenever I dislike a project in the “real world.”
But that’s another reason why I did it, too. When will I get a chance to do this again in a professional or semi-professional context? When will I have the privilege/opportunity to say “fuck it”, throw my hands in the air, and start something completely new that I actually like?
Thank you to my amazing thesis sponsor for not shitting a brick when I told him that I was making a pivot, to my friends for being understanding at my complete lack of social availability during the last twelve busy days, and to you, for putting up with my long absence from blogging.