How and when did you get into programming? And into iOS?
I got into programming when I was in my 2nd or 3rd year of “college” (it’s not quite the same as when US folks would consider college). My eduction was mostly design / interactive media focussed and at some point we were tasked with making an interactive product in Flash and ActionScript. This was so much fun, and I just wanted to do more and more of it. I eventually found an internship where I could work with Flash and it was an absolute blast. I never looked back.
It wasn’t until about 4 years after that that I started looking into iOS, and maybe 5-6 before I did iOS professionally.
At some point I was working at a startup where I mostly did front-end web development and bits and pieces of back-end stuff too. They wanted to have an app so initially they called in a freelancer to work on it. Eventually they wanted to pull iOS development in-house and I volunteered to work with the freelancer for a while and eventually I took over the entire project. I’ve been focussed on iOS ever since!
When was that? You taking over the project? Was Swift already a thing? Why iOS in the first place? Because you liked your iPhone and wanted to develop stuff for it?
I started working with the freelancer around the time Swift 1.2 just was out. This must have been early to mid 2015. A few months after I managed to work on the project all by myself and the freelancer slowly moved out of the picture. So yeah, Swift was definitely a thing! And I went through all the growing pains when Swift had a new version out. Luckily the project wasn’t huge and it didn’t have a lot of external dependencies. Most of the dependencies were actually still Objective-C if I remember correctly.
My interest in iOS was mostly because I loved how fun and quirky mobile apps could be, and I was already a big fan of Apple products at the time so making my own apps for the platform felt like a no-brainer.
Was there something in Swift or iOS in general that was tough to grasp at first?
Coming from the web, this whole idea of view controllers, how they worked, and how a user couldn't see "underneath" a view controller was a little weird. As you can imagine, on the web we have inspect element and users can mess around with the DOM to show or hide elements that are in the browser.
Initially, I thought of an app as a browser so I was very worried that users would somehow be able to see the "main" view controller when I presented the "login" view controller on top of it. Of course, this can't happen because user's can't mess with the view hierarchy in the same way they can in a browser. It took me a few weeks to unlearn that way of thinking and be more comfortable with how apps work and their lifecycle.
My initial struggles with Swift were mostly around optionals and generics. I was kind of used to working with a typed language because I did ActionScript 3.0 before moving on to web development so that wasn't too hard. In the first few days of learning I had force-unwraps EVERYWHERE. I just didn't want to deal with optionals. Eventually I came around and I wrote what I believe was my first real blog post on Swift called "The dangers of forcefully unwrapping optionals" (https://www.donnywals.com/the-dangers-of-forcefully-unwrapping-values/).
Nice 😃 Was the blog planned or was it more like "I want to share this about optionals"?
It wasn’t really planned, I had done some blogging about my web work before that and I would just post something whenever I felt like I had something to say. In this case I noticed that several people in places where I was active were still figuring out optionals and how to use them so I figured I’d write a little advice I had learned the hard way!
Got it. I am curious about your time at Disney Streaming. How did you find this role? If I remember correctly you mentioned working on SDKs mostly. What was that like? Were you mostly doing new features or it was more of a improving the existing code and fixing bugs? Did you miss working on UI?
I really ended up at Disney Streaming by accident to be honest. A friend of mine worked at this place in Amsterdam called “The Capitals”. At the time I worked at a small startup and I wanted to change things up a little and instead of working on one product, I wanted to work on more shorted term projects for a while. So as I interviewed I learned that a company called BAMTech Media had actually bought The Capitals.
No big deal, I thought. I’ll still do the project work but instead of a small company it’ll be with a leader in streaming sports from the USA. All good.
When I started my first day it quickly became clear that in the meantime, Disney had purchased BAMTech for their Disney+ platform. So that was an interesting surprise at the time!
Eventually, I figured working for Disney would be an awesome experience even though it wasn’t exactly what I was looking for at the time.
So I did spend my time working on an SDK at Disney Streaming, which is very interesting. I mostly worked on smaller new features, a lot of the stuff that we needed was already written during the BAMTech days so a lot of my job was maintenance and bug fixes. Although occasionally I’d also get to do feature work. I did a lot of work to support downloading media on iOS and iPadOS for example.
Not having a UI to work on can be both a blessing and a curse. You have to rely on unit tests because you don’t work on an app, the tests help build a robust product. However, looking at code only all the time can get a little boring at times. So yeah, I did miss UI work every once in a while.
That's a cool way to end up at Disney 😁
You are also one of the most visible members of the iOS dev community. I think if I were to ask on Twitter for like five or ten iOS dev personalitites, you would probably be on most of the lists. How did your "rise to fame" happen? Was is more like a linear progression or were there events that really accelerated things?
Hah, I’ll never get used to that... I think it’s mostly something that happened kind of naturally over time. I had been talking at conferences every once in a while before I started blogging. I think working for Disney Streaming helped me out here because conferences like having employees from large companies join them. At some point I decided I wanted to start blogging regularly. I felt like I had a lot to say on the topics of testing, generics, and code design in general so I just started writing down thoughts on a weekly basis.
Once I started doing that I saw my Twitter followers grow, and my visitor numbers for the website went up as well. I don’t think I could pick out any one or two events that served as a huge boost. Every once in a while I get a retweet or a mention somewhere that causes a temporary boost but up until this point the steady growth hasn’t stopped, so let’s see what happens in the future!
Looking forward to resharing this chat next year with text: "Meet the iOS developer with 100k followers" 🚀 😂
Haha, 100k followers would be wild! I doubt I’ll ever reach that.
How did the Practical books happen? Did you do any book writing prior to Practical Combine? Since Combine is pretty complicated, I imagine writing the book was pretty complex task?
The Practical books happened mostly because I like to try and teach people stuff they can use rather than focussing a lot on the nitty gritty details. I had written some books prior to Practical Combine (Mastering iOS 10 development with new editions for iOS 11 and iOS 12) so the writing itself wasn’t too complicated. The nice thing about the books I write is that even if a technology is complex, I focus on how you can use it with just enough background information. As I’m sure you can imagine, that makes writing the explanations a lot easier even though it still means you have to understand a lot of the internals in order to not cut any corners when explaining.
Was it a lot of work to property format the included code snippets and the overal book into multiple formats?
No but also yes haha. I wrote the books in Markdown and convert to ePub and PDF with pandoc. This does most of the hard work for me but I did have to tweak the ePub css template a little bit, and the PDF conversion uses LaTeX as an intermediary format so I needed to find and tweak a template for that. I’m mostly happy with where it is now but some day I might actually learn the syntax and configure a template that’s fully my own. For now, I’m happy with what I have though.
We are talking in the middle of July 2021 which is the first month you are officially an indie. When I first saw the announcement (I think it was on Twitter) it was quite a surprise. Was this years "in the making" or did it happen quicker? Perhaps because you saw success with your books?
Yeah it was a long time in the making in some ways but also very sudden. My ultimate goal has always been to achieve as much freedom as I could. So when I saw my books did well that was a catalyst for thinking about maybe finally chasing this dream for real. Eventually the pandemic and some personal stuff led me to realize that I would probably be much happier being my own boss and working on the things I want to work on rather than having a regular job. So while I initially didn’t really have a timeline, suddenly in a matter of weeks I decided that my timeline would be short. Just a month or so to prepare and then take the plunge by giving notice at my job and announcing online.
Did you make any extra preparations? Like asking potential clients in advance if they need some iOS development? What about savings? The traditional advice is to have enough for at least six months I think before leaving job to pursue building a business or freelance career.
I didn’t prepare much other than making sure I had enough runway to not need a gig immediately. Initially I told a bunch of close friends about my plans and without asking some balls immediately started rolling so I didn’t have to search for clients out of the gate. The savings were a big deal for me because I wanted to be able to pursue this comfortably and not feel the need to rush any bad gigs or gigs I didn’t want to do. The nice bit is that the books continue to sell so there’s always some income from that. On top of that I followed the advice of six months of income to make sure money won’t be an issue short-term.
That's nice starting point. What does your dream indie life look like? Just books and blogging with occasional workshop or also some contracting? What about other things like own apps or courses?
My ideal situation is more like 50/50 between working on my own apps, my blog, books, workshops, all that stuff. The other 50% I would like to spend on contracting work or other projects. So far, it seems like I’ll be able to achieve something very close to that soon which is very exciting!
Thats nice to hear! I am a bit surprised that your ideal situation is half the time client work. It is because of more financial stability or you want to have plenty of space to write code?
It’s a little bit of both I think. I geen like if I’d be working on my own stuff all the time it’s easy to lose touch with what’s going on in the workplace. I also enjoy working with others and helping them out so doing client work is a nice way of doing that I think. And of course, the financial stability it brings is a very nice aspect too.
Do you think you would go indie if (for whatever reason) you haven't written the two practical books?
My dream was always to eventually do something for myself somehow. Either an app, content creation, full time freelance, they all sounded appealing (and still do). So it was more a matter of “when" than “if”. The books really just sped up the process and made it so I could jump in with confidence. I do believe that without the book’s I’d have gone freelance/indie eventually though.
Makes sense 🙂 I mostly asked because most of the devs thinking about this move don’t have two popular books out. Do you perhaps have any advice for folks contemplating this move? Like how to decide if its right move or “how to start”. Assuming it isnt classic “it depends” 😁
So, it took me a long time to decide that this was the right move for me, so I think I have some general advice for folks going through the same. First and foremost, if you think it’s a scary decision now, it won’t get less scary if you wait. Financially speaking, make sure you have some runway. Ideally a month or 6 should get you comfortable but you can work with less. Make sure your partner (if you have one) is on board and willing to help you out financially if needed at the start because it could take a little while until you receive payment for your first invoice. And since you’ll be running your own business, make sure you have a plan to fall back on.
But in the end, the best approach probably depends on your specific situation so a huge chunk of it is “it depends”. If I could pick one thing from the tips I just wrote, it’s that it being scary shouldn’t stop you. It’s not going to get less scary if you wait.
Right. Also it's not like going indie is a point of no return and if things don't work out, you can probably quickly find another job.
Exactly, you can always go back to a dayjob.
You have a magic wand... and can change one thing about iOS development. What?
Oh, that’s an interesting one! I’m going to go ahead and say Xcode. Or rather the way Xcode works today. It would be great if Apple would decouple SDKs and all that from Xcode, allowing us to use a newer SDK in an older version of Xcode, or the other way around. This would probably decrease the size of Xcode updates significantly because we wouldn’t need to download the full suite of stuff every time. Overall it’s not a major pain point for me though, and I’m pretty happy with what iOS development is like in general!
Interesting.. It would be nice if Xcode wasn't that large, especially if you also want to have beta available.
When you are not "doing indie stuff" 😁 What do you do to relax?
My relaxing often involves playing the guitar, or playing/watching Starcraft 2. Although I do enjoy playing games on the PS4 occasionally too. Especially if it’s a good one with a lot of story.
Cool. Can't wait for the next Horizon 🙂
Thanks so much for taking the time to chat about going indie and more! Do you want to give someone or something a shoutout?