Working on a project requires you to make decisions about everything, from picking a language to write in, to choosing the libraries and frameworks your project will rely on. Indecision can end up killing your project. In a presentation given solely through emojis, Facebook’s Alexsander Akers shares his advice on how to keep a project alive, drawing from experience with his own seven-year-long project, Arex.
Side Projects ⛄ (0:00)
I was originally going to talk about the approach to data in Swift, but I realized that my idea was just going to list ten different things for using data in Swift. But, it wouldn’t be interesting for you to sit there and listen to me present something that would be better as a blog post. Instead, I decided to give a presentation on indecision, through emoji.
A snowman is like a side project. When you’re done with your work, you just go outside in the snow to build a snowman. It’s a fun side project. This is something that I think is unique to the programmer community as a whole. I program for work, and then I come home and I keep programming. I do that because I enjoy it, and because we love phones. I would do it even if I weren’t being paid to do it.
Caveats 💣 (2:50)
The caveat to side projects is that there is some risk involved. Side projects are really interesting because they let you experiment with new ideas and frameworks. I think a lot of people started out with Swift as a side project; many companies didn’t adopt Swift right away. Ayaka’s talk on scripting in Swift is a non-production use for Swift, because people didn’t want to use Swift when it crashed your compiler all the time.
Another caveat is time. If you have a side project, it takes a lot of time to get it done, especially if your goal is to ship something. There’s a law called Parkinson’s Law, which says that work you have to do is like a gas. A gas expands to fill its container, and likewise, work that you have to do expands to fill the time you have to do it. For example, if you have three months to write an essay, you will still do it the night before it is due. We all know you did that bug fix at the last minute.
Side projects also have the risk of bootstrapping your money on things like a piece of software, a web editor, or even to hire a designer. I would hire a designer to design this beautiful leather skeuomorphic thing, then iOS 7 came out, and I had to start over. I spent all this money, and now it’s gone.
Another risk of side projects is that you might have a great idea, but then you get Sherlocked. It’s still a great idea, and maybe you can pivot. But, there is a sense where you can change the world one library at a time. If you work on something in secret, it might not be as exciting as you thought, and you decide to never work on a side project again because you didn’t get coverage.
Doing Things Right 💃 (6:09)
About six years ago, I started a side project that, to this day, I have not finished. I’ve started it over about seven times now. The reason for this is because I want to do things right. In tango dancing, you can improvise and make guesses along the way, and no one really notices if you didn’t do a leg move correctly because it’s going so fast. But I’m a perfectionist, and I can’t just guess what the right answer is. I need to know that Core Data is the right framework to use in my side project, and I have to know without a shadow of a doubt that Realm will not do because it lacks some feature. If I choose Realm and need to change it later, that is the worst thing that could happen. I would have to change data stores, and that is horrible because I made the wrong decision. I would feel horrible about myself, even though none of you would ever see this random guess I made.
These decisions don’t matter, but to me, they do matter. When I say this out loud, it seems like a stupid thing to pick my battle over. I spent weeks looking at every single persistence library, when I could have just written an app and shipped it six years ago. I need to be precise, and that’s such a weird feeling that it just prevents me from shipping.
Remember Your Goal 🎯 (7:58)
When you have a side project, you have to remember what your goal is. Is your goal to tinker around in a playground with some cool thing, or do you really want this to get into people’s hands? For me, I have elements of both. I want it to be in people’s hands, and yet I’m agonizing over the minutia of, say, do I want to use Objective-C or Swift? Now I have Swift, so I have to think about every single JSON parser out there because I need to know the right one to use. Then I don’t even go with JSON at all, and that was all a waste of time.
I don’t think you need to agonize over the details. In university, I learned of the “gun shot method”. If someone held a gun to your head and forced you to make a quick decision, what would you do? If someone held a gun to my head and asked what data persistence framework I would use, I would probably say Core Data. I probably should have used Core Data because I “know” it, as much as anyone can really know Core Data. But, no one actually cares what back-end technology you might use. You could build a fax machine and put such a nice UI over it that no one cares. No one will see your database, and the user doesn’t care as long as it doesn’t crash and it does what they want.
Make a Commitment 👫 (9:47)
We need to just pick something and make a commitment to it. You can’t just change your mind every week like I do, because you will get nothing done. You have to be precise, and you have to focus on what it is that you want to do. Do you just want to play with this side project? Do you actually want to ship something?
A side project is like weight loss, because you need to be publicly accountable for what you’re doing. I always say my diet starts tomorrow, and I laugh at that, but no one actually knows. I can say that I’m working on a side project, but I can just shelve it and I’ll never get it done. I will never get this done because when WWDC happens, they might announce some holographic thing, and I’m going to have to start over. So, I’m saying to this room of three hundred people that I will ship this by WWDC.
Conversation with the Audience 💬 (14:10)
Alex: In the remaining time, I’d like to start a conversation to talk about tips and tracks that you’ve learned from either your successes or failures with side projects. What do you do that makes you enjoy it more? Chris, what are you working on, or what have you learned from working on a side project that is something that you can share with us?
Chris: One thing that worked really well for me is to work with other people. That made all the difference. I wasn’t able to ship anything before that. Another tip is to commit to give a talk about something, because that really helps you to finish that something. And, to hold you accountable, I would like to know what your side project is.
Alex: Okay, if any of you ship this project before me, I will know that you heard it in this room. [Audience laughs]. My idea is called Arex, and it’s essentially a to-do app, but it’s not. It’s a way for a person to manage taking their medications, or something like a daily vitamin. I want to make something that’s not just a time-based reminder, but also has geofences for things like if you leave your house without marking your meds as taken. Maybe in the future, I might work with a pharmacy or something to create a system for when I’m running low on something. I was talking with my colleagues yesterday, who suggested that I open source it. I could, but then everyone would see how bad my code actually is. They’d hold me to it, and I would also have the question of how I would make money from it.
Brian: My own strategy is actually to open source when it’s still embarrassing. It’s so embarrassing that I can’t leave it up there for long, and hopefully I’ll fix it over time. The problem is, if you’re not a good programmer, like I am, it just stays embarrassing the whole time. Luckily for you, when you open source something that is half done, you will be able to turn it into something awesome.
Audience member: You have to make decisions about what paths to go down and what to use in your daily job. Do you find that sometimes you want to reverse, but it’s too late? Once you’ve gone down the rabbit hole, how do you actually deal with it, and can you relate and take that experience into your own project?
Alex: Do I see my indecision leaking through into my work life as well? Well, I think there’s two things. When I’m working, there is a project manager and there are designers. I feel like both the project manager and the designers help keep a watchful eye on us engineers working on their project. Now that I’m working on this side project, I’m not only the engineer, I’m also designing it, because I have to design something to throw on the screen. I’m also the project manager, the client, I’m the everything. That’s weird because I’m not good at any of those things, except maybe the development part.
I hope I answered the question, but I feel that I’m trying to learn from my everyday experiences at work. I try to learn from the project managers and the designers and all of that, but I think there’s a reason that I’m an engineer, and not a designer. I’m embarrassed that I’ve spent six years on this, so I should probably ship it now. I could just open source it right now in front of all of you… [audience applause]
What’s the worst that could happen, right? This is the seventh version of this project, so we’re just going to go with that for now. So now it’s open source on GitHub, but it’s not done yet. Thank you, and I hope to build something by myself, with you, and with your feedback.
Receive news and updates from Realm straight to your inbox