Dev Conversations #10: Shai Mishali

Published: May 29, 2025

Dev Conversations is a monthly series where Swift Toolkit features members of Swift work groups, content creators, and people who contribute to the Swift community, focused on tooling, developer experience and Server Side Swift.

In these talks, we discuss open source projects, tips for professional growth, and many other valuable insights and perspectives from other developers.

Shai Mishali first encountered computers at a young age, when he got an IBM XT as a gift. He started to play with HTML and PHP to build something new in that time: websites. Around 2011 in one of his early jobs, their contractor went bankrupt, so Shai’s boss pushed him to become an iOS developer.

From there, he fell in love with iOS development. His passion for the shiny, touch-based devices, went all the way to the way to constantly learning better ways to build apps for them. By studying open source projects, learning new architectures, maintaining RxSwift (a very popular reactive programming library for Swift), and later on writing articles and books, Shai became a well-known figure in the Swift community. His talks in conferences, usually with great live coding, give the audience practical skills backed by deep knowledge.

Today, Shai works as Staff iOS Engineer at monday.com. He plays a crucial role in architectural decisions and technology adoption strategies, particularly when combining (pun intended) Swift concurrency with reactive patterns. More recently, he’s been diving into core concepts of AI, and how it can help developers in a reliable way.

Shai Mishali

In today’s episode, Shai shares not only his personal journey, but also his thoughts on Open Source, using Swift to build tools, and also two hot topics. First, how Swift concurrency has evolved, and what the changes in Swift 6.1 bring to make it simpler to use. Another important topic is how developers should approach the overwhelming pace of changes that AI brings to the table: MCPs, RAG, and how to make the most of it to become a better programmer, staying ahead of the curve. Check it out!

You can also find the written interview and the podcast links after the video in case you prefer reading or listening, and the relevant links at the end of this page.

Also available in your favorite podcast player
Apple PodcastsOvercastCastroRSS

Swift Toolkit
Hey Shai! We finally managed to find the time to record it after a few months that I've been wanting to. So thanks for accepting.

Shai
Yeah, appreciate it. Thanks for having me.

Swift Toolkit
As always, I'd like to ask for a quick introduction of how you got into programming and how it all started for you.

Shai
So if you don't know me, my name is Shai. Today I'm most known for open source work around RxSwift and Combine, async stuff, some books I've written, and lectures.
It all started when I got a computer very early in my life, as a gift for Passover actually. I played with it since, and then I started with web development - HTML, PHP 3, all these good old languages.
After about 10 years of doing that, I worked for a company where I did backend development. We had a contracting company that did the iOS client and they went bankrupt. So my boss came to me with a CD - yes, they had CDs at the time - and he said, "Congrats, Shai! You're now an iOS developer!"
And since then, that's what I've been doing. About 14 years now, which is quite a lot, since iOS 4. That's how it all started.
Swift Toolkit
And how did you get into RxSwift and become a maintainer?

Shai
Yeah, that's a really cool question. I started off in iOS, there was a lot of Objective-C, and I used to love all of these open source projects - AFNetworking by Matt Thompson, Ash Furrow's work. I used to follow closely and wanted to do my own things as well.
So I started by contributing. I released a few smaller open source projects in Objective-C, and I was very excited seeing apps using them because there weren't so many open source projects back then.
I was always very much drawn to architectures. I find it very enjoyable to play around with Swift and back then Objective-C and try to find the next interesting thing to structure apps for bigger teams, smaller teams, and for myself. And that's how I stumbled upon functional reactive programming.
And reactive extensions in general. And then I found Reactive Cocoa and RxSwift. It started as being a passionate consumer and really enjoying it. I was very much into my work with RayWenderlich.com. I used to do a lot of technical editing for books and tutorials.
And I got drawn into doing open source in a similar way - trying to make code standards better, making it more Swifty and modern, making sure it's maintained well and has great documentation. Krunoslav Zaher was the creator of RxSwift. We really worked closely together almost as partners on this project. After a few years, he moved on to work for Google, and he felt I was in really good shape to take over the project. Because at that point, for at least two years, I was basically maintaining it myself. Since then I've been solo maintaining it for six or seven years now.
Swift Toolkit
And how did Combine affect maintaining RxSwift?

