I built an iOS app in 3 weeks and here’s what I learned
As a recent bootcamp grad, I was looking for ways to distinguish myself from the hordes of recent bootcamp grads spilling out of camps like App Academy, Hack Reactor, General Assembly and (now-defunct) Dev Bootcamp. I also felt like my education at App Academy, while good, was limited — I’d learned exclusively how to build websites. But, before I’d enrolled in App Academy, I’d thought building “apps” was all about mobile — I mean, no layperson refers to websites as “apps”, right? But we have tons of “apps” on our phones.
Anyway. Back to it.
After App Academy, you need to send at a minimum 25 job applications a week. This meant that any time I devoted to building my app would compete with sending job apps. I also knew no Swift going into the project, so I’d need to get up to speed. I decided to team up with my cousin, a Computer Science major at the University of Santa Cruz, so that we could tackle the project together.
We decided to build an app which allows college students to discuss hot-button issues on their campus in a safe, non-anonymous, yet also potentially contentious and deep way. We called it “snowflakes” as a little joke.
Three weeks later, we have a pretty functional app. Yes, the styling isn’t gorgeous — yet — but it’s almost fully functional and even includes some functionality we didn’t originally plan on, like a “top news” feed that draws on Google News’ RSS Feed for each school. We hope to deploy to the Apple store in the next weeks.
But — more than the concrete skills I picked up over the past weeks — what I learned from this project is how to work effectively on a small team, how to self-motivate, and how to learn rapidly. Here are my biggest takeaways from building an iOS app in three weeks:
1. Get organized. It was only midway through the project that we decided to create a sort of “Scrum” sheet, but we should have done it much sooner. It was really satisfying to change the color of tasks from red, indicating “not implemented”, to orange, meaning “in progress”, to green (“complete”). It was also a useful place to dump new ideas that I might or might not have time to implement (we used a seperate “wish list” tab in google docs for this).
I consistently surprised myself, in fact, by how much faster I was able to “tick off” these scrum-sheet features than I’d expected I’d be able to. That in itself was motivating, and inspired me to develop features (like the above-mentioned RSS feed) I hadn’t even planned on implementing.
2. Be willing to change gears rapidly if the project calls for it. We started off using XCode’s “storyboard” feature to create our app, in which you can literally drag and drop components onto a canvas and then hook them into your code via an outlet. It sounds nice, but it leads to disastrous git merge conflicts. After a couple days of trying to brute force this into working, we took a step back and switched gears entirely.
Yes, we started over completely from scratch. But it was worth it, because with our new methodology — writing all code purely programmatically — we were able to be twice as productive in the end, since we were able to merge easily and thus divide work evenly.
3. Find the technology you need. This may seem obvious, but it wasn’t for us. We had no experience with Swift, as I mentioned, and, while I had experience with Rails, I had no idea how to hook up a Rails server to a Swift app. And, while it would probably be a good skill to learn, and one I am interested in learning, handling both the server and client side of an iOS app felt like a lot to bite off in just three weeks.
Still, it took us a few days to realize just how useful Firebase would prove as an alternative to traditional hand-rolled servers. Though Firebase does suffer various limitations, such as the ability to perform complex server-side logic, it works well for a relatively straightforward app like ours. Having one less complicated moving part to worry about when diving into something new really simplified our process.
4. When in doubt, hack it out. I came into Swift with almost no experience in statically typed languages (just one semester of C++ in college) and, aside from my limited experience with React Native, no experience building mobile apps. That said, I was almost never stuck on how to implement a feature — because of, well, **the internet**. There are so many resources out there, and, while they may not have the exact answer you’re looking for, chances are they’ll have some answer that’s applicable to the problem you’re facing. By constantly browsing StackOverflow, I was able to implement everything from Regex checking, to image caching, to converting dates to “time ago” format (i.e., “one hour ago”), to dynamically resizing text fields as the user types.
Point is, you shouldn’t let a lack of experience hold you back: if you’re willing to be scrappy and work hard, you can solve just about every problem you’ll run into.
Now that we’ve sort of “finished” the app — though no such thing is ever really done, and there are many more features we’d like to build out — I’m reprioritizing applying for jobs (I’ll still put two to three hours a day into styling, however). But I plan to take the lessons I’ve learned from building “snowflakes” with me, even as I look for jobs. Here’s how I’ll apply them:
- I’ll get organized. I’ll use a sort of “scrum sheet” to keep track of all my job-app related tasks for the day. I’ll use another tab to track potential contacts and how I’m keeping up with them.
- I’ll be willing to switch gears. If something isn’t working for me, I don’t want to keep putting time into it — I’d rather be as productive as possible. For me right now, that means I want to massively de-prioritize sending apps “cold” and focus more on building contacts and growing my network.
- I’ll try new technologies. Medium is one way of getting myself out there that I hadn’t planned on using, but now I see as potentially viable. I’ll also make sure to look at alternative job-hunt platforms such as Triplebyte and Hired.com.
- I’ll be scrappy. I know I’m not the most experienced dev out there, but I do have work ethic and a desire to learn. I know I could form an important part of most teams given the chance, and I’ll take that confidence into every interview and networking situation I attend.
So, enough about me — what have you learned since finishing up a programming bootcamp? I’d love to hear about the projects you’ve worked on and how your job hunts are going.