From Designer to Developer
Allison and I left everything behind. We no longer have an apartment, we barely have any stuff, except what we carry on us at all times. We had always planned to be gone about a year, but I always felt that mixed in with seeing all the sights and meeting all the people and riding all the overnight busses, I would make time to sit down for a bit and do one of the things I love, iOS and Mac development.
My path toward acquiring this love is a long one. I won’t go into it fully, but the summary is: When I was in high school (2001-2005), I was obsessed with the rebirth of the Mac as Mac OS X. I knew about its roots in NeXTSTEP and that it had an amazing developer environment. Several times in high school I tried to teach myself Mac development, but I just couldn’t get it. I gave up on that and went to university and earned my Bachelor of Science in Industrial Design. I’m really lucky that my program focused on learning the Human Centered Design process, rather than only Industrial Design techniques. Learning the design process gave me the foundation to be able to tackle any design problem, not just industrial design problems. Once I had a stable 9 to 5 job in San Francisco, I really wanted to try to take another stab at learning Mac development, in my free time. By that time (2014), iPhone was the clear development platform over the Mac. I took a one day class in iOS development and then just started teaching myself after that. Years later and 4 months before Allison and I were planning to leave on this trip, I got my first iOS Development job, at Topology Eyewear. It was an amazing opportunity and I was sad to leave it behind. But Allison and I had some traveling to do!
I love iOS and Mac Development. I like doing it for pay and I like doing it for fun. I had always planned to try and do it while on the road.
iOS Development is pretty different from many other types of development in that its not very amenable to flexible development environments. When I was a designer at Riverbed, the engineers I worked with only needed an SSH connection and a web browser and they could do their work. I think this is typical of most web development. In this kind of flexible development environment a Chromebook or a an iPad with an SSH client would be plenty to get work done. Unfortunately, iOS Development is not friendly to remote work. It usually involves an iPhone directly connected to my computer so that my code can run on a real device. Also, Xcode (Apple’s proprietary development environment) requires a Mac. This is not a great combo for traveling. I would rather not travel with an expensive, fragile, and heavy MacBook, but I in order to keep doing what I love, I don’t have much of a choice.
I went with the lightest Mac possible: The 2017 model 12” MacBook. Its a little underpowered for what I’m doing, but it does the job. The battery life when I’m writing for this blog is amazing, 10 to 12 hours. Unfortunately, when I’m developing, its closer to 3 or 4 hours. Oh well.
At the start of the trip, my phone was my old iPhone 6 Plus. We were in Mexico City when the iPhone X started shipping, so I traded in the 6 Plus and bought the iPhone X. I would not recommend buying any Apple products outside of the USA because they’re a lot more expensive in other countries, but I knew I wouldn’t be back in the US for a long time, and I had been waiting for a new kind of iPhone for 3 years while I kept my iPhone 6 Plus, so I bit the bullet and bought the iPhone X. (Its amazing, by the way!)
My Test iPhone
I also have an iPhone 5s with me. Its good test device because its the oldest, slowest phone that runs iOS 11. This device allows me to test apps to make sure they are speedy on the slowest supported device. Its also small and its a good backup if something were to happen to either Allison’s or my phone.
Luckily, Apple’s power supplies and chargers support the major electrical voltages and amperages around the world. All that you need to do is get the adapters. Allison and I each have a PlugBug. It makes charging the computer and the phone at the same time easy. This is not usually needed, but when it is, its so helpful!
Lastly, with all this gear, a little extra security really helps. Staying in hostels is affordable and a lot of fun, but there are not always safe places to store our stuff. I’m never going to be able to travel in such a way that a determined person will be stopped from stealing my laptop, but I can travel in such a way that keeps honest people honest. Allison and I brought a Pacsafe Travelsafe 5L. I think its their smallest model and it perfectly holds the 12” MacBook with wallets, passports, etc. When we get to a new hostel, we tie it to the ladder of the bunkbed and go about our normal travel plans with a lot less worry.
Any time I talk about security and safety on this blog, I just want to add this reminder:
The world is much safer than we’re taught, as Americans. The vast majority of our time abroad has been spent in countries that are far safer than the USA.
I want to give one final shoutout to the AirPods. I have had my AirPods since the day they came out and they have changed my audio habits more than any pair of headphones ever. They are the easiest, most convenient way to listen to podcasts, audiobooks, and music I’ve ever had. They never catch on my backpack or anything else like wired headphones. Most importantly, as I go indie, audio communication has become more and more important. The AirPods are absolutely great for communicating via FaceTime, Slack, Skype on either the Mac or the iPhone. They have been indispensable to my travel setup.
Finding The Time
I have found that communication is key when finding time to program. Before starting to work, its important to communicate with Allison about which days are tourism days, which days are relax days, and which days are “work” days. Without this clarity, its hard for me to enjoy tourism days because I thought I was going to be able to work and in the opposite case, Allison will be annoyed that we’re just sitting around while I’m working when she thought it was going to be a tourism day.
I find having less than 2 hours in a session is basically useless, and I also find that I’m no longer able to sit in front of a computer for 8+ hours like I could during my pre-travel life. Its a little bananas for me to think about this. Ever since I got my first computer, I’ve spent as many waking hours as I could in front of it. I never tired of it. As little as 2 months after we started traveling, I noticed those kinds of extended computer sessions are no longer natural, or even comfortable for me. Usually around the 4 or 6 hour mark, I really feel the need to stop, get up, put everything away, and go for a walk. It helps get my blood moving and allows my eyes to focus on something far away.
This varies a little bit from place to place. I have found cafés to be pretty abundant in most of the places we’ve visited. I try to find cafés that also have other people working on laptops, that way, I know its fairly laptop friendly. I’ll usually sit down, order some coffee and maybe some food, and once it arrives, I’ll take out my laptop, open it up, try to get on WiFi (more on that later), and get to work.
As most creative workers can attest, it can be hard to get into ‘the zone.’ I think that being at a new café in a new place makes this harder. Sometimes I sit down and mess around for an hour before I start really getting into my work. Sometimes I sit down and am instantly absorbed. I also think this depends on what I am working on. If its something concrete, its easier to get into it. If its something undefined, something exploratory, its much harder.
A note on safety. Not all the places Allison and I visit are safe to work on a laptop. When we’re in small towns, there may not even be a café. If there is a place where you can sit around ordering drinks all day, it may not be the place you want to bring, and display, a pricey laptop.
For example, in Quito, most tourists hang out in the Centro Histórico part of Quito. This area is not all that safe. Luckily for us, our Couchsurfer host was in a different part of town near Hotel Quito, which had lots of cafés and was very safe to hang around all day with our laptops.
Alternatively, in Korea laptop culture is strong, so cafes are regularly full of people working. There is also almost no theft there (so we were told) and this is apparent in cafés- people completely walk away from their computer for as long as 30 minutes and never worry that it’ll be anywhere but exactly where they left it.
However, I always keep safety in mind when looking for a place to work. I don’t want to be using my laptop somewhere where no one else is using a laptop. I do this to avoid having someone grab it from right in front of me, or to see me and wait for me to leave, only to jump me after I leave the café. I also don’t want to be one of those jerks who is the only person using a computer in a café that doesn’t have that vibe. It’s not a hard balance to strike, but something I do keep track of while looking for places to work.
Internet connections around the world can be lacking… to put it mildly 🤬. There are several problems. The backbone internet connection in a lot of places are just not that great. Puerto Escondido, Mexico and the Galapagos, Ecuador are examples of this. No one has fast internet in these places. Especially in the Galapagos, the internet was so slow everywhere, which makes sense when you consider its a remote island with a small population, but at times it was frustrating in a #firstworldproblems way.
Even in cities with good internet connections, you’re still at the mercy of the WiFi in your hostel or café. Many places use off-the-shelf, consumer, networking hardware, which is not meant to cover large spaces. It’s also not meant to handle hundreds of simultaneous clients. So WiFi around the world can be mixed. It’s not like this is a surprise, I’ve been to plenty of hotels in the USA that had terrible WiFi, just a minor warning.
One major difference I have noticed about joining WiFi at public places abroad: It is quite common for the networks to be secured with a password. This is actually a good thing as it ensures your packets between your device and the WiFi access point are encrypted, whether or not you’re using secure protocols. It just adds an extra step to the process. I usually had to ask someone in the café what the password was. Sometimes if the password was complicated or I just couldn’t understand what they were saying, I would hand them my iPhone and have them type it in. Ever since iOS 11 and macOS High Sierra, WiFi password sharing has become super easy. So once one of our devices is connected, it can be shared with all the rest without needing to know it again. Thanks Apple!
Luckily for me, iOS development doesn’t really need an internet connection. As I’ve grown my skills as a developer, the amount of time I spend on Stack Overflow goes down and the amount of time I spend in the built in API Documentation grows. The apps I work on don’t rely on internet connections to download data from an API endpoint, and even if they did, I think most would argue, developing offline for an online experience will force your application architecture to be better.
There are things I do that need an internet connection, for example, committing code. That works on even the most basic internet connections. GIT is amazingly resilient to network issues. Any time I want to upload a new build of my applications to iTunes Connect for release on the App Store or Testflight. This requires better, but not amazing, internet.
Mini rant: OMG Apple! The activity that requires the best internet is downloading Xcode! How can this shit be so big‽ 5.0GB downloads are ridiculous. Because of this, I limit myself to final releases, no betas. Betas are released too often and developers are not allowed to publish apps to the App Store from beta versions of Xcode, so I just skip them.
I was very lucky to continue to be able to work for Topology Eyewear remotely. They were totally open to it and flexible with my unpredictable schedule by saving low priority work for me to do. This was the kind of work that didn’t need to be done immediately, but did need to be done. As with finding time to work, when working for someone else, I found that communication was key. I found it worked best when I knew the following:
- When would I be able to work? Best to know a week or more in advance.
- How long would I be able to work for? 1 week, 2 weeks, more?
- How many total hours could I contribute during this timeframe?
Once I knew this information, I would communicate it back to Topology, normally via a call with my manager. This would give them enough time to decide which low priority work they wanted me to do. Then, before I would be able to work, I would call again and we would discuss the work that needs to be done and how much we both think I can get done in the time periods mentioned above.
In terms of timesheets, I know there is a ton of software out there to help with this. If I were doing this full time and had many clients, I would use this kind of software. I have been lucky enough to be able to use a timesheet that is just a simple Google Sheet. It has the start and stop times per day that I work and has a place for me to put the hash of the last GIT commit of the day. Thats all I’ve needed. Again, I think I’m lucky in this regard. I’ve had a great working relationship with Topology and so more detailed information has never been needed.
Overall, doing work for others, with the above communications requirements met, has been very rewarding. The work never felt stressful. And the work I produced was always what my manager at Topology expected. An ideal working relationship.
Most of my development career has been spent working for myself. I learned most of what I know by working on my own projects, watching development presentations, and going to meet ups to talk to other developers. I like to make things. Sometimes I like to make things to solve a problem. Sometimes I like to make things to learn a new framework or a new programming concept. Before Allison and I left on the trip, I was working on a full re-write of my only popular app, WaterMe, which I made to help Allison remember to water her plants on a regular basis. I didn’t finish it and I really wanted to get it done. Especially now that iPhone X was released and the old version of WaterMe ran in the screen size emulation mode, which is not ideal.
Once we arrived at Llullu Llama to volunteer for a month, I knew that this was my time to finish WaterMe. During the summer I had finished most of the underlying data layer, but the UI was barebones. At the beginning of our stay at Llullu Llama, I would spend a few hours a day working on it. I spent a lot of time polishing the UI and experimenting with a custom UI for the main screen. This was slow going, but I made a lot of progress. As the half way point was rolling around at Llullu Llama, I realized that I really needed to pick up the pace to get the app finished. I knew if I didn’t finish before we left, it would be hard to find time to keep working on it as we moved into tourist mode. During the last bit of our stay, I was crunching on WaterMe so much that I started neglecting some of my duties at Llullu Llama. This left stuff for Allison and the other volunteer to pick up. They were more than willing to pick up where I fell short, but I knew they didn’t like it… I didn’t like it either.
I don’t think many understand the difference developing for an app vs developing the WHOLE app. There are so many small things that need to get done before it can ship. When I work for others, I have a small, well-defined, problem to work on with a reasonable deadline based on my available time and difficulty of the problem. When I was working on WaterMe, I had 100’s of problems to solve and a deadline that was decided by my travel schedule, not by the amount of time needed. It goes without saying, that I did not find this rapid pace as relaxing as working for Topology. Would I do it again? Yes. But I would not be so strict with my own self-imposed deadline.
If you, the reader, are an iOS or Mac developer and you have visited San Francisco, you know how active “the community” is there. There are multiple meet ups every week. Some are very formal, some are very informal. I sort of expected this to be not as common in other places, but I was not expecting it to be fully absent. I have occasionally checked Meetup.com and other resources for iOS and related meet ups in several of the places Allison and I have been and there are usually none. Or if there is something, it meets once a month and we missed it. Sometimes I have found myself missing these casual get together to ‘talk shop.’ Luckily, I still have Slack for a bit of that, when I want.
I did get to connect with the community by going to Try! Swift in Tokyo. It was an incredibly fun event. I thought it was really cool getting to be in a familiar setting, in a totally unfamiliar place. It was both Allison and my first trip to Tokyo. It was a great way to be introduced to the city. We arrived and the next day there were already things to be doing with a new group of people. The conference helped introduce me to a bit of Tokyo I would not experience as a tourist and it was awesome getting to meet a bunch of people in the iOS community that I never got to meet in San Francisco. Its important to remember that not everything happens in SF 🤓.
From people I met at the conference, I learned of an amazing ramen place. I learned how to buy a Suica card for the underground. I met someone that also wanted to go to Nikko with Allison and I, and we went together! I learned a little but about Japan’s peculiar trash sorting system. I also got to visit corporate offices in mega skyscrapers. I visited the LINE offices, got to hug a giant bear, and got a great view of the city!
After the conference I did have an interesting realization, similar to the realization about not being able to sit on the computer for 8+ hours per day. After being completely surrounded by iOS development again for a few days, I started to tire of the same discussions over and over. The same conversations, the same arguments, the same debates. This had never happened to me in San Francisco. Now that I’m used to traveling and to being outside the SF tech bubble, it was a little overwhelming to jump back into it for 4 days straight. By the end I was glad to get back to being a tourist and thinking about where we’re going to travel to next. That was a surprise.
Allison and I changed a bunch of our plans in order to go to Tokyo for Try! Swift, but it was totally worth it. I had a great time meeting new people, being shown around, and being given advice by locals. I was excited to do a bit of networking since I will, probably sooner rather than later, have to look for another job. It also helped remind me I have a more diverse set of interests than 24/7 tech shop talk. Overall it was a great event and I’m so glad I went!
I consider iOS development and other side-projects to be really important to my well-being. I find that being in the zone for a few hours can feel, almost, meditative. I think it would have been much harder for me to agree to travel if I had to give up my programming and related activities. When everything is new and different, its really nice to have something thats, not just familiar, but completely enveloping. Development is the only time I have when I get so into the flow that I forget to eat, drink, get up, etc. The music I have in my headphones comes and goes and I don’t even hear it. Its an extremely rewarding activity. I would never want development to have been the only thing I did during travel, but I am happy that its an important part of being a Duo Abroad.