Shai
It's interesting. I don't remember which WWDC it was when they announced it, but I remember watching it. First of all, I was really surprised by them basically not mentioning ReactiveCocoa or Rx or any of these other libraries, but it was fine.
First thing we did was to write down all these operators. At the time we had a book from Ray Wenderlich about RxSwift, and as all of us saw the lectures, we said to ourselves "wow, this is really similar". So in two or three months, we already had a book out about Combine. The first ever Combine book to be released, and it was really successful.
Swift Toolkit
Because the ideas and concepts, they're pretty much the same.

Shai
Exactly, the operators and publishers are observables. So we were very lucky to have that knowledge and being able to apply it to Combine. It was almost the same concept. So yeah, it was surprising, but also good overall.
I think it's great because, before, it was a bit niche to do reactive programming and then Apple blessed it and it became this thing that everyone does.
And it also forced us to create another GitHub organization, called CombineCommunity, where we created more open source projects for Combine. We also did a RxSwift to Combine cheat sheet and a blog post and basically tried to bridge the gap because RxSwift was very mature and had all these capabilities and Combine was very young and missed all these things.
So yeah, we also released RxCombine so it made it easier to bridge observables to publishers and vice versa. Overall it was a great project. I'm sad that Apple basically didn't add anything to it since it was released - basically was dead on arrival, I think.
Swift Toolkit
And now, with concurrency... first of all it doesn't match all the mental models.

Shai
Yeah, and the ergonomics you get... with Swift 5.5 when Swift Concurrency was released, it was cool because we were "oh, finally we can use await on stuff". It was cool. But then when we were looking at AsyncStreams or the comparable of publishers, it was "How do we merge things? How do we combineLatest() things?" It missed all these things.
And also what you called sink() in Combine, or subscribe() in RxSwift, becomes now a for loop. Which is nice when you have one, but it was very difficult when you have a lot of AsyncStreams. I think that even up until today, it feels there is still a huge gap there - a lot of stuff missing.
They released AsyncAlgorithms, which is nice, but also not a single commit to it since December 2023. I'm interested in where they're going to take it this year or next year, because I feel if you're telling us this is the blessed way, then you should also give us the tool set to enjoy it.
Swift Toolkit
Yeah, and also talking about Combine and concurrency. If you want to use them together, you probably need to put some @preconcurrency, annotations.

Shai
That's another weird thing. I think when Apple released Swift Concurrency, they didn't add concurrency support. Definitely not targeted or complete concurrency protection. They didn't do any of that for the existing stuff. Even notifications, NotificationCenter isn't Sendable and all of the Combine publishers aren't Sendable as well. They're not concurrency safe.
So it's very confusing as a developer stepping into it - what's the right tool to use? Yeah, but I think there's still a lot of potential there. I think it's been a natural step to add concurrency, generally a concurrency model and what can go across which thread boundaries and the thread pool and all these things. It makes a lot of sense, but just missing a lot. We kind of feel we're building the bridge as we're walking on it.
Swift Toolkit
That's and going on that direction, I feel that by far one of the episodes that had the most views and listens was with Matt Massicotte where we talk a lot about concurrency. And I feel that there is a lot of fear or the sensation that we are...
I'm feeling this all the time, that I'm lacking behind on concurrency, and many teams I'm sure feel the same. What are some tips that you can give to teams and developers that feel this way as well?
Shai
So I think it's a really good question. I think Apple has done similarly to when they released SwiftUI - they gave us this great technology, but didn't really provide us with a lot of standards on how we should use it.
So those standards are very unclear, but I think also, telling us just put @MainActor in everything, it's not a good standard.
Swift Toolkit
Now there are some compiler changes.

