Issue #64 - Andrew Yates
Happy Monday, everyone!
We made it to Issue #64! 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 Andrew Yates.
👉 Please make sure to follow them or support them anyway you can! 😇 I’m excited to share their indie dev stories.
Senior iOS Engineer at Buffer and creator of Alpenglow
1) What is your name? Where do you live?
Hey, I’m Andy. Live in San Francisco, but I’m originally from Birmingham, UK.
2) Introduce yourself. Education? Background? Main job? Interests outside of tech? Interests inside of tech?
During my last few years of school I could often be found at home (oops) hacking away on HTML/CSS layouts for various people/companies.
After school, I avoided going to college and managed to get a job at a web agency where my primary focus was building out HTML/CSS and turning that into WordPress sites. Soon after iPhoneOS 2 came out, we started pitching app ideas to clients. A client liked one of our ideas, and we then scrambled to figure out how to do it. I remember having two days alongside someone from a local university to help kick off the project, and somehow I pulled it together from there. Safe to say, I spent a bunch of time on StackOverflow and the Apple documentation.
We did a few other apps, but I wanted to spend more time building apps rather than WordPress sites. As I wasn’t working on enough iOS projects at my day job, I started an app called Magic Bean, an iPhone/Mac client for Beanstalk to scratch the itch. I would spend evenings/weekends in various coffee shops hacking away and learning my way around iOS. We ended up forming quite a group of people working on side projects.
One of those people was Joel, who was building Buffer. He left for San Francisco, and a few months later, he reached out about a Buffer iPhone app. I worked on it alongside my day job and Magic Bean before joining full-time in 2012, and I’m working away in the same codebase ten years later as a Senior iOS Engineer alongside Jordan Morgan.
Outside of tech, I’m a huge coffee addict and enjoy playing video games and watching Formula 1 (including keeping another side project F1Calendar.com up to date) and spending time with my fiancée and our two dogs rabbit, three rats, and hamster.
3) Have you ever considered yourself an indie developer?
Not really, as it’s not my full-time job. But as Alpenglow is now generating more revenue, I’m warming up to it.
4) What got you started/interested in creating your own applications outside of your “normal” job?
I’ve always had little side projects going way back, from CSS Gallery sites, blog aggregators and even band fan sites. My side projects tend to be about learning something new or related to hobbies I have. In the early days, it was about learning as much as I could about iOS while also making it super easy to deploy our WordPress sites via Beanstalk.
5) How do you balance your time between friends/family, work, hobbies, and indie dev?
I’ve always been pretty terrible at balancing things. I’m a bit of a workaholic/codeaholic, especially as I class some of my side projects as hobbies. I’ve gotten better about balancing stuff over time. Years ago, I’d be sat on the sofa with my laptop each evening hacking away, but that never happens now.
I’m fortunate enough to work four days a week now, which has made it easier to spend a day focused on building new features in Alpenglow or exploring other wild ideas that may never see the light of day.
6) Alpenglow - I love sunrises and sunsets but I don’t think I’ve even looked into the details of them for things like “Blue Hour” and “Golden Hour” 😅 But Alpenglow has changed my whole outlook on sunrises and sunsets! It’s so nice to be able to get a forecast of the quality 🙌 What got you interested in sunrises and sunsets to make Alpenglow? How has the app evolved over the years?
I’ve always loved going out with my camera and shooting sunsets. I’d do the same for sunrises, but I’m more likely to be asleep! It’s just the perfect time of day to take your camera out and take a few photos or just watch and enjoy.
Alpenglow started as a very different app from what it is today. There used to be a popular map in the UK that would crowdsource snow reports on Twitter with people sharing how heavy the snow is, postcode including the #uksnow hashtag. I wanted to try and apply that to generate alerts to reduce the risk of people being inside their home/office and missing a stunning sunset. Unfortunately, this ultimately failed as it didn’t have enough users to make it work.
I then tried to detect spikes in sunrise/sunset photos shared on Instagram, but usage was still low, and it got complicated as APIs became less open.
After a while, I came across a project by a few meteorology students from Pennsylvania State University called SunsetWX, which generates quality forecasts for each sunrise and sunset. Fortunately, an API was on the cards, and Alpenglow could use the beta, and usage picked up. Since then, I’ve been able to add things like Forecast Notifications which are scheduled entirely on the device to avoid storing user locations.
7) Alpenglow - As I mentioned in the previous questions, I didn’t know there. was more to sunrises and sunsets besides the time it happened. How do you determine quality and what is the difference between “Blue Hour” and “Golden Hour”?
SunsetWX does the complicated forecasting to determine the quality. Using various weather models worldwide, they consider the moisture, pressure, and cloud cover at multiple heights and return a forecasted quality.
People tend to have their own opinions about what makes an incredible sunrise or sunset. Some people favor a completely clear sky with the sun hitting the horizon, while others prefer a sky with clouds that take on orange, reds, and even pinks. A Great rating in Alpenglow is a sunrise/sunset with high clouds that pick up color, while a clear sky is scored fair.
Golden Hour refers to a short period right before sunrise and sunset where the light from the sun basks a warm golden glow over everything. It’s great for capturing portraits.
Blue Hour occurs before sunrise and after sunset when the sky is a deep blue color, and everything gets bathed in blue hues. It’s great for shooting a cityscape.
8) Alpenglow - I can’t get over how awesome that onboarding screen 🤯 The sun slowly setting when I completed each step was a gorgeous way to show progress. It’s a great first experience and introduction into what Alpenglow is! How did you think of this idea and did you design it yourself?!
The current iteration came about after taking the App Icon design that the talented Michael Flarup did last year and bringing it to life in SwiftUI for the initial launch screen.
I’ve always struggled to come up with something I’m happy with for the onboarding in Alpenglow. Even with this iteration, I’m not super satisfied with it as it was an afterthought to take the animation and apply it to the onboarding, so I’m glad you liked it! I added some subtle pulsating to try and make it a little less static as it’s on-screen longer than the initial launch screen transition and made it step through based on which step you’re on.
I’ve just had Michael work his magic on some feature artwork that fleshes out the scene with a mountain range in the background and a grass/path-covered mountain in the foreground that might make a good future iteration.
9) Alpenglow - Alpenglow’s pricing and feature locks are really well done and the screens describing what’s included are great! I struggle with where to draw the line on what should be free and what should be paid for. What was your thought process on what should be free, in Plus (tips), and in Pro (subscription)?
Thanks, I have struggled with that stuff also. Christian’s breakdown of tips/subscriptions in Apollo has inspired the current setup.
I pay SunsetWX for a set number of requests per day. Previously the app was free so I was paying the non-commercial rate out of pocket, and along the way, I introduced tips. After a while, we agreed to switch to the commercial rate, so I decided to add in Subscriptions for the more advanced features requiring multiple API requests per day while also grandfathering existing users who had paid.
Free users get to see today’s and tomorrow’s forecasts. Alpenglow Plus users can see up to 4 days into the future, but there are no features that hit the API every single day without user interaction. Pro includes Forecast Notifications and various Widgets, which will always use multiple requests.
10) Alpenglow - I noticed that there was a menu item in the Settings for “help Translate Alpenglow”. I’ve wanted to get translations in my apps but never knew how to source them. I also didn’t know that POEditor existed 🤷♂️ What has your experience been like with POEditor? Is it pretty easy to work with? Would you suggest this service to others? 😇
When I launched v6.0 I wanted to get a couple of new languages into the app. I used translated.com and paid for four languages. 1Password’s Crowdsourced approach has always inspired me. I had come across POEditor while looking for a solution at Buffer. We’ve used CrowdIn before but ended up allocating the cost of that to some other tools.
I set up POEditor and used a configurable notice in the app for a few weeks to guide people to the Public POEditor page where users can localize the app in existing or even brand new languages.
51 languages have been added, with 1410 contributors signed up. From that, I’ve managed to add 22 languages to the iOS app, pulling them in when they are around 90%+ complete.
I’ve also been experimenting with incentivizing it so contributors who translate a bunch of strings to a language can get a promo code for Alpenglow Plus or Pro. I’m working on making that flow a little more seamless so I’m not having to monitor POEditor and instead ask contributors to complete a form that I can validate in POEditor and grant a gifted upgrade in RevenueCat.
The pricing is a little on the steeper side as it doesn’t just count the number of strings in the base language; it counts translated strings separately, so with 51 languages, I’m already at the Premium tier with an app that has 340 strings.
11) Alpenglow - I got a nice little notification in the app to follow the Alpenglow Instagram account and 😍 I have never seen sunsets like the ones that are posted there! Are most of these shared by users? Are some of these yours? Do you have some favorites that you can share with us?
That notice is super useful for handling any downtime or pointing users to Instagram or even the localization project. Glad I added it, as I’m sure it’s saved me from a few bad reviews when SunsetWX has had a bit of downtime.
There are a couple of my shots if you scroll back far enough but for the most part, they are a combination of photos from Unsplash/Pexels and users.
Around sunrise/sunset, the app will show a prompt to submit a field report where users can share their rating along with a photo. As part of that flow, I ask for permission to share the photo and their Instagram username. I then use the Buffer API to add them to my Approval tab in Buffer to pick out shots and add them to the Alpenglow queue.
I was lucky to grab this shot in San Francisco along the Embarcadero a few years back https://www.instagram.com/p/BgZYXIrnjLP/, also love the colors in this more recent shot https://www.instagram.com/p/CSHp3K0swu7/.
12) Alpenglow - What’s next for Alpenglow?! Do you have any future features that you can share with us?
I’m actively working on a couple of projects that use the field reports to improve the accuracy of the quality forecasts. Had a few breakthrough moments in the last month or two and just need to find time to get them over the finish line.
Some improvements to the Forecast Notification options so you can independently set the delivery time for Sunrise/Sunset notifications. You can only set a single offset right now, which isn’t super helpful as you’d probably want your sunrise notification before bed so you can plan ahead.
I’m also working on a few new ways to share forecasts. Earlier this year, Alpenglow popped up on a TikTok video, which gained 2.5 million views. It wasn’t an audience that I had previously considered, but I’m hoping to find some cool ways to improve sharing to TikTok, especially as that drove enough interest to get Alpenglow to #1 in Top Free in Spain.
13) What’s been the hardest part of being an indie dev? What’s the most fun part of being an indie dev?
The most challenging thing is finding time for all of the wild ideas I have. I try and keep things as lean as possible to get it out the door to see if it sticks, but even then, I have app ideas I’ve sat on for years, along with apps that I think I can make successful but have abandoned. A close second is getting eyes onto what you’ve built.
The fun part is iterating quickly and getting something out within days, and seeing how it goes down. Something that gets harder as companies grow from the early scrappier days.
14) Is there anything else you’d like to tell the indie dev community about you?
I’m on Twitter @ay8s. If you’re into Formula 1 or any kind of racing, check out my other side project F1 Calendar, and its various offshoots.
15) Do you have any other indie devs that readers should follow / lookout for?
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 😜