Book

Exploring Freelancing

Navigate freelancing as a developer; find clients, manage contracts, ensure timely payment, and learn from experiences!

I worked with a small startup last year to create native iOS apps for the Android counterpart.

Working with a startup means that you will be working on a lot more than you think you will.

I learned a ton, but I wish I knew these five things before starting the internship for a better learning outcome.

It’s Going to Be Hectic

I decided to do an internship during the odd semester, from November to January.

Sometimes working more than eight to ten hours a day at college was really stressful.

I was supposed to build the whole iOS application from scratch: Take charge of the development process, decide the architecture to be used and the libraries to be implemented, and finally ship it to the App Store.

It was hectic, and I wasn’t prepared for it beforehand.

Managing expectations became a big deal here — from the founder’s to the back-end developer’s to the designer’s, and ultimately to my own expectations.

No Mentorship

I was an iOS intern and an unofficial lead iOS developer for the product. In the beginning, this seemed really captivating. It felt powerful.

But slowly, I realized what I had to deal with.

I had to decide the best practices myself, going through lots and lots of Medium articles, open-source projects, and YouTube tutorials. If I was stuck on something, there was no senior iOS developer to pester with questions, which at times was demotivating — and I did end up learning hacks, a.k.a. bad practices.

And that brings me to the next point.

Reach Out to Developers

I learned a lot by implementing features that would be shipped in a real-world production application. I would spend hours and hours googling and searching on Stack Overflow to find the answers for the custom implementation of a feature.

But sometimes, hours and hours could have been saved and invested in something else if I had not been hesitant to reach out to developers on different social media platforms.

I remember spending a week on a particular feature that was an essential aspect of the user experience. I wasn’t able to find any answers to implement it, and my first question on Stack Overflow concluded with a lot of downvotes.

In the end, I posed my problem in one of the iOS groups on Facebook. Someone commented on it, we had a private chat, and in two hours, I was able to implement it flawlessly.

Two hours.

Discovery Requires Experimentation

Quoting from Daniel Whitehall of “Agents of S.H.I.E.L.D.,” I had the freedom to experiment. And I should have utilized it more to discover what would be best suited for the project.

For example, I could choose between using Alamofire or writing my own networking layer using the standard framework. I had an option to decide between creating my own card-swiping Collection View or using a third-party library.

I wrote the whole application programmatically. No storyboards. And it was an experiment I’m really proud of, as it helped me blend with Apple’s latest framework SwiftUI quickly.

Discovery required experimentation, and I was too afraid of failure and the probability of not being able to complete work within the deadline.

Documenting

When I looked back to write this article, the absence of a journal of my journey through those three months of internship left me at a loss for words and without measures to compare how much I had improved in iOS development over the past year.

Document on Medium. Post on Instagram about your learnings from the day. Put out content on Twitter about the issues that you resolved.

And when you come back to your documentation in the near future, you’ll feel satisfied with the progress you’ve made.

Conclusion

It was an exciting winter last year, taking charge of the whole iOS apps for a startup. The insights have helped me become a better iOS developer.

Knowing these five things beforehand will prepare me better for my next iOS internship, and probably you, too.

Book

Exploring Freelancing

Navigate freelancing as a developer; find clients, manage contracts, ensure timely payment, and learn from experiences!