Issue #131 - Marin Todorov
Happy Monday, everyone!
We made it to Issue #131! Thank you to everyone who read last week’s issue ❤️
Deep Dish Swift is a brand new conference being held in Chicago April 30th to May 2nd in 2023. The conference aims to bring togethe Swift and iOS developers of all experience levels and backgrounds in an inclusive environment to share knowledge and experience from a diverse set of speakers. The first day is focused on indie development and and the next two are focused on Swift and iOS!
Today’s Spotlighted Indie Devs
📆 Today I’m featuring Marin Todorov.
👉 Please make sure to follow them or support them anyway you can! 😇 I’m excited to share their indie dev stories.
Creator of dataTile and author of Modern Concurrency in Swift
1) What is your name? Where do you live?
I’m Marin Todorov, I’ve lived in various places around Europe but the last few years I’m based in Germany.
2) Introduce yourself. Education? Background? Main job? Interests outside of tech? Interests inside of tech?
I began programming when I was 12 years old on an old 8bit computer, so creating software is a part of who I am rather than just my job. I couldn’t afford to study so I began working as a developer full-time a year after graduating from high school. I spent ten years building web projects and then started with iOS and macOS development in 2010. More recently, I got to work on some cool projects for Apple, for example the open-source Swift DocC which is part of the Swift toolchain. Currently, I don’t have a main job; I was supposed to start with an SF-based startup but they rescinded the offer in the last moment — silver lining: that freed up some time to finish my latest indie project - dataTile for Simulator 🎉
I like to balance doing tech all day for work with non-tech hobbies — I’ve been doing Japanese calligraphy and Japanese pottery for three years, I love museums and art, and I especially enjoy doing street art tours when I travel.
3) Have you ever considered yourself an indie developer?
At the beginning of the App Store, definitely! I and couple of friends began exploring iPhone app ideas at the end of 2009 and we released a few in 2010 (and more later on).We were fortunate to create a few apps for doing fun things with photos at a time when the Photos category in the App Store didn’t have much going on, so we had way more success than we expected. (So much so that the Apple Photos team reached out for a job interview which was a cool experience.)
4) What got you started/interested in creating your own applications outside of your “normal” job?
I’ve been making apps for fun long before I had a job, so it was natural for me to try to build some ideas on the side even when I had full-time jobs. I believe it is a healthy habit to keep your mind flexing on problems outside of your daily routine. It also allows you to be more playful and experiment with things you wouldn’t normally get to do on the job — for example I built a Swift Codable library that uses Markdown as storage, how fun is that? 😂
5) How do you balance your time between friends/family, work, hobbies, and indie dev?
It’s difficult. Family and work always take precedence but I and my wife plan ahead in a shared calendar bits of time for ourselves so we both get time to, you know 😅, have personalities outside of being a working mom and dad.
6) dataTile - Congrats on your recent release of dataTile 🥳 dataTile fits my debugging style perfectly! I’m so good at print debugging 🙃 When and where did you get the idea for dataTile?
Thank you! The last few years I worked on various SDKs and/or asynchronous and concurrent code where breaking in the debugger isn’t ideal. I kept wishing for little bits of UI where I can easily track the app state or different metrics, but adding and removing that code got tedious. Not to mention printing in the console adds lots of noise and data is difficult to find. This is how I ended up with the idea for a flexible smart UI that models itself to prominently display the data you are logging in your app.
Once I figured the main goals of zero-configuration, no dependencies, and making sure the app is fun to use, it all really came together.
7) dataTile - I’m a huge fan of making developer tools but I always struggle with productizing them 🤦♂️ I also tend to just build most for myself 😅 How did you know that you wanted to turn dataTile into a sellable product? What steps did you take to productize this?
As I mentioned, I built a whole bunch of tools last year — but I always had to explain them to people because, frankly speaking, most of them solved too niche of a problem. When I made the prototype for dataTile, everyone “got” the idea from a short video and some screenshots. Motivated by that, I put a lot of effort to make it run in the App Sandbox so I can ship to the App Store, to lower the OS requirements, and build a free hobbyist version that also serves as a trial for the Pro version.
8) dataTile - What are some of the common scenarios that you think dataTile could help improve a developer’s debugging experience?
Just a couple of common scenarios I use are:
Any valuable log data stays pinned in a tile instead of flying by in the console. For example, when my app starts I log the current app configuration that I’m testing — “paid” or “free”; it remains always visible in a tile so I don’t forget and test a different behavior.
Track app state that isn’t represented in the app UI. One such use case is fine tuning a cache or some data buffer: you can always log the count of stored objects but that doesn’t make identifying trends trivial at all — a tile on other hand can automatically plot the data as a chart so you can instantly see if the cache is purging data as expected.
I think the app’s value boils down to making your data more visible and easier to interpret without you having to go out of your way. It just saves you time and effort, as simple as that.
9) Timelane - Timelane is soooo cool! I rarely used Xcode Instruments but being able to watch asynchronous tasks just seems like the perfect use case for it 🤩 What were some of the hardest things to accomplish when building Timelane? What were your decisions about keeping this one free and open source? Is there anything you wish you were able to do that you couldn’t?
Timelane has a long history — I had a somewhat crude prototype that worked with RxSwift back in 2016 but the UI part felt really tedious to build. That’s why when I figured that I can let Xcode Instruments display the UI and I can drive that from code — I got very excited! The hardest thing was definitely to figure out how to use the XML-based API for building custom instruments, there wasn’t more than a couple of examples out there to get started with…
10) Swift Concurrency - Writing a book has always been on my list of things I want to do! What made you decide to write a book about Swift Concurrency? Did your Swift Concurrency book come from your experience building Timelane? What are some things about writing a book that some of us might not know?
I’ve been a big fan of asynchronous and reactive programming since 2015 when I started with RxSwift. Since then I worked with other authors on books that cover RxSwift and Combine, and last year when I wrapped up my work with the team at Apple async/await had just come out and it felt natural to try and translate all the experience from the previous async frameworks into a new book that covers Swift’s modern concurrency. Spoiler alert — that pervious experience didn’t really translate well so it was actually a ton of work to get that new book out :D
11) dataTile, Timelane - What’s next?! Do you have any future features that you can share with us?
In the short term, I do have few minor dataTile versions I need to ship. I lowered the OS requirement to macOS 12 in the last moment before releasing and had to rebuild some of the SwiftUI features so quickly that there are few UI wrinkles to take care of before adding new features. Then, I’ll add more customization options like for example being able to build an ignore-list so logs that other frameworks add don’t spawn noise tiles.
Further, many people have asked for a non-sandboxed version that works with their mac’s log instead of the Xcode Simulator. I have this working on a local branch already but getting it to a release state is a problem: the current app uses App Store subscriptions plus RevenueCat but a non-sandboxed version will need a completely different setup so that’s likely to take a while to set up and build.
12) What’s been the hardest part of being an indie dev? What is the most fun part of being an indie dev?
The hardest part for me is definitely getting the word out. Since 2010 I’ve “pinged” the press and reached out for an app store promotion for every indie app I’ve released and I’m yet to hear back…
The most fun is definitely working on whatever feels best! For example: I designed dataTile’s icon myself, I designed the UI, I did set a goal to use 100% SwiftUI just because I wanted to push my limits, I just did everything that felt fun and really enjoyed the process!
13) Is there anything else you’d like to tell the indie dev community about you?
I help organize NSBarcelona — in case any of you is visiting the city and would like to showcase your app or present about Swift or related topics, we’d love to have you!
14) Do you have any other indie devs that readers should follow / lookout for?
I know many developers and I love buying in1die apps… folks should just open up https://twitter.com/IndieDevMonday and follow everyone featured there :)))
Newly Released and Updated Indie Apps
Here are some newly released and newly updated apps from this past week! If you would like to possibly see your app in this list, please submit your app to the look at me form 👀
Thank you to everybody who made it to this footer! You either spent the time to read or took the effort to scroll 😊
Make sure to visit https://indiedevmonday.com/subscribe to get an email of future issues!
And go to Twitter and give @IndieDevMonday a follow… or multiple follows if you manage more than one Twitter account 😜