Issue #71 - Shawn Hickman
Happy Monday, everyone!
We made it to Issue #71! Thank you to everyone who read last week’s issue ❤️
Deep Dish Swift is the best pizza themed iOS and Swift conference being held in Chicago May 5th to May 7th in 2024. The conference brings 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. There are talks and a live podcast recording specific for indie development and also two full days of Swift and iOS talks!
Today’s Spotlighted Indie Dev
📆 Today I’m featuring Shawn Hickman.
👉 Please make sure to follow them or support them anyway you can! 😇 I’m excited to share their indie dev stories.
Indie Dev
Shawn Hickman
Q&A
1) What is your name? Where do you live?
My name is Shawn Hickman, and I live in the suburbs outside of Philadelphia, PA (Philly).
2) Introduce yourself. Education? Background? Main job? Interests outside of tech? Interests inside of tech?
My background is actually in design, not development. I have a degree in graphic design, and I’m currently a design manager at Think Company here in Philly.
In 2017, I dove headfirst into learning iOS development to build Sofa 2.0. Here we are four years later, and I’m still hacking away on it—one of the best decisions I ever made.
Interests outside of tech
Travel is probably at the top of the list. My wife and I love taking day trips, long weekends, or jetting off to Disney World. Traveling has so many benefits beyond having fun. Rick Steves said it best, “Travel is rich with learning opportunities, and the ultimate souvenir is a broader perspective.”
I’ve also recently been getting deeper into photography. It’s a hobby that’s come in and out of my life, but it’s grabbed hold of me the past few months. Shooting with a camera other than my phone helps me disconnect, recharge, and be more present.
Interests inside of tech
This isn’t specifically a tech thing, but I find the systems and operations of individuals, teams, and organizations fascinating. We focus too much on the result instead of the systems that led to it.
For example, every WWDC, I’m blown away at how Apple can create highly integrated solutions that require deep coordination among so many people and teams. As someone who’s worked in consulting for the past seven years, I can tell you firsthand how difficult it is for teams to ship anything.
Apple’s systems and operations are on a different planet.
3) Have you ever considered yourself an indie developer?
I only recently became comfortable calling myself a developer, but I haven’t given the indie developer title much thought. Technically, I guess I am, lol!
4) What got you started/interested in creating your own applications outside of your “normal” job?
Like many, the original iPhone is what triggered it for me. When I saw the iPhone announcement, I remember saying, “I want to do that,” without knowing what “that” was. From there, it’s been a windy path of exploration, false starts, confusion, and excitement.
5) How do you balance your time between friends/family, work, hobbies, and indie dev?
I’m sadly a workaholic. Given zero constraints, I will work most of the time. I wouldn’t say I like this quality and have been trying to get better at containing it. This is one of the reasons I built Sofa. Sofa’s a tool that helps me to not work (using it, not making it). The irony is that I have to work more to build a tool that helps me work less 🙃.
Quick aside If you think about it, the tools we use for managing our downtime are all “work” tools. Tools like to-do lists, notes, and calendars come from our work culture. We use them for personal things, but all our work stuff is right there next to it. Sofa is an attempt to build a non-work tool for managing your downtime. I want more tools like this to create better barriers between the work and personal areas of my life. End quick aside
The most useful thing I’ve done is institute work nights (my wife’s idea). Two nights per week are reserved for working on Sofa. The other days are reserved for personal time. I’ve been doing this for a few years, and it’s been working pretty well. I stick to this schedule around 80% of the time.
6) Sofa - I am so glad that Sofa exists! Forgetting which shows and movies I need to watch is probably my biggest weakness 😛 And my list of things I need to watch just keeps getting longer ever since having my son last December 🙃 Sofa gives me an awesome sense of priority and less stress when I have downtown to watch TV. I don’t have to worry about what to watch! When did you get started on Sofa? What was the initial goal? Is it anything like what Sofa is now?
Way back in 2014, Sofa was originally called Movie Night. My wife and I love watching movies, but we would always argue over what to watch. We set up a rule where we would each get a turn to pick whatever we wanted, and the other person wasn’t allowed to complain. Movie Night was intended to track what was watched and whose turn it was. At the time, I was keeping track of this in Evernote but thought it would be better as its own app.
That concept was not very interesting, so we tweaked it to be more of a movie journal. We didn’t find anything compelling about that either and moved on.
Then it became Movie List. You would add movies you wanted to watch so you wouldn’t forget. Basically, a to-do list for movies. This is where the product started to find its legs, and this feature is still a core part of Sofa today.
7) Sofa - I think Sofa has found every show, movie, and game that I’ve searched 🤯 Is it hard finding data sources for all of the items that you want searchable? Have you had to switch data sources or find ones that were reasonably priced? I used to work on an app that dealt with similar data and I remember that getting good data was very hard (but maybe things haven’t changed since 2015) 😅
I’m glad to hear that! Finding good data from reliable sources and combining them into a seamless experience is probably the most challenging part of Sofa. Each API has its quirks and limitations. Overall, the data sources are reliable, affordable, and relatively easy to work with.
I’ve only had to swap out one data source: Google Books. This was the original data source for books, but I quickly hit the daily rate limit. It took Google six months to reply to my request for an increase…which they denied 🤣. I now use the iTunes Search API for book data which has a more reasonable rate limit. The iTunes database has fewer books than Google’s, but it’s much more reliable.
I’m sure I’ll have to swap another data source in the future, but I see that coming with the territory of making an app like Sofa. I also think that’s what makes it so unique. The app does a lot of work for you.
8) Sofa - There are so many great things like lists and groups that make me keep using Sofa but I love the notes that I put on my stuff! I’m so bad with people asking me how I liked a show and I’m just like “It was good!” and that is all I got 🙈 I use notes to write my thoughts but I also use notes to keep track of which seasons I’ve watched and need to watch 😇 What is your favorite ways to use groups, lists, and notes? Have you seen users do anything with groups, lists, and notes that you didn’t expect?
My Use
I use groups and lists in a pretty obvious way. I have groups for the major categories like Books, Movies, and Podcasts. I’ll have a list for different genres like History, Comedy, and Classics in each group. Nothing fancy.
I use sticky notes to write down who recommended something to me and capture my thoughts after logging it to Activity. Writing down who recommended something is handy when I’m trying to find the next book to read or movie to watch. For example, I’ll weigh a movie my brother recommended higher than one I found online.
Ways I’ve Seen Others Use It
I’ve seen some people create groups for different streaming services like Netflix and HBO and create genre lists within them. Federico Viticci of MacStories has a more productivity-based approach. He has groups for New, On Hold, and On-Going and then various lists within those groups.
People are getting clever with sticky notes too. I’ve seen people add release dates for movies and create a rating system with emoji ⭐️⭐️⭐️⭐️⭐️. Since the contents of sticky notes is searchable in the app, people have been adding “tags” to their notes to make them easier to find.
It is pretty cool to see how other people use the app and create their own little hacks.
9) Sofa - I am 100% in love with the Sofa website 😍 It is the perfect balance of information and simplicity and design without going overboard. Did you design the website and copy yourself? I’m probably going to study this and take a bunch of notes and try to apply things to my own projects. I don’t think I have any more questions but take this 🏆 for having a 🔥 website!
That’s super nice of you to say ☺️. Yes, I did all the writing, design, and development for the site. At times, creating the site felt harder than building the app 🙃.
10) Sofa - Okay… This theming engine you have is unreal. I was perfectly happy with the default Sofa theme but I like checking out everything I can in an app. You have some featured themes but then some that are “for designers” and some that are “for developer” and then 80s and 90s and places like nature and space and OMG 🤯 It was so hard to decide what theme I wanted and I kind of want a random theme each day 😈 But I want these theming engine in my apps! It works so well. Do you have any tips from either a designer and/or developer perspective on how to create a theming engine? I struggle on how to even start hooking up all the components to a theme. How many different types of components can your themes change? Like… Do you have “heading 1”, “heading 2”, “primary button”, and “secondary button”? I hope I’m asking this correctly because I’m super curious because it’s so good!
Oooo, I love the idea of a random theme being assigned every day! I might build that!
I’ve meant to do a proper write-up on Sofa’s theme system and process, but I’ll do my best to summarize it here…
UI elements can be broken down into a few basic structures: layout and hierarchy:
- Layout deals with things like foreground, background, tints, and dividers.
- Hierarchy deals with things like primary, secondary, tertiary, etc.
Putting these together can look something like this:
//For backgrounds
backgroundPrimaryColor: "#FDF2EB"
backgroundSecondaryColor: "#F3E5DE"
backgroundTertiaryColor: "#F3E2DA"
//For text, dividers, and non-interactive icons
foregroundPrimaryColor: "#333333"
foregroundSecondaryColor: "#666666"
foregroundTertiaryColor: "#C9BFBA"
//For interactive elements like buttons and links
tintPrimaryColor: "#264EC1"
foregroundOnTintPrimaryColor: "#FFFFFF"
tintSecondaryColor: "#FFFFFF"
foregroundOnTintSecondaryColor: "#264EC1"
For a simple theming system, this structure works well. For Sofa, I take this a little bit further. I create different “zones” or “areas” of the UI and give them their own theme sub-structure. Things like the navigation bar, tab bar, etc. The cool thing is that I can use the same structure as outlined above and localize it for the different areas. Here’s an example:
//Theme colors for the navigation bar
//For backgrounds
navBarBackgroundPrimaryColor: "#FDF2EB"
navBarBackgroundSecondaryColor: "#F3E5DE"
navBarBackgroundTertiaryColor: "#F3E2DA"
//For text, dividers, and some icons
navBarForegroundPrimaryColor: "#333333"
navBarForegroundSecondaryColor: "#666666"
navBarForegroundTertiaryColor: "#C9BFBA"
//For interactive elements like buttons and links
navBarTintPrimaryColor: "#264EC1"
navBarForegroundOnTintPrimaryColor: "#FFFFFF"
navBarTintSecondaryColor: "#FFFFFF"
navBarForegroundOnTintSecondaryColor: "#264EC1"
I have a Figma design template to create the themes and play around with ideas. I wrote a little plugin that exports the color values from the Figma file, which I then paste into Xcode.
On the development side, I based the mechanics off of a blog post by Late Night Swift. The blog isn’t up anymore, but you can still see the code on Github. There is a Themed protocol that each view conforms to. When a theme is changed, it notifies all the views and passes in a new theme.
With 100+ themes in the app, this setup has been pretty solid and allows me to create some pretty fun looks 😃.
11) Sofa - What’s next?! Do you have any future features that you can share with us?
I’m working on some more minor improvements to add more sorting options and customization to various parts of the app in the short term.
The big feature I’m excited about is collaborative lists and groups. Sofa uses NSPersistentCloudKitContainer
to store data locally and sync with iCloud. There are tradeoffs with this approach, but overall I’ve been happy with it.
As of iOS 15, you can now have shared containers. Yay! I haven’t thoroughly investigated this, but it looks promising. I’d love to have a shared movie list with my wife, and I know others would love the same.
I have a public roadmap for Sofa for folks who want to keep up with things.
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 is time. Sofa isn’t my full-time job (yet), and fitting it in with a full-time job and personal life can be a lot. I try to work at a pace that is realistic within my constraints. Easier said than done.
The most fun part is not having to justify how I spend my time to someone else. Last summer, I spent a lot of time exploring SwiftUI and didn’t ship anything directly from that effort. In a traditional company setting, that time would have been “wasted”. I see it as time well spent.
13) Is there anything else you’d like to tell the indie dev community about you?
If you’re interested in keeping up with Sofa, there is a YouTube channel and community forum to check out.
14) Do you have any other indie devs that readers should follow / lookout for?
I don’t know if some of these folks qualify as “indie,” but I’ve learned a lot from them along the way:
- Majd Taby: Co-founder of Darkroom
- Mark Moeykens: iOS dev education
- Jonathan Rasmusson: iOS dev education
- Federico Zanetello: SwiftUI education
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 😜