It's been well over a year now that I released a small app called Collect after months of doing something I've never really done before: coding and actually developing software. That can be scary territory for a designer—it definitely was for me. And although the app is no longer in the App store (I decided to learn other skills instead of maintaining it), I thought it would be beneficial to reflect on some of the lessons I learned while building it.
The background story
It was Spring 2018. I was working in a mobile development agency Futured and I was obsessed with mobile apps. So much so that I used to madly screenshot every app, interaction, screen or design detail that caught my eye. I had (and actually still do) hundreds of screenshots on my phone, but the problem was that I rarely came back to see them.
When I dug into it, I found out it was because I had no reasonable way of searching in them. They were just sitting there as images without any metadata and if there was any dust in iOS, there would've been plenty of it on them. I wanted to be able to go and see all screenshots with a map for example and I couldn't easily do that.
Out of this frustration an idea was born: an app that will allow me to search my screenshot collection. I decided I would build it myself to learn something new and also—let's be honest—for the good feeling of releasing my own app in the App store.
Now, I'm no unicorn designer who can code (beyond basic HTML and CSS anyway), so this posed as quite a challenge for me. I rolled up my sleeves, downloaded Xcode and I dove right in.
After about two months of learning and trying to build something, I had just a skeleton of the app, nothing actually working and that was quite frustrating. The learning curve of iOS development was very steep for me. I called it quits for the time being.
Lesson 1: Don't give up. Finish stuff.
I froze the project for several months before coming back to it in September 2018. I realized this was something I really wanted to do, but I previously gave up because it was quite hard. I continued with the help of various tutorials, some advice from my colleagues and the online community. Eventually, I released the app.
Let me back up a bit and tell you how I approached building the app. In the beginning, I defined all the use cases for it as well as the flow of the whole app. I didn't necessarily design mockups of the whole app, just one or two key screens and even then I had to make lots of trade-offs on the design front. I had to, I was limited by my (lack of) skill.
When it came to the development itself, I divided it by all the use cases. First, I would build a screen for all the screenshots to live and to browse them. Then would come a way to import them. Then a screen for searching for them. And so on.
I focused on one use case at a time and worked on it. It was like a succession of problems and I was slowly solving them one by one. That's when I started to enjoy the process.
Lesson learned: When you're passionate about something, don't give up just because it's hard. There are a million ways you can approach a problem and get it done. When you put your head down and really work on a problem, you might even discover that it's easier than you thought.
Lesson 2: Coding can be fun and very rewarding
Once I learned just enough to understand what's going on in the code and how I need to implement certain things, coding became really fun. Sometimes, I would get stuck on a problem or a bug, but it would remain really fun to work on it.
When I finished a screen, fixed a bug, or overcame a problem in implementing something, those were the moments of feeling really rewarded. Paradoxically, I felt more achievement throughout the project than after releasing the app.
However, it took a considerable amount of time and effort to get to the place where I was able to actually solve those problems and implement those solutions. Perhaps there was a better way to approach it than just blindly diving into it.
Lesson 3: Learning some theory first helps
When I started working on this, I pretty much just opened Xcode and tried to figure out how to make some progress by trial and error. This is what probably led to so much of my frustration and initially quitting. On my second try, I started with learning the basics of Swift in advance so that I would be able to grasp what's going on in various tutorials and Stack Overflow answers. This definitely helped me to work more efficiently and prevented much of the frustration.
But I didn't get stuck on learning theory only, either. Instead, I was always learning just enough knowledge that would allow me to implement whatever I needed at the moment. For example, when I was working on a gallery of screenshots, I read a couple of tutorials on collection views and tried to implement it in my app as I went along.
I very much enjoyed this incremental way of working, because I could see progress clearly and quickly.
Lesson 4: Short feedback loops are very useful and satisfying
One great aspect of coding—from my point of view—is that the feedback loops can be very short. You can build a really small piece of the whole thing, run it and see how it works. You can iterate very quickly thanks to that. It's also very satisfying. You see some results of your work long before the whole project is finished.
And being able to run the work-in-progress app on a device gave me a final yet perhaps the biggest lesson of this whole endeavor.
Lesson 5: Running product gives you more insights than static mockups ever will
Once the app was somewhat functional—meaning it worked for a couple of use cases—I spent a lot of time playing around with it. This allowed me to see things I simply wouldn't with static mockups or even a prototype.
I made several design decisions based solely on the feeling of the live app. There were possible interactions I didn't even consider at the beginning. There were tiny details I was blind to when I sketched the initial mockups. Coding allowed me to create a better design.
This is a point that is also nicely explored in Matthew Ström's article Designing with code.
I am very glad I persisted and finished this project because it taught me so much. It changed the way I look at coding. I see it now as more fun and rewarding and less scary and ambiguous than before. I also see it as very valuable to designers. I now firmly believe that coding can make you a better designer.