Shai
Yes, so with Swift 6.1, there's finally default isolation, which is great, I think. It was very sorely missed. Also new non-isolated options. But I think still, it's you don't know when to use what, and the diagnostics are still very confusing. When you hit a wall, it is very difficult.
For example, just a weird API quirk that I noticed a few weeks ago, but also bumped into today. If you have AsyncStream and you have the protocol AsyncSequence and it's supposed to be generic over element and failure, but being able to return any AsyncSequence generic over them is only supporting iOS 18 and above. I guess it's because they didn't make it a primary AssociatedTypes in those earlier releases, but now it's a bone in the throat.
You can't use it in very expressive ways and you have to use a concrete type, which is way less flexible. So yeah, I think Apple are trying, the entire concurrency team at Apple are trying to fill in the blanks and make it more ergonomic and more user friendly, but I still feel there's still a very long way to go.
And also ties into the fact that Swift has become a general-purpose systems language and not just a language tailored to iOS. So now there are way more concerns around consuming and borrowing - stuff that you barely use in the iOS world... and non-copying, and all of these things, outside of iOS they're very useful. Like when using Go, and Rust, so it's really interesting to see how Swift evolves, especially since Lattner left at the time.
Swift Toolkit
So to wrap up the question, what would be your go-to resources?

Shai
Yeah, I think first of all, in reality - and reality means not being a solo developer, you work in a team. I think it's a mix of everything. What we've been trying to do here at monday.com is that we try for new code to be written with new standards with async-await and AsyncStreams. We have some helpers and stuff, but also we have good bridging between all of the layers.
So if you have an old module that has RxSwift... and in RxSwift I think 6.5, we've added a way to go from Observable to an AsyncStream, and also a way to await on a single value. So it's easy to bring the old observables into the concurrency world. And we also have the same bridging with Combine across all the layers.
So if we, in the bigger team, would make a feature usually in one isolated concurrency model, and it simplifies things. But I think if you start learning today, then you'll probably learn async-await, and you'll probably also learn a bit of Combine because you still need it for some things.
I mean, if you're targeting under iOS 17, then you're going to use the ObservableObject. You're going to use @Published. That's a CurrentValueSubject under the hood. So you're going to want to know how to use it. But if you're targeting iOS 17 and above, then it's probably less of an issue. The observation framework is very powerful!
Swift Toolkit
Makes sense. And changing subjects a little bit, let's move to what the website is about, which is tooling in Swift. Last year we were in Swift Heroes 2024. And we met Pedro and Marek from Tuist - which is a great tool that we also use here at monday.com.
What are your thoughts about tooling in Swift and your experience? Did you have any tools that you wrote that you were proud of or maybe even contributions to Tuist?
Shai
I really love this story about that we met them. And we also bumped into people from Bloomberg, including Nick Lockwood. I think when people ask me, "why do you even do open source?" And I usually do it for altruistic reasons, but it's fun that you get to meet people from all over the world.
I remember that I did this talk in a conference called Next Door in San Jose and all of a sudden I met one of the contributors to RxSwift from Tokyo or something, another one from Germany. I thought, "you're just names, you're just GitHub handles", and all the sudden they're real people. It was the same way with the Tuist folks. It was really cool hanging out with them.
We're proud users, both of us are proud maintainers. We're also supporting them financially - we're contributing to the project from the company, which is something we're super excited to do that we have the option to do. And so that's amazing. I think for me I always loved tooling in general but I think that Swift is a very interesting language to write tooling in and it also gets better all the time.
Four or five years ago, I was at another company, Gett. We released an open source project called Prism, which is a CLI written in Swift. And it was before async-await, obviously. You had to constantly have a run loop so it doesn't stop the app or something, because you couldn't await stuff. But it was still very fun, because you could have all your models shared across the CLI and another tool, and it's all of this language you love and enjoy.
Swift Toolkit
Like a macOS app for example

Shai
Yeah, exactly. If you have a Mac OS app or even if you have an iPhone app that integrates somehow with your project. In this case, it was a project that took design tokens from Figma and design metrics, or from Sketch. And convert them to agnostic code for Swift, Kotlin, Web via a templating engine.
And it was really fun to work on. It was really fun that they let me do it on the company dime basically. And yeah, I also did a bunch of talks on it, even in DroidCon, which was fun. I felt like a Trojan horse in an Android conference talking about code written in Swift.
It's really fun to be able to take this language you really love and build tooling you really love. And it's getting better and better every day with await and with new constructs coming to Swift language and more deploy areas for web servers. Very happy with the progress there.
Swift Toolkit
Yeah. And from an old topic, which is open source to the latest hype: AI. As time goes by... it's inevitable, right? We cannot pretend it's not here, it's affecting our day to day. And if you just force to close your eyes, you can miss a lot of stuff.
I'm lagging behind in many concepts: MCPs, RAG, and more. How do you feel things are going to be for coders in general? And what are you doing in order to get prepared for this new era? Or what are you focusing on learning?
Shai
We're going to be seeing more and more acronyms. So we have, yeah, not just AI and MCP and RAG and a lot of tools that are forced into new acronyms. So we have a lot of new terms to learn.
But with the joke aside, my thought of it is that initially, I was worried - "Is it reliable? Is it going to take all our jobs and all these things? Is it pure hype? Is it actually going to be useful for us?"
And after a very short time after these thoughts, it became extremely powerful with more OpenAI models, more Anthropic models. To the point that, yeah, it's extremely fast. I think that having six months cycles or three months cycles to new models that are 10x more parameterized, more capable is absolutely insane in terms of innovation.
Even compared to Apple that has yearly cycles. It's a completely different train. They're on different release trains, access to the consumer who is the developer eventually. And also AI isn't just developer centric, but I think it's a huge market for them. It's also an entry point for AI.
Swift Toolkit
It's evolving so fast.

Shai
I think for me in the day to day, I would split it into two. First of all, it's the web and backend area and then it's the iOS area. I think I've been able to be way more productive and capable even with languages like TypeScript and Rust and even Ruby because there is just so much data out there that these models are trained on.
If you open Claude 4 now, I think a few days ago I went to write a URL preview feature for one of my apps. So you need to build an endpoint of the preview, you need to make a table to store the previews, link them to the messages, all these things. I basically asked Claude in an existing Next.js code base to do it in one shot and it did it 95% correctly.
I then asked it to split it into meaningful commits and re review its own code and it was extremely well done. You also know, Peter Steinberg, who used to do PSPDFKit and kind of went off the radar. He's back to building because it kind of sparked this thing in him and now he's running.
Swift Toolkit
It's like having developers serving you!

Shai
Exactly, he's running, he says he's limited the amount of screens he has at this point. He has a bunch of screens with Cursors running with agents, each of them with their own specific mission that they're building. It's absolutely insane.
And in counter to that, the amount of knowledge in the iOS world that these models are trained on is still very lacking.
Swift Toolkit
Even SwiftUI. SwiftUI was launched in 2019.

Shai
Yeah, five, six years ago, but also there were a lot of changes. You probably remember the big migration from Swift 2 to Swift 3. So I think it's very fair to compare that pain to SwiftUI. It was "wow, you can do anything" and then you can do some more things and then it breaks, and then you can do some more things and it breaks again. So it's very similar to that journey.
Swift Toolkit
How this affects AI?

Shai
I think it affects AI that it has a lot of data, but not all of it is relevant and it causes it to hallucinate more and give you less meaningful results. And also it isn't as effective yet, and I emphasize yet because I think it's just a matter of time. It isn't as effective in doing really large pieces of work.
I read that Apple is planning to release big development tool enhancements this year, based on a partnership with Anthropic. It's still very lacking and it is a bit annoying, especially if you look at the Google keynote and everything, all the AI stuff they've added into tooling and their even on device models are extremely powerful. So it kind of feels we in the iOS community are a bit behind in those senses.
But you can still do very powerful things. Tests are the obvious use case. If you give it an existing test, even written in SwiftTesting, it's basically able to replicate the way you do the tests and do it in a really nice way, getting you 90% there.
Swift Toolkit
And how do you make sure that you're still relevant to the market?

Shai
That's a hard question. I think being relevant means you're always using the latest tooling. Whatever is around the corner, you need to be on top of it. You need to make sure you're staying ahead of the curve. So it means it's easy to be "this is not a thing and I'm not gonna deal with it and I'm going to get to it one day". And then when everyone are using AI, you don't know anything.
So I think it's critical to play with it. And even if it doesn't help you yet in your day to day, which is very difficult because I think even if you're using ChatGPT, it's extremely helpful for your day to day. You need to understand at least what it can do and what it can't do and maybe try to figure out what are the latest things.
I think we also are lucky that we work at a company that has a lot of R&D and people are playing with things all the time. We get to be exposed to these things. I think if you were just an iOS firm, it would be much harder to stay up to date because you're not as exposed to new things happening around you.
So staying relevant means keep learning it was before AI, right? Before AI, you want to stay relevant. You need to be on latest Swift, latest iOS, know all the new things, know all the latest paradigms and be professional in your craft. And AI is also a new craft that we need to hone and add to our tool belt, to our skillset.
Swift Toolkit
Yeah, that makes sense. And to finalize, you're flying in a few days to WWDC 2025. What are your Top 3 wishes?

Shai
My first wish is it would become a real conference again and not a keynote only event. And really awesome community events throughout the week. But you know, there's CommunityKit and the RevenueCat bashes - all those things which are amazing. I really think this is the main reason all of people even fly out there without a ticket. One More Thing is also a great conference.
Swift Toolkit
But what about technical announcements?

Shai
First thing, and that's been on my wishlist for the past seven years, better Xcode. The first thing is obviously a more AI-capable, AI-focused model for Xcode. My dream would be Apple coming out and saying, "Hey, we took all of the code we have inside Apple and put it in a private model that Claude knows" or something along those lines. And now you have this extremely capable model that knows all the stuff that Apple has available.
It isn't even available outside. But you get these new superpowers because right now we're very much lacking behind. And I think it was also very underwhelming last year if anyone was there - all these huge promises about Swift Assist and Siri, App Intents - nothing was released. None of these features work.
It's painful to see as an iOS developer. We've been doing it for 14, 15 years. It's part of you. It hurts to see that it's going this way. I'm super hopeful that this year is going to be extremely good and corrective. So that's the top one.
Second one would be SwiftUI - more SwiftUI parity with UIKit, but also more stability. I feel SwiftUI is the biggest issue that I feel is that it is not only not backward compatible, it's also not forward compatible. It breaks in either direction and it's very unpredictable. I always say it's a really big brush and you can draw really nicely but then when you want to do the fine painting with a small brush... It doesn't know how to do that. So it's the control stuff for example... But it's also just APIs don't - you have this scroll position API which is nice to know when the item is on screen or off screen... But it works differently in iOS 17 and 18 and even on 16 where it's supposed to be supported.
And third is not software. I'd really love to see a cool new hardware leap in some sense - maybe cheaper Vision Pro to make it more accessible to consumers, maybe glasses. Still, those would be my big 3. And yeah, I'm going to hit all the labs and badger Apple engineers to ask them to look at all my bugs that I collect and all my feedbacks that I collect throughout the year for sure. Oh! AsyncAlgorithms, better AsyncStreams! Yeah, I'm saying this too. Sorry, fourth item on my list.
Swift Toolkit
Awesome. So safe travels.

Shai
Thanks! If anyone reached until here, and you're going to DubDub, feel free to reach out. I'm there for a week and a half. So if you want to hang out, meet, feel free to reach out and we'll set up some time for a good old coffee.
And yeah, we did not even talk about my coffee addictions. Maybe on the next one.
Swift Toolkit
Haha yeah! We'll leave it to next time. Thank you so much Shai!

Shai
Yeah, appreciate it. Thank you!

Swift, Xcode, the Swift Package Manager, iOS, macOS, watchOS and Mac are trademarks of Apple Inc., registered in the U.S. and other countries.

© Swift Toolkit, 2024-2025