Issue #111 - Marc Palmer
Happy Monday, everyone!
We made it to Issue #111! 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 Marc Palmer.
👉 Please make sure to follow them or support them anyway you can! 😇 I’m excited to share their indie dev stories.
1) What is your name? Where do you live?
I’m Marc Palmer and I live in Stroud (in the Cotswolds) in the UK
2) Introduce yourself. Education? Background? Main job? Interests outside of tech? Interests inside of tech?
I’ve been a freelance programmer for 25 years now. I was lucky to be one of those 1980s kids with early computers like ZX Spectrum, BBC Micro, ATARI ST at home when I was in my early/pre-teens. I coded at that time and was part of the ATARI demoscene in the UK when I was 15-17.
I went to a very British school with the silly ties and stuff and I hated it! At 16 I begged my Dad to employ me doing support in his one-man music business software company — that and the job it later morphed into are the only “permanent” salaried job I’ve ever had. For better or worse 😀
My main job is senior iOS engineer on the sketching app Concepts, which I started back in 2018. It’s a great company run by lovely people and we’re all-remote. I’ve learned so much working on a large mature codebase with a very large user base. It has brought several career highlights like my code running on all the iPads in Apple Stores worldwide! Not through my own efforts of course, but it’s nice to think about those bytes you created running on there.
Outside of technology… I’ve been vegetarian for about 30 years and vegan for some of that, so food, chillis, pickled gherkins (not the briney stuff!), coffee, green tea… I’m a huge metal lover and play guitar and drums but not very well at all. I know which gourmet mushrooms to pick in the woods, and love green countryside and woodland and the sea.
Inside of tech it’s the future of computing for everyday human needs, which is why the iPhone appealed to me so much. I spent a lot of time in the past working on Java-ish stuff for enterprises and it’s just so distant from people and the value they get from technology. I’m pretty ambivalent about AR but I think there’s something in there that Apple might be able to turn into something that isn’t just a novelty, and if they do it will change everything.
3) Have you ever considered yourself an indie developer?
I do! Although it is more of a goal than reality so far.
4) What got you started/interested in creating your own applications outside of your “normal” job?
I’ve just always had ideas for things — but not blessed with any real practical ability I can only make the ideas that are software-based. The first real app I made outside work was called Channel Maker for Windows back in 1998 or so. It’s always been there, the desire to create something useful and “clever” that solves a problem for people. That’s what motivates me, and nowadays that comes with product design which most programmers didn’t think much about until after the iPhone.
When the iPhone came out I started pushing my way through Objective-C as I really wanted to make something for it. With a young family at the time, and my disdain for manual retain/release, it proved hard to put in the hours to make something great (and learn enough about design) so it wasn’t until 2013 that I put out my first iOS app Soundproof which is no longer in the store.
5) How do you balance your time between friends/family, work, hobbies, and indie dev?
At my age — almost 50 😱 — there are less demands on my time now to look after the kids as they are teenagers, but honestly I struggle with this. Taking several evening walks a week with my wife on the common here has been very helpful this Summer.
My day job is clearly demarcated because I pay for my own small office that is a short cycle from home — which helps me keep reasonably fit. I spend a bit too much time there, but generally the day job stays there now. I worked at home from 1996 until 2012 and let’s just say that’s not great for your mind!
However this means that my indie dev work takes place around the edges of all the normal day to day life, so it’s evenings and weekends. There’s not much time for anything else right now because of day job and Captionista workloads… but maybe since the launch is out of the way I can get to doing some more work on our garden which is a jungle right now.
6) Captionista - Congrats on your recent launch of Captionista! I totally love this concept and the execution is amazing. When did you start working on Captionista and what inspired it?
Thank you! I started working on it on 18th December 2019, I just checked in git. Yep, long ago. That was 6 days after the disastrous UK General Election that resulted in so much of the chaos and dysfunction in the UK since.
In the weeks before that I had been volunteering for the local Green Party, helping with social media and tech stuff as our town was a hotly contested seat. I ended up subtitling their social video posts — this was pre-Reels, pre-TikTok, so mainly Instagram videos — and the experience was pretty awful.
I searched for something good, and in the end I paid for a web-based service where I could manually subtitle it all and they’d render and export it. I could not believe there was no good solution native to iOS. AI was barely an option then and was very expensive, and even if it was I wouldn’t and couldn’t have used it. The video players didn’t even autorepeat so you were constantly having to drag sliders to get back to where you misheard something.
The reality with this kind of task is that you get sent a low-quality video via WhatsApp (🤦♂️) from someone who has no idea how to record good video, sometimes recorded on a phone from 50ft away in a large noisy room. It was often hard for me to understand what was being said, and an AI would have no chance!
So I was despondent after the Greens didn’t win in my town. Seeing the mess of UK politics and inaction on climate change, and having learned quickly how important and nuanced subtitling is given the rapid shift to video-based social media, I thought that I could make the most, albeit small, difference to the world by making it really easy for people to add subtitles to campaigning/activist videos, and that I might be able to make a good income off people who need it for business.
7) Captionista - I’ve always imagined that captioning videos would be a terrible process but I’ve actually be enjoying this process with Captionista! I don’t have nearly enough videos to caption to I need to make or find some more 🙃 How long did it take you to design this user experience? Did you go through multiple attempts? I just really love it!
That is amazing to hear — it’s exactly what we wanted to achieve, and frankly it is a terrible process which is how I got here! Hearing that kind of thing does make me a bit emotional because this has been such a long process and both myself and Mark Levy who worked with me on the visual and product design have known it makes sense to us but really did not have any idea how other people would find it. You doubt yourself.
I had the original idea for typing all the text and then tapping to split the words when I started it in late 2019 so the initial idea for this didn’t take too long, but it was borne of weeks of frustrating using an “add one subtitle at a time” interface for this. When you want to match the cadence of speech, or deliberately not match it in order to split lines at sensible places or deal with rapid talkers, these kinds of UI are hell on a stick. The key innovation was combining the splitting of text with setting the start and end time of each, and assumptions we can build off around that. That’s why it feels so quick.
I made a very coarse prototype in the very early version of SwiftUI in early 2020 that proved the rough idea. In the two plus years since that though, we kept iterating on the workflow as whole. Originally the idea was for the subtitle timeline to scroll vertically over the video but that was a really bad idea!
As far as I recall we did 2-3 completely different layout iterations of the main workflow UI. The timeline was conceived early on — being vertical it bucks the trend — but details like the merge buttons came later. Earlier the merge buttons were built into the subtitle cards, which made it too busy and confusing having arrows all over the place, and moving them out made space for the start/end time buttons to make more sense in the subtitle cards.
A key challenge has been the styling UI. Initially we were going to ship with very few options… but we bit the bullet and went all-in on it because it is a major part of the Pro unlock to e.g. make your type style match your brand. At first there was just a little bar above the text entry field for font, colour & bg colour.
Once you dig into subtitles and the options you need around alignment and background styles for the different kinds of fills (line-fitting, full width, edge hugging, gradients etc.) it just becomes a whole other thing! We also had to find a way to encourage the user to choose their style before they time and split their subtitles — because a small change to a margin or font size can mean you have to re-time or re-split all the text again.
That’s why we ended up adding the subtitle “Pre-flight Check” rules that will prevent you exporting if any of the subtitles is clipping, and added in the TikTok-style “unlimited lines” option which is an easy get-out if you don’t really care.
8) Captionista - There are so many different styles of captions to use 🤯 How am I supposed to choose which one to use? 🙂 Are some caption styles better than others? Are there different caption styles that are preferred depending on the network they are being shared with?
This is a fantastic question!
This is a whole microcosm. There are no hard and fast rules, but you’ll see we split the default themes into Subtitles and Creative categories. This is imperfect naming but the idea is “subtitle themes are for emphasising clarity and accessibility” and “creative” is where you may compromise a little on those for something more trendy like a chunky font and colourful background for a TikTok or Reel.
In truth most people don’t add subtitles to social videos for accessibility for those who are deaf or hard of hearing — they do it because the audience often has audio off, or they are adding captions that do not match what is spoken or there is no audio. It took me a while to realise that’s the difference between captions and subtitles.
Some of the default themes offer different alignment and layouts, and that is an important consideration based on what your video content is. At the simplest level: don’t use a style that puts a bottom-edge banner across the important action in the video, or the text across peoples’ faces. The goal is generally to have the text complement and augment what is in the video. It is true to say a lot of TikToks/Reels don’t pay much attention to this, and it’s easy to film videos that are badly composed so there’s no great place for subtitles to go.
It really comes down to your taste and what your content and target audience are. Are you going to wear a suit to work or wear your casual clothes? Don’t put the “Circus” style on your political activist videos!
One tricky detail about subtitles: there’s the confusing notion of “closed captions” which you probably heard of as “CC” and “open captions”. I have no idea who came up with the terminology but… “closed captions” mean the text + timing (and sometimes styling) data is inside or alongside the video file — this is what e.g. Twitter’s AI subtitling does. The viewer can configure their accessibility settings to suit their needs.
Whereas “open captions” are just graphics rendered into the video frames, and you cannot turn them off — this is what Captionista does. It gives you full control over the appearance, but the trade off is that you may not be helping some people with accessibility issues. e.g. open captions can’t made bigger or be read by a screen reader, so if you don’t have audio on the video but added subtitles, vision-impaired people may still struggle.
Currently don’t support closed captions but it’s something we’re looking at.
9) Captionista - What was one of the coolest things you’ve learned while building Captionista? What was one the hardest problems you ran into?
Coolest? Because it often gets a bad rap I’m going to say the power of SwiftUI. I’ve used it right from the start, and yes there have been and remain some really tough problems but I would never have made this app with all this custom UI in UIKit. It would have been way too laborious and too slow to iterate on. We don’t have Sketch files full of detailed UI specs — we talk, maybe rough something out on paper or in Sketch and then I implement part of it quickly in SwiftUI and we see how it feels. The cost of failure is very low. I do find the data model stuff really hard — lots of the Style UI model stuff is interrelated between tabs and that is challenging.
Hardest: I just laughed out loud wryly while typing this. There was a point where I think months passed and I made zero progress on some impenetrable crash bugs related to editing the text and keeping the split subtitles up to date with those changes in the timeline.
Trying to keep edits you make in the single text field “do the right thing” when updating the subtitles you have already split is very hard — and it’s natural to have to go back and clean up a typo or add some punctuation. I completely changed the approach a couple of months ago which fixed the issues with some compromises. There’s a lot of logic going on that you don’t even notice when editing re: auto-merging edited or obsoleted subtitles and their timespans, not affecting later subtitles in the timeline etc. The last thing we want to do is screw up timings for things you didn’t edit.
10) Captionista - What’s next?! Do you have any future features that you can share with us?
Yes! We don’t have a scheduled roadmap just yet, we’re waiting to see what users tell us they need the most.
However we have imminent plans to change the way you create documents to make a bunch of other things easier in future (like replacing the video with a new edit), streamlined Export for the case where you directly want to save to Photos, saving custom Themes so you can get consistent look, enhanced video player/scrubber controls… honestly we have a huge, huge list of things we want to do!
Being a subscription app we’re in it for the long haul and have a backlog to suit.
11) What’s been the hardest part of being an indie dev? What the most fun part of being an indie dev?
Hardest part for me, as I have failed to be a financially successful indie dev so far, is the bit AFTER launch: continuously marketing and trying to build the customer base. I want this to be a sustainable business and one day reduce my contracting work, so it requires doing this stuff that always feels less enticing than coding — except when it pays off like it has with the incredible MacStories review we got!
The most fun part is designing novel interactions or features with a lot of thought behind them. Typically its the stuff the users never consciously notice but they may notice when another app doesn’t have it. The Apple-ish things.
For example the amount of effort we went to in order to make sure you get even-looking padding on subtitle backgrounds so e.g. the baselines don’t look weirdly offset, and with a minimum padding proportional to the size of the font. This means the user can’t even select a value that looks terrible. (Caveat: some fonts have terrible metrics — Apple what are you even doing not fixing the terrible metrics of e.g. Hoefler Text?)
12) Is there anything else you’d like to tell the indie dev community about you?
I love helping people, and I’ve been helped so much by the experience of others. I’ve followed many Apple indie devs for years and the information those people have shared helped spur me on to doing things as well as I can and think more about the business aspect of things. Without these we would never have shipped — I had so many voices in the back of my head about setting a firm date, clearing out stuff that I felt was needed for launch but really wasn’t etc.
So I’m always happy to answer questions about coding or the process of putting together an app, the design challenges etc. in case I can help. Just ask! So far, it’s just the “making a living from it” part I know the least about!
13) Do you have any other indie devs that readers should follow / lookout for?
I’ve always really valued David Smith (Widget Smith) & Marco Arment’s (Overcast) podcasts on development like Under The Radar, as well as Curtis Herbert (Slopes).
Scotty (@macdevnet) and John Fox (@djembe) have a very long-running and underrated podcast called The iDeveloper Podcast that covers challenges of indie development and accessibility very often.
Christian Selig (Apollo Reddit), Tim Isenman (Pocket Rocket) and Jordi Bruin are always interesting and making great stuff.
I really like when people who already make great products ask in public for help or tips. It reminds you we’re all learning all the time.
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 😜