Mikaela Caron learned how to code after studying mechanical and electrical engineering in college. When SwiftUI was first released, she preferred to learn UIKit as it was a more mature framework, and later returned to SwiftUI a few years later.
In this episode, Mikaela shares her journey as a software developer, from learning how to program for iOS in Swift to making the leap to backend development with Vapor, and the lessons she learned along the way. She also tells us how working as a freelancer allows her to keep learning new things and how that contributes to her own apps, which she builds in public.
Swift Toolkit
Mikaela
Good! Thanks for having me.
Swift Toolkit
The first time I heard of you was when I saw your talk at the server-side Swift conference about Vapor and Fly. I have a special place for server-side Swift in my heart and really like the subject. You came from a background of iOS development, right?
Mikaela
Actually, no. I studied mechanical and electrical engineering in college and didn't get into iOS until about two years after graduating.
Swift Toolkit
Mikaela
Yes, I started with Swift around 2019, the year SwiftUI was announced. Everyone was struggling with the first version of SwiftUI - some things didn't work and many features didn't exist yet. Because of that, I didn't want to jump into SwiftUI and confuse myself while learning. When you're trying to do something, you can't tell if it's a SwiftUI bug or if you don't know how to write code.
Swift Toolkit
Mikaela
Exactly! So I learned UIKit for about two years and didn't get into SwiftUI until the third version.
Swift Toolkit
How was learning Swift itself? As someone who learned by yourself, what tips would you give to people interested in it?
Mikaela
I learned Swift and iOS development in 2019, starting with CodeWithChris tutorials. I appreciated how he broke everything down and explained everything thoroughly - from the basics of Xcode's interface to file organization. When you're new to Xcode, you don't even know what all the different buttons do.
I also followed Sean Allen's tutorials and his YouTube channel, which is still amazing. But a key tip for beginners comes from something I did on Code with Chris's forum: I started answering other people's questions. Whether it was attempting to answer directly, asking for clarification, or sharing helpful links.
Learning to code is one thing, but reading other people's code is equally important. That's not something you get unless you try or become part of a community. Learning to read other people's code really helped me with iOS development.
Swift Toolkit
Amazing. Did you transition to server-side Swift from there?
Mikaela
I think it was one of my co workers at one of my jobs, he was interested in Vapor. And I remember this was right before async/await was released in the Swift programming language, because I had done I was writing a Vapor API to do one endpoint basically. And that's sort of where I learned all of that from.
I would do something and then I had to flatMap it, and then throw something else... And so he said: "Just wait, give it three more months...".
Swift Toolkit
And what were the lessons you learned from this journey to server-side?
Mikaela
Ooh, I... It's been really fun, just to see how we can use Swift in other ways just because I always thought of Swift just as the language to do iOS development, iPad... visionOS wasn't even a thing at this point yet. So really seeing that you can use server-side Swift in other ways and just how we can now use it on the server on Linux, or you can do it on Windows and embedded.
Seeing all the different ways you can now just use this language is just really cool to see, even though I haven't done all of them yet. I think that would be fun to just at least try to use Swift on every platform.
Swift Toolkit
And what bumps did you face?
Mikaela
I think the hardest thing I've still had to do is attempt to figure out authentication. How do you sign in a user for your app, keep them signed in, and then how they make requests to the server.
It's actually not even a server side Swift issue.
Swift Toolkit
Mikaela
And then that is what you supply with the request? I would make sure asking a bunch of people, am I doing this right? Is this the right way to do it? Am I not doing something that's going to expose a ton of vulnerabilities? It's kind of scary, I would say..
Swift Toolkit
Yeah, that's true. And also, there are two different concepts in the server. There authentication and authorization. Authentication means you are the person you are claiming to be... And authorization means "is this user authorized to do so?". These are concepts that are not specific to Swift, but if you are not a backend developer, you might not be familiar with them.
And any other specific Swift issues or ecosystem issues?
Mikaela
I haven't faced it yet, but I know it's an issue that sometimes you'll write some code while developing on macOS, but then deploy on Linux, and it might not available on Linux.
Swift Toolkit
I think that this is less and less common, because more recently the gaps have been bridged... Either if it's Foundation, or FoundationNetworking. On iOS, URLSession is part of Foundation but on Linux it's part of FoundationNetworking. That's why it's interesting to use the async-http-client package that takes care of all of that.
And regarding server-side Swift development in the more broad perspective, what difficulties did you face?
Mikaela
Yes, I talked about this at the server side Swift conference this year in 2024: how hard it was for me to save a file to the server. Something that's not just text that's going in the database. And that was my entire talk of how difficult that was. And I still actually haven't figured it out yet. I haven't gone back and attempted to write that code because I was attempting to save a photo.
And in the Kodeco book on Vapor, which I think is Vapor 3 or 4, but I don't think it's up to date. It had a whole chapter of, "this is how you save a photo for a profile picture". And I thought: "that's exactly what I need!". And then in the book, it was about saving it on the disk, but in reality, that's not what you'll end up using. I need the in real life example and trying to figure out all the hoops to get to that point.
Because I am right now deploying my backend, for my own personal app, to Heroku. And because of that, you cannot just save files to the server's disk, because every time you push a new build, it'll deploy and run on different server. So nothing is saved!
Swift Toolkit
Yeah, they are ephemeral.
Mikaela
Because of that, I then have to save in S3 or something similar. I chose S3, and Heroku offers add-ons for different things you can tack onto your app, and this is one of them.
They create the S3 instance for you, and manage it. I did that, but then now you have to have all the proper permissions to be able to save, and then you also have to know how to properly communicate to S3 to give it that information... And I'm still trying to figure out and... There's not as many examples how to do that in Swift.
So because of that it was really difficult to figure out what the full flow is supposed to be and how it all works.
Swift Toolkit
Yeah, I get it. Even though we have now a language and a framework, still, we might not have the experience and the way of thinking that we are used to... In the same way that web developers make assumptions that are not valid for mobile, we also now make assumptions that they are not valid for the server.
Mikaela
On the bright side, though, Sébastien Stormacq had seen my talk at server-side Swift, and he did some AWS documentation on how to do what I was attempting to do. So there is documentation now in Swift, I believe, for how to do that and the process of what you have to do. So if anybody goes looking for it, they can now find it.
Swift Toolkit
And still on the subject of server-side Swift, I follow you over social media, and I see that you are developing in public an app for sharing contacts in conferences, And you chose Vapor. Why didn't you choose, for example, Node.js or Rust or Go?
Mikaela
So for this, I chose Vapor mainly because I’ve just been doing iOS dev for a while and I know that you can do server-side Swift. And it was funny that I’ve even given a tutorial series on YouTube on Vapor, but I still never had my own backend that I had deployed. So I wanted to do server-side Swift, so I can say “I’ve actually done it myself!” rather than just telling somebody in theory, “this is how it should work”, but still never actually doing it.
Swift Toolkit
Mikaela
I can deploy now myself and say, I've done it! And then see all the different errors, and the stuff that I've run into. And then I can post about that on social media and on my own blog.
Swift Toolkit
And help other people in the future not to face these errors.
Tell me a little bit more about where did you deploy your server and what else did you learn along the way in this process?
Mikaela
I'm making my own iOS app called Fruitful for connecting with people at conferences. You just end up talking to so many people, it's hard to remember all the everybody you talk to and then who you meet. So it's an app to remember those people, so then you can exchange a like a Pokemon card with the other person, containing all their information. Similar to a business card, but a little bit more fun.
And with that, I wrote the iOS app in Swift, SwiftUI. I haven't released it yet, I had planned on doing that way earlier this year, and then now it's December and I still haven't released it. Because of that, I'm going to make iOS 18 its minimum version. So then I can use all the new APIs and I don't even have to backport it to iOS 17 or before, because it's never been released. So it's kind of okay.
And then I did the backend in Vapor for this (I didn't hear of Hummingbird until like after I had started the project). I decided to host it on Heroku because I thought it was easier even though I've given a talk on deploying to a different platform: fly.io.
I thought Heroku was kind of easier, and because it's a bigger company, it has been around longer. It also has more support for different topics, even if it's in a different language, such in Node.js... If I'm trying to do like a very similar thing, I might still find good information about it.
Swift Toolkit
Yeah, and it has a marketplace where you can choose the add-ons also, probably a larger one.
And when you say building in public, what does it mean in practice?
Mikaela
For me, a lot of it is just sharing what I'm currently working on about it. So I think the building the base of the app, was all I wanted to do sign in with Apple. And I think half of this project, I've been debugging sign in with Apple just because I don't know how it works very well, or I'm not doing something correct and then handling it correctly on the iOS side, which is really a single call.
But then taking that onto the server side and making sure I'm actually doing it all correctly. That has been a huge challenge. So it's about sharing what challenges I'm running into, and tweeting about the problems I'm facing. You're almost never the first person to ever hit issue unless, you know, the day one after DubDub (WWDC) you're playing with the new API that was just announced. You're not going to be the very first one to do anything.
The internet will always correct you if you're incorrect. You have no worries about that! But also, there are so many nice people that are willing to help you and tell you: "Hey, I did this recently. I can show you how to do it". And that's super helpful and really welcoming as well.
Swift Toolkit
You said that the Internet will always correct you, even if you're correct. That's important to note.
But when you are not, where do you go besides posting on social media? If people want to get help, what do you think are good places to go?
Mikaela
I think it depends on what you're looking for help on sometimes. There's some Slack communities here and there, that people have made for iOS dev. You can post in those. There are code help channels, or specific channels... about Core Data, or SwiftUI, or server help. You can post in those very specific channels.
If you don't have many followers on social media, sometimes nobody is going to end up seeing it. So you have to go to different avenues.
There are also Discord channels: both Vapor and Hummingbird have been super helpful. Every time I've posted in either of them. It's almost immediate when I post something... One time was on a live stream on my YouTube channel, at the time I was making an expense tracker app. Super basic, everyone knows how those work, and I was having issues with something. I posted in the Vapor Discord, dropped a link to my YouTube channel.
This was before I knew Tim Condon, but he then came into my live stream and looked at the code and wrote: "You need a dollar sign right here on this line". And I had been debugging for the past hour! Out of all the people who could come into my live stream, one of the maintainers of Vapor coming and telling me how to fix my code was a dream come true.
Swift Toolkit
And from building in public, you learned a lot of stuff, I And you also do freelancing work. Are you able to bring all this knowledge building in public into your freelance work?
Mikaela
Right now I have a really fun part of my freelance project. It's mostly been an iOS app. So it's just all Swift and most of it is actually still UIKit. I still go back and forth between the two every day basically, but a new feature that I'm working on, has to do with AWS Lambda.
So I'm super excited to actually get into that because I will be learning how to do that and deploying it within a month. And I'm getting paid to learn something that I haven't done before! And then I get to immediately use that in the code base and then see it live in production!
Swift Toolkit
Swift Toolkit
Amazing. Yeah, if we're taking about Lambdas, recently we published a video with Andrew Barba, where I deploy a little application using the Hummingbird Lambda package, and Swift Cloud.
Mikaela
I'll check that out, because the deployment is the issue I've been running... you have to always configure everything properly, and if you're one character off or one letter off, it doesn't work.
Swift Toolkit
Yes, that's of the advantages of Swift Cloud. It takes care for you. You don't need even to know about Dockerfiles and everything, so it's very useful. Yeah.
Mikaela
I'll definitely check that out.
Swift Toolkit
All right, and if people want to know more about your work, learn more about what you do, they can find your links here at after this chat.
Thank you so much for joining, for the insights you brought, and maybe we'll see you in another video in the future!
Mikaela
Yeah, thanks for having me. See ya!
Swift Toolkit