Back in July, played with a Leica M11-P at the Leica store in DC, and I literally can’t stop thinking about it. I love my Q3, but the M11 made feel deep deep feelings lol.
Send help 🙃
Just in case you didn’t know, Donald Trump is a fucking embarrassment.
It has officially been 10 years since I launched the very first version of Sofa 🤯.
It’s genuinely wild to see where Sofa is today. What started out as a simple tool for keeping track of movies to watch, has grown into a full-featured product for organizing your downtime experiences.
If you’ve ever used, looked at, talked about, shared, or even thought about Sofa, thank you. I’m so lucky for this to be my job ❤️.
I’ve officially been a full-time indie developer for two years 🤗! Here’s a video of me yapping about what’s going well and what I’m struggling with. Enjoy!
Your downtime isn’t just about what you watch, read, and play. It’s also about where you go and what you do.
Sofa has always helped you organize what to watch, read, and play. But your downtime is more than just media consumption. It’s also those concerts you’re excited about, next year’s big family trip you’re planning, and that new restaurant you’ve been meaning to try. Now Sofa helps you organize all the ways you spend your downtime, bringing the same simple approach to real-world experiences.
With Planner, your experiences get a proper home. No more scattered screenshots, buried notes and emails, or forgotten recommendations. Half the joy is in the planning, and Planner makes that half genuinely enjoyable.
With the addition of Planner, Sofa is truly an all-in-one tool for organizing your downtime experiences.
Whether you’re picking what to watch tonight, listening to your favorite show, or planning your next vacation, it’s all there in one easy to use app.
Join the beta here: sofahq.com/beta
In this episode of Worklog, I talk about the launch of Sofa’s new podcast player. Specifically, the marketing work I did before the launch, how the launch day/week went, and what I’ve been working on after the launch…and how Nintendo may have got in the way.
Listen in your favorite podcast player
As of today, Sofa comes with a full-featured podcast player that can easily be your primary way of listening to your favorite shows.
Here’s a quick rundown of what you get:
All of this works across iOS, iPadOS, macOS, and visionOS. Head over to the Sofa Podcast Player page to learn more.
This is quite a big addition to Sofa, and one I’ve been working on since the summer of 2024. So why do it?
First, I personally love podcasts and listen to them every day. Podcast listening is such a core part of my daily routine, and I have wanted to build my own podcast player for a long time. While I didn’t know if it would be its own app or integrated with Sofa, I knew I wanted to make one.
Second, integrating the podcast player into Sofa creates a really nice “downtime bundle”. Instead of having to use multiple apps for overlapping “downtime activities”, you can do a lot of it in Sofa (not everything, but a lot of it).
This bundle is a simpler, more integrated experience, and doesn’t require multiple subscriptions. It really is a natural extension to what Sofa already does.
If you have your own podcast, and would like to provide your listeners with a “Listen on Sofa” button or link, I built a handy tool for you.
Head over to the Sofa Podcast Button Builder, and make a “Listen on Sofa” button for your show in just a few seconds.
When listeners click the “Listen on Sofa” button, it will automatically open your podcast in Sofa for them to subscribe to. If they don’t have Sofa installed, they will be redirected to Sofa’s website showing details about your podcast.
Here’s an example linking to my “Worklog” podcast:
Listen on SofaYou can read the full release notes here, and download the update from the App Store.
If you’re a podcaster, I built a handy little tool on Sofa’s website to help you easily create a “Listen On Sofa” button for your podcast.
There are different styles to suit your website’s design or you can simply copy the link and use it however you like.
This button will directly link to a “subscribe” page in Sofa when people click on it.
I hope it’s helpful!
In this episode of Worklog, I chat about some exciting Apple rumors for iOS 19, dig into the home stretch of launching my new podcast player (including solving tricky audio issues with ChatGPT Deep Research), and share behind-the-scenes marketing prep, from creating landing pages to capturing relatable photos of podcast listening in everyday life.
Listen in your favorite podcast player
In this episode of Worklog, I introduce my new podcast, where I share the journey of building Sofa, an app designed to help you be intentional with your downtime. I talk about why I’m branching into podcasts—both to better understand the podcasting experience I’m building into Sofa and to give listeners another way to enjoy my content. I also share updates on recent Sofa developments like CarPlay, Widgets, Shortcuts, and performance improvements. Lastly, I dive into “Launch Mode,” explaining my strategy around deadlines, prioritizing tasks, and managing my workload leading up to a launch.
Little Big League still holds up. Love that movie.
A lot has happened since Jan 20, but don’t forget that Trump pardoned 1,500 January 6th rioters. Hundreds of which assaulted police officers. So when he says he’s for the “blue”, his actions have proven otherwise.
But as Trump’s team wrestled with the issue, and planned a shock-and-awe batch of executive orders Day 1, “Trump just said: ‘F -k it: Release ‘em all,’” an adviser familiar with the discussions said.
Happy President’s Day!
I’m excited to announce something new…I’ve started a new podcast called “Worklog”!
It’s where I share my journey of building Sofa into a successful indie app business—covering lessons, challenges, and insights along the way.
This is basically the stuff I make for YouTube, but in podcast-form.
You can get all the details and subscribe here:
I have six episodes published, which are repurposed YouTube videos that are already out. You’re going to hear me say “in this video…” in this first episodes, because I wasn’t thinking about the podcast yet lol. Going forward, I’ll do better.
I have a few reasons for launching this podcast, but the main two are:
Also, thank you to Stephen Robles for helping with some logistical/technical issues I was working through. I was struggling lol.
You can subscribe to Worklog in your favorite podcast player…and sometime soon in Sofa:
In this conversation, Shawn Hickman discusses the often-overlooked aspect of app development: the removal of features. He emphasizes that sometimes it’s more beneficial to remove features rather than continuously add new ones. Through personal experiences and examples, he outlines the reasons for feature removal, including when features aren’t working as expected, are broken, or when the product has evolved. He also shares best practices for effectively communicating these changes to users and managing feedback.
In this video, I’m sharing why I don’t offer a free trial for my app, Sofa.
When I first launched the Super Sofa subscription, I struggled with decisions around pricing and whether or not to offer a free trial. Most advice said, “You should offer a free trial because that’s what everyone does.” But that never sat right with me.
Now, after a few years of running a subscription app without a free trial, I’ve gained clarity on why I don’t do it — and why Sofa’s freemium model works better without one.
I’m not against free trials! They can work great for certain products. But for Sofa, it doesn’t make sense. In this video, I’ll walk through my thought process and explain why.
In this video, I share my experience using the Leica Q2 over the past few months and try to decide whether I should keep it or sell it. The Leica Q2 is an incredible camera with a lens that produces stunning images, but it’s not without its quirks. I’ve used it for travel, family events, everyday carry, and more—so I’ve developed some strong opinions about its pros and cons. If you’re considering the Q2 or are curious about what makes this camera special (and frustrating), this video is for you.
In this video, I dive into the realities of building an app: why starting is the easy (and fun) part, and why the real challenge lies in growing and maintaining it over time.
I’ll talk about the excitement of launching a new project, the hurdles you’ll face when life gets busy or progress feels slow, and how setting the right expectations can make all the difference. I’ll share tips on building sustainable systems, celebrating small wins, and staying motivated when you hit technical, emotional, or mental roadblocks.
Whether you’re creating your first app or struggling to keep going, this video is here to remind you to enjoy the process and keep moving forward.
In this video, I share the lessons I’ve learned after investing $30,000 into marketing my app over the past three years. For an indie app developer, it’s a significant amount, and I dive into why I chose to spend it, where it went, and what came out of it.
I discuss the challenges of getting attention in today’s competitive market and why I decided to focus on sponsoring podcasts and YouTube channels in the Apple and tech world. I also explain my goals for this marketing effort—building brand awareness rather than immediate conversions—and the results I’ve seen, including increased sales, recognition from Apple, and turning this into my full-time job.
In this video, I answer a great question I got on YouTube: How did you approach marketing in the beginning of making an app?
I’ll share what I did when starting out, how my approach evolved over time, and what I’d do differently if I could go back. Whether you’re just starting your indie app journey or looking to improve your marketing strategy, I hope this video gives you some helpful insights!
When starting out as an indie app developer, should you make one app or multiple apps? While there are many way to answer that question, I think focusing on one app is a better approach when starting out.
In this year-in-review video, I reflect on 2024, sharing updates on my indie projects: Sofa, digital products, and YouTube. I discuss milestones, growth stats, and future plans, all in an unedited, unscripted format. Watch to learn about what went well, where I struggled, and what’s next for the coming year!
During the summer and fall, I’ve been hard at work on a big new feature for Sofa…the ability to listen to Podcasts in the app.
I’ve been exclusively using Sofa as my primary podcast player for the past month, and I gotta say, it’s pretty awesome 😜. I don’t have a launch date yet, but will be doing a public beta in the next few weeks.
It’s been about one year since I quit my job and went full-time as a solo indie app developer with Sofa.
I wanted to reflect and share how my first year has gone. The good, bad, what I’ve learned, and answer your questions. This is a loooong video 🫣.
Thanks to everyone who shared their questions!
I’m happy to announce that Sofa is now available on the Mac and Vision Pro!
Up to this point, you’ve technically be able use Sofa’s iPad app on the Mac and Vision Pro, but this new version of Sofa is built specifically for the Mac and Vision Pro. There is still a lot more work to be done for this apps, especially the Mac, but this is a good improvement over the existing iPad versions.
There were a bunch of design challenges bringing Sofa to Vision Pro, specifically around themes. If you don’t know, Sofa has over 100 themes to choose from, and they’ve been a fun part of the overall experience.
The additional challenge was that I don’t personally have a Vision Pro, so testing was very limited. Luckily, I have some very nice friends who tested and shared helpful feedback.
In the end, I’m pretty happy with where the design landed, but I’m expecting to iterate as I get more feedback from people using it.
You can read the full release notes here, and download the update from the App Store.
Apple’s WWDC is coming soon, and I’ve spent some time thinking about what I’d like to see as a user of Apple’s products and as a developer for Apple’s products.
I think there are some fun ones in here.
For Sofa 4.0, I redesigned the Home Screen to include rich, widget-style cards for the primary lists: The Pile, Logbook, and Pinned Items.
I liked that this gave people handy, scannable information about what’s inside each list, but also brought a quirky style to the app.
Since the release, I’ve been running into some layout issues across devices which gave me a chance to iterate on the design a bit. I personally love the way The Pile card is designed. You have the title on the left, and the contents on the right. I wanted to see if I could bring that same structure to Logbook and Pinned Items. It turns out I can!
This new design brings a few benefits:
While you do technically get less information than the previous design, I think you get *enough *information.
This design change is live as of Sofa 4.0.5.
As a professional nerd, I have many computers. All of which serve different roles in my life.
Until recently, I didn’t have a clear place for the iPad. I used it a lot, but I could never really explain why I would choose it over my iPhone or Mac.
Now, I think I’m at a place where I have a good idea of where the iPad fits into my life. The iPad is my “hobby” computer.
The opinions I’m sharing here are about me, and only me. I know of many people who use an iPad as their primary computer, and I’m not suggesting it can’t be done. Many people do it.
I’m simply sharing my personal experience with the iPad.
Like many people, there was a period where I had dreams of the iPad filling larger roles in my computing life. I saw it as an “everything” computer that could very likely replace my Mac.
Especially once Apple released the Magic Keyboard with a trackpad for the iPad Pros.
There was also a stretch of time where Apple was really pushing the iPad as a laptop/Mac replacement. This was before the Apple Silicon Macs. I fully bought into this idea and dove into the iPad Pro determined to make it work.
The thought of this was awesome. A single thin, light computer that could act as a laptop or tablet as needed.
Unfortunately, I learned I couldn’t replace my Mac with an iPad.
The main reason the iPad couldn’t work as a Mac replacement for me is that I make an iOS app for a living, and I literally can’t use an iPad for that.
The main app I use to build Sofa is Xcode, and it only exists on the Mac.
I kept hoping Xcode would come to iPadOS in the same way Final Cut Pro and Logic Pro have, but I don’t know if it will ever happen.
Even if it does come to iPadOS at some point, will it be the full version or a stripped down version that won’t work for everything I need?
I personally prefer to use the iPad with a single app at a time. I know you can use split view and stage manager to work with multiple apps at once, but those have never clicked with me.
If I’m doing stuff that requires jumping between multiple apps, the iPad (and the iPhone) just feel tedious.
This could be as simple as referencing an email while writing a note in Apple Notes. The back and forth between apps on the iPad feels harder for me than on the Mac.
I’ve been using macOS for close to 20 years and I just love it. I had a Mac well before an iPhone and iPad, and I’m extremely comfortable and efficient using it.
Using the Mac puts me into “work-mode”, which I like. It’s easy to jump between multiple apps, manage windows, organize files, and all the other computery stuff.
If I was forced to use only one computer, it would be a Mac. Even over the iPhone.
Now that I have a clearer idea of where the iPad fits into my life, I want to share how I’m using it.
For me, casual computing is anything that isn’t related to work. So, when I’m done working and sit on the couch to relax, the iPad comes out.
This is things like:
I can, and do, all of these things on my Mac and iPhone, but the iPad gives a nice experience.
Entertainment is the easy and obvious use for myself, and probably everyone who has an iPad. The iPad is literally the best TV I’ve ever owned. I can bring it everywhere and watch anything on it.
This is things like:
Outside of work, photography is probably my biggest hobby and the iPad is so great for editing photos. This is one of the few creative tasks I do that I find the iPad to be superior to the Mac.
I use Lightroom, and do edit photos on my iPhone and Mac, but I find the iPad to be the most pleasant for this. The iPad gives me a big screen that I can get very close to, and edit with my fingers.
Photo editing alone is enough for me to justify having an iPad.
It took me a few years to experiment and learn that the iPad is my “hobby” computer. With this clarity, I’ve come to enjoy using my iPad a lot more. I’m rarely frustrated by its lack of Mac-like functionality, because I’ve adjusted my expectations.
It’s the best hobby computer I’ve ever had.
I started working on Sofa 4.0 323 days ago 🙃. It feels good to finally ship all this fun stuff out!
With 4.0, you can add basically anything, and expand Sofa to fit your exact needs with Custom Categories, Ingredients, and Smart Lists. I have a page on the Sofa website with all the details.
Sofa 4.0 - Sofa
To celebrate the launch, I’m running a 40% off sale for the Super Sofa annual plan. The sale ends Saturday, May 5, 2024. Use this link from your iOS device to redeem the sale.
There have been a few really great reviews of Sofa 4.0 that you might be interested in checking out.
John Voorhees over at MacStories showed how he’s using Sofa to keep track of places and restaurants in his local area.
Sofa 4.0: A Customizable Downtime Tracker Without Compromises
Stephen Robles did an awesome deep-dive video showing all the new stuff in Sofa 4.0 and how he’s using it to track what to watch with his family.
9to5Mac had a nice little review too.
Award-winning ‘Sofa’ downtime organizer gets major update with new UI, custom categories, more - 9to5Mac
I needed a little mental break from Sofa work, so I made a video about my experience of renting a Leica Q2 for a week. Overall, the camera isn’t for me, but I’m glad I had time with it. It clarified what I value in the cameras I use.
Sofa 4.0 is coming along very nicely and I’ll be sharing updates soon!
Imagine you’re hosting a party with friends. Chances are, you’re going to want your guests to be as happy and comfortable as possible. Being an accommodating host includes providing food and drinks that your guests will like, cleaning your bathrooms, and playing good music.
You wouldn’t only offer a single type of drink to your guests just because it’sem>
Building software is a similar experience. Yes, I’m building the app forem>
This analogy has helped me figure out when I offer a setting vs making an opinionated design choice. It’s going to be hard (impossible) to get this right all the time, and I can’t make settings for everything, but my efforts are to be more accommodating to my guests (Sofa users) based on what they need.
By default, Sofa comes with three primary, or system-level, lists:
Each of these lists have their own intended purpose, design, and functionality, but the one thing they have in common is that you can’t remove or hide them.
I’ve learned that there are people who use all, some, or none of these lists. For the people who use some or none of them, having them always be visible is a little (or very) annoying.
How can I accommodate these people?
I explored a bunch of ideas, but in the end I’ve settled on two specific accommodations:
Instrong>
As part of the Sofa 4.0 redesign, I’ve added new, rich cards for each of the primary lists on the home screen.
These rich cards are designed to be highly fun and functional. Being able to see a preview of the items you’ve added to the Logbook, or have pinned is genuinely helpful. Inline with Sofa’s playful personality, I’ve designed each card to be a more physical representation of the list.
Now, while I love this, I know not everyone will like this more playful design. To accommodate those people, I’ve added a simpler design as an alternative. That way people can still get all the functionality, but in a more restrained design to match their preference.
Instrong>
A common idea in the world of software design is that if you need to add a setting, then you’ve failed to create the “right” experience for the user. I couldn’t disagree more.
People are complex, and they bring that complexity to the software they use. It’s literally impossible to create the “right” experience. If I’m able to accommodate people and absorb some of their complexity into the software, then I will happily do so. It seems like the polite thing to do.
This idea of accommodating users (within reason) is something new I’m playing with, and I’d love to hear if any of this resonates with you (positive or constructive).
This week has mostly been a pain in the ass due to working on performance issues in Sofa. Luckily, I made good progress there and was able to keep iterating on the design changes too.
Ina href=“https://www.poohbers.com/blog/2024/01/exploring-some-big-design-changes-for-sofa/”\>
Well ok then, 4.0 it is!
This does change how I plan to market these updates, but I’ll talk about that when the time comes.
I built a backup system into Sofa few years ago. Basically, each day that you open the app, it will make a local backup of your data and save it to a folder in iCloud Drive.
The problem was, automatic backups were freezing the UI on launch. This was caused by me doing this work on the main thread…like an idiot. This is now happening on a background thread so you won’t even notice backups being made.
Turns out, a lot of the new work I was doing was leaking memory.em>
Ia href=“https://www.poohbers.com/blog/2024/01/exploring-some-big-design-changes-for-sofa/”\>
I have a few new designs for showing The Pile, Logbook (formerly “Activity”), and Pinned Items (formerly “The Shelf”).
The goal with these changes is to make these areas scannable before you even tap into them. Similar to if you had physical versions of these things in your home.
Logbook and Pinned Items are dynamic too. If you don’t have anything in them, they won’t be displayed on the Home Screen. I was initially going to do the same for The Pile, but as I was using it on my iPad I realized item>
This is due to how the big ”+” button works when navigating around the app. Basically, if The Pile didn’t show up on the Home Screen you’d never be able to add anything directly to it…which kind of defeats the purpose.
I may consider a setting to allow people to hide The Pile if they really don’t want it. Maybe.
Speaking of the big ”+” button, I’ve added a brand new design for choosing what to add to your lists. I had been using a system menu for the past few years, but it was starting to get a bit unwieldy.
1×
On the iPhone it displays as a bottom sheet, and the iPad uses a popover view.
Custom Categories and Ingredients are big new features and so far I’ve been keeping them in Settings. I don’t think they belong there but I wasn’t sure exactly where to put them.
For now, I’m thinking they can live in the ••• button/menu alongside Settings. Still aem>
My next major step is to get this shipped out to beta testers. They are going to be getting a lot of new stuff to play with: Smart Lists and all these new design changes.
Before I can send it out to beta testers I need to do these things:
Hoping to be able to do this next week 🤞.
After two months of grinding on a ton of infrastructure work to enable “Smart Lists”, this was the first week I was able to dive back into the fun stuff.
The way “Smart Lists” work is forcing me to rethink some parts of the UI which then ended up raising some bigger design questions.
This new direction is feeling pretty fresh, and fun. That being said, this is still very exploratory and a work in progress. Things likely will change.
Smart Lists are now fully working. You’ll be able to create filters based on your owna href=“https://www.poohbers.com/micro/2023/10/previewing-custom-properties/”\>
1×
Smart Lists will have a little lightning bolt icon attached to them.
If you’re someone who has a decent number of groups and lists, sometimes it can be a bit of a slog to scroll to a list you use frequently. Well, now you’ll be able to pin any list and it will stay at the top of all your lists for quick access.
1×
Pinned lists also come with a nice card design that displays a larger cover image.
I’ve had the current design for Sofa since the summer of 2021, when version 3.0 was released. Since then, I’ve learned a lot about what works, what causes people to get a little tripped up, and what’s annoying.
One of the main bits of feedback I’ve gotten is wanting to disable some of the default lists like “The Pile” or “The Shelf”. While these are handy tools, not everyone wants or needs them. They are taking up valuable space regardless of what you want.
The other bit of feedback is confusion around how to use certain features. I think this has mostly been due to how I’m named things. For example, “The Shelf” confuses a lot of people. I end up explaining it by saying “it’s like pinning something”…which means I should probably just called it “Pinned”.
So, this design gives a lot more control, removes things if you don’t need them, and (hopefully) clarifies the naming of features.
I’m currently working on getting all of this polished enough toa href=“https://www.sofahq.com/beta”\>
I’ve been calling this release 3.5, but now I’m starting to wonder if it’s more of a 4.0 🤔.
Anyways, I’m open to any and all feedback 👋.
Remember a few weeks ago when I said I was just about wrapped up with the data model work? Well, lol, it took a little longer.
After lots of fighting/cursing with iCloud, that work is nowem>
For Smart Lists, I have two main buckets to tackle:
There are many other things to polish around Smart Lists, but once the two main buckets are done it will be in a good spot.
I will usually post most things from this site on various social sites. You can follow me here:
strong>
strong>
strong>
strong>
During the holidays, I made good progress on Smart Lists in Sofa, but then ran into some tricky issues. I had to revamp Sofa’s data model a bit to get things working properly. This little detour took a decent amount of time, and I’m just about wrapped up with it. In hindsight, it’s good that I made some of these data model changes because it should make Ingredients more efficient throughout the app.
Anyways, once I’m finished up with the data model work I’ll be jumping back into finishing the UI for Smart Lists. This still needs a good amount of love, but I’m hoping to have it in your hands for testing in the next few weeks.
Thanks for all your patience and let me know if you have any questions!
Cancel your New Year’s plans because I just dropped a 45 min video recapping Sofa’s 2023.I go over the state of the product, health of the business, quitting my job to go full-time, and talk about what’s next for 2024.
Thanks for a great year everyone 👋.
Since working on custom categories and Ingredients, I’ve been thinking through the most useful first way to “expose” all those new features in @sofahq. I’ve settled on “Smart Lists” and I’ve just started working on it this past week. If you’re interested to see my progress and how it’s going to work, check out this video.
I’m 100% open to feedback on this too.
📺 New Video 📺
I learned a good bit from running a Black Friday sale for Sofa and I talk about what went well, the issues I ran into, and what I would do next time.
I’ve been thinking a lot about what to call “Custom Properties”. That name feels a little too technical to me.
Here’s my working idea that I’d love some feedback on:strong>
With these new properties, you can essentially create your own custom features in Sofa. They em>
Enhancements sounds much simpler and friendlier to me, and also kind of describes what this feature does.
I’m open to feedback on this 👋
I want to share a little preview of something pretty cool I’ve been working on for Sofa. There’s still a good bit of refinement that I need to do, but I want to start getting feedback.
The working title for this feature is called “Custom Properties” (I’m open to other ideas…naming is hard lol).
Basically, you’ll be able to add your own custom properties to items in Sofa. Here’s the different properties you’ll be able to add:
Here’s a little demo showing how you can edit the properties within a detail view
1×
This shows how you can edit existing properties and add new ones
1×
I’m working hard to get this out to the beta group for further testing and feedback. First, I need to finish a few things and do some testing.
I’m open to any and all feedback on this. There is a lot of power in this feature, but also a lot of potential for confusion. I’m happy to answer any and all questions.
Adding analytics to your app can seem like a simple and obvious thing to do, but once you get into it, it can be a little confusing.
In my video this week I share an easy framework I follow that makes analytics more useful. I also share some of the dangers of analytics and things you should be careful of.
Time is moving a little too quickly. Overall, the past month was a busy one for me, but I feel like I’m starting to find my grove with my new work schedule. I’m also starting to find a better balance between work and downtime.
That being said, I am excited for some fall weather 🍃.
I just released an update to Sofa (v3.4.14) that brings a new design for the pricing page, a URL scheme for searching, and some helpful bug fixes. You can read more via this blog post.
September came with a big unexpected surprise. The vendor I use for board game data in Sofa went out of business. This lead to some hustling on my end to get a few fixes out as quickly as possible.
I was able to get in touch with the data provider for board games and get an extension to Oct 1, 2023. This means after Oct 1, you won’t be able to pull any new board games data into Sofa. I pushed out an update on Sep 14, 2023 (v3.4.12) that migrates and stores all board game data locally so people don’t lose any information.
The board games news forced me to reprioritize some infrastructure work I had already been planning. Most of that work is now done, so I’ll be refocusing back on some big new features.
a href=“https://www.sofahq.com/blog/board-games-being-removed-from-sofa/?ref=shawnhickman.studio”\>
I did a little experiment for a week to post a Reel, TikTok, and YouTube Short every day. I wanted to see if I could manage and keep up with a daily posting schedule. The results?
I hated it.
It tanked my focus and added a lot more stress to my week. For me, it’s not worth the trade-offs of my time, energy, and focus to post that often. I’ll be sticking with my weekly YouTube video and once-ish per week on other socials. That gives me the time I need to be heads-down working.
Also, this was the first time I really used Reels and TikTok. I understand why people love it, but personally it gave me a headache. Everything is so fast and chaotic. I prefer a much calmer experience when I’m trying to relax lol.
I have to think about how much I want/need to contribute to that chaos.
This triggers a bunch of questions in my head around having to be on em>
A few weeks ago I really needed to communicate with people who were using Sofa…but I couldn’t. There was a big issue related to board game data and it was important to let people know as quickly as possible. The best option I had was social media, a blog post, and App Store release notes. So yea, not many good options.
I finally got around to watching season 1 of a href=“https://www.hbo.com/the-last-of-us?ref=shawnhickman.studio”\>
a href=“https://www.hbo.com/the-righteous-gemstones?ref=shawnhickman.studio”\>
I’ve discovered the incredible talent of drummer a href=“https://www.youtube.com/@DominoSantantonio?ref=shawnhickman.studio”\>
a href=“https://youtu.be/WeuskcJyoBQ?si=J2jbPSWJA8rWv1ll&ref=shawnhickman.studio”\>
a href=“https://www.youtube.com/watch?v=lAqgMP2ExGc&ref=shawnhickman.studio”\>
a href=“https://youtu.be/Idtlug8jg98?si=iIktFUL7zdeVsAqC&ref=shawnhickman.studio”\>
I’m still slowly enjoying Zelda Tears of the Kingdom. This game is just so deep and wonderful.
A few weeks ago I really needed to communicate with people who were using Sofa…but I couldn’t. The best option I had was social media, a blog post, and App Store release notes. So yea, not many good options.
I wanted to fix this, so I built a real-time announcement system into Sofa. In this video, I talk about how it works and how I plan to use it.
I think I went a little too extra on this simple setting 🙃
1×
I think this one is pretty fun. The current pricing page for Sofa has a few problems and I show my process and design iterations for fixing it.
So if you like seeing UI redesigns, this video is for you.
I did a little experiment over the past week to post a Reel, TikTok, and YouTube Short every day. I wanted to see if I could manage and keep up with a daily posting schedule.
The results?
I hated it.
It tanked my focus and added a lot more stress to my week. For me, it’s not worth the trade-offs of my time, energy, and focus to post that often.
I’ll be sticking with my weekly YouTube video and once-ish per week on other socials. That gives me the time I need to be heads-down working.
Also, this was the first time I really used Reels and TikTok. I understand why people love it, but personally it gave me a headache. Everything is so fast and chaotic. I prefer a much calmer experience when I’m trying to relax lol.
I have to think about how much I want/need to contribute to that chaos.
I am working on some changes to the Super Sofa upgrade screen. Basically, I want to highlight the annual plan more than the other options. Lots of good reasons for this.
a href=“https://www.threads.net/@shawnhickman/post/CxV5T2POEoP”\>
1×
Here’s another iteration I’m trying. Still keeping the pricing up top, but tidying up the spacing and overall visual hierarchy.
I’ve seen more my pricing screens with price on the top or bottom. So I’m not sure what will work for me here. But I have some benchmark numbers to track against.
1×
This might be a good compromise…using a floating card at the bottom. Still needs some TLC, but this might work
1×
This is pretty close to final and I think it’s coming together pretty nicely. This solves the two biggest problems my pricing page had:
I’m still open for feedback if you have any! (constructive is welcome)
1×
iOS 17 is coming out on Monday and I’m not ready for it
I put together my initial thoughts on the new iPhone 15 & 15 pro.
Who’s ready for a long video about the apps, tools, and processes I use for developing Sofa?
Perfect for your weekend morning coffee time ☕️
My video this week is a little messy, but I think it shows how this past week was for me…messy. Working through my board games data provider going away has been stressful, but in the end I think Sofa is going to be a more resilient app because of it.
I just finished up my first week as a full-time indie app developer and documented a bit of my experience.
I go over my goals for the first week, what I worked on, and some general observations about what my experience was like.
There’s def good and weird things about it 🙃
July was a busy and stressful month for me. I was working a lot behind-the-scenes to prep for quitting my day job to focus on Sofa full-time. Focusing on Sofa full-time has been eight years in the making. As I’m typing this out, it still hasn’t fully hit me that I’m actually doing it 🙃.
Sofa has grown a lot over the past eight years, especially in the last two. To say I’m excited is an understatement. Being able to work on something I love is a true dream and I’ll be working hard to keep that dream going.
I’ve you’re interested in hearing more, I made a video about it.
I’m continuing to work through this feature and I’ve made a little preview video to show how it’s shaping up.
I’m continuing to invest my time in YouTube. I find it a great place to share my thoughts and updates on my work in a visual way. If you missed them, here’s some videos I made over the past month:
Sharing a little preview of a cool feature coming to Sofa: the ability to addem>
Threads has been a lot of fun so far and it’s made something “click” for me with how I want to use social media going forward.
Spoiler: I just want social media to be fun 🕺
If you’re an iOS or Mac developer, you may be asking yourself if you should spend time building for visionOS and Vision Pro.
While I can’t tell you want to do, I wanted to share how I’m thinking about this for myself and Sofa.
June was a busy month for me. Apple’s WWDC was the first week of June and it broughtem>
Some other updates I shared:
I’ve started working on a few new Sofa features that I’ve been prepping for a while.
First, the ability to addstrong>
The second part of this feature is something I’m callingstrong>
Anyways, Buckets come in two forms:
em>
em>
I still have a lot to build, but this is a big part of making the app more flexible for people.
Links, custom content, and Buckets are intended to fill the gap when there isn’t a reliable data source for me to add to the app for different types of content.
Monica loves to steal my chair when I get up for a snack or bathroom break. I then have to decide if I’m going to stand for a few hours or move her. I usually end up standing for a few hours 😜.
Thanks for reading Work Log! Subscribe for free to receive new posts and support my work.
Hey gang 👋, I’m finishing up some much needed downtime after almost of year straight of grinding out a bunch of big Sofa updates. I also need to rest up because a href=“https://developer.apple.com/wwdc23/?utm\_source=sofa&utm\_medium=email”\>
Back in December of 2022, I released a huge update that brought shared lists, better shortcuts support, streaming providers for movies and tv shows, and lock screen widgets. a href=“https://www.sofahq.com/blog/shared-lists-shortcuts-and-more/?utm\_source=sofa&utm\_medium=email”\>
I followed that big release up with a string of smaller, quality-of-life updates. These updates focused on plenty of little features, enhancements, and bug fixes. a href=“https://www.sofahq.com/blog/sofa-342---quality-of-life-update/?utm\_source=sofa&utm\_medium=email”\>
Lastly, I’ve made some changes to Sofa’s pricing to make things simpler and more inclusive. a href=“https://www.sofahq.com/blog/a-simpler-more-inclusive-subscription-plan-for-everyone/?utm\_source=sofa&utm\_medium=email”\>
Thanks for reading, subscribing, and your general support! Talk soon 👋
This was a href=“https://www.reddit.com/r/EVERGOODS/comments/13bardo/packing\_comparison\_for\_the\_cpl24\_and\_ctb26/”\>
I just got my CTB26 last week, and since I recently took a weekend trip to Chicago I thought it might be helpful for people to see how I packed things out in my CPL24.
For context, I only brought the CPL24 on the trip. I normally travel with a backpack and wheeled suitcase (carry-on), but wanted to keep things light for this trip.
What I packed for a 3 day trip to Chicago
Things I packed:
The pictures show what I packed and how it all fit, but here’s some strong>
I haven’t actually used the CTB26 yet, but here’s some first impressions:
I’m likely going to be selling the CPL24 since I don’t see myself using both. The CTB26 seems like a hit to me. Gives me the same great experience of the CPL24, but a little more space a functionality for travel (which was my main use for the CPL24).
Notion is creeping into my life more and more, and one helpful little database I made is to track my PTO and the number of days I’ve taken or plan to take. I know the company tracks this, but checking Notion is much faster for me.
Here’s the formula to use to calculate the number of days off. It accounts for weekends and week days. I got it from this post.
I was recently interviewed on the Launched podcast with Charlie Chapman about Sofa’s origin story and how things work behind the scenes. If you’re interested, give it a listen!
In software, consistency and cohesion tend to get lumped together as the same thing. I’ve found this leads to painfully tedious arguments around product and design decisions.
strong>
For example, in an app, a primary button may always be blue. This consistency is good. It communicates to people that anytime they see a blue button, an important action is about to take place.
strong>
For example, let’s use an onboarding flow for a person using a product for the first time. The combination of front-end UI, backend infrastructure, workflows, product strategy, marketing, and customer support working well together creates a cohesive experience. If any one of these parts is inconsistent, it takes away from the cohesion of the experience.
Consistency enables a cohesive experience, but consistency alone is not enough. Aim for cohesion.
I recently released a href=“https://www.sofahq.com/blog/sofas-ios-14-update”\>
99% of the views in Sofa were table views. Seeing the writing on the wall, I wanted to start tackling this right away. My path, though, wasn’t clear. Should I stick with UIKit and replace my table views with collection views or go in the SwiftUI direction? Either way, I had to learn new APIs so I decided to take time to experiment.
Since SwiftUI is the future of Apple development, I initially chose this path. I wanted to time-box my efforts for a few weeks in case things didn’t work out.
I started building out the main parts of the app like Home and Lists. It was slow at first but quickly sped up once I got more comfortable. I hit snags with theming and search but was able to hack around those by diving into UIKit when necessary.
After a few weeks, I was making and seeing good progress. This was so encouraging that I decided to go all-in and rewrite the entire app in SwiftUI. For those of you with sense, you’ll see where this is headed 🙃.
After a few more weeks things started to get dicey. I was a href=“https://twitter.com/poohbers/status/1291057804988514306?s=21”\>
Around late August I decided I needed to abandon SwiftUI for now and jump back into UIKit. Instantly, my performance issues were gone and things were feeling smooth and snappy. Phew!
The downside was I had a steep learning curve ahead of me. Having to learn code>
Again, up to this point, Sofa was driven by code>
Luckily the internet is amazing and I was able to piece together a solution by learning how to create a view model driven by code>
If there’s interest, I’m happy to write in more detail about the solution I went with. All I’ll say for now is that this setup works great. code>
No way! I had to learn it to make widgets anyway and it had a couple of other benefits.
Since Combine is baked into SwiftUI with things like code>
I experimented a lot with the new design and features in Sofa 2.12. Once I had my footing with SwiftUI, creating views was not only fast but super fun. I was able to explore a bunch of ideas, with em>
I have so much gratitude for people who take the time to share their hard-won knowledge. Not only do they fill important gaps in Apple’s documentation, but they explain in ways that newbies like me can understand. Thank you!
These links helped me ship:
The detour was worth it, even if I had to double back more than I originally anticipated. The app is in a much more reliable and modern place than it was six months ago. Bonus, I got to learn more stuff!
My plan going forward is to stick with UIKit for the core parts of the app and sprinkle in SwiftUI where it makes sense.
If you want to see the fruits of my labor, you can a href=“https://itunes.apple.com/app/id1276554886”\>
This is a webinar I did with Amanda Kalk back in the spring for a href=“https://www.thinkcompany.com/”\>
When it comes to implementing a design system, success is an eternally moving target. Evolution and maintenance are critical over time, but how do you recognize the catalysts and symptoms that mean your system might be failing? Join us for a deeper dive into why your design system might not be working the way you expected—plus what you can do about it.
I was interviewed for the Creators Campfire podcast the other day and had a great time. We chatted about Sofa, app development, and more.
As part of my work at a href=“https://www.thinkcompany.com/”\>
I recently added the ability for people to save custom items to Sofa. This post outlines the thinking behind the feature and how it works.
Two of the main reasons people find Sofa so enjoyable to use are the rich display of the various media types and the mixing of those media types.
When I add a movie, I can see the poster image, title, and some helpful detail. Managing these lists in a highly visual way is much more fun than simple plain text.
The other main benefit is having all of your lists in a single place. Instead of using multiple apps for your reading lists and movie lists, you can manage all of that together in Sofa.
Up to this point if you searched for something that wasn’t in Sofa’s database you couldn’t add it to your list. This totally kills the benefit of a single place to manage your lists.
When working on something complex, I find it helpful to think through the guiding principles. This helps to keep me focused and not overthink areas that aren’t important.
This is already an extra step that someone has to take because the item isn’t in the database. Don’t add any unnecessary steps to this workflow.
One of the best features of Sofa is having the images for each item you add. It’s important that these custom items are as visually unique and don’t feel like a total bummer every time you see them.
A few of the data sources Sofa uses are open for contributions. If someone adds a custom item, encourage them to contribute it to the database so others can benefit.
First, it was important to define what “custom items” meant. Here’s how I define it:
Custom items are items based on existing Sofa data types that aren’t currently in one of the integrated data sources.
This means you can’t add a custom item that isn’t already a defined data type in the app, for example, books, movies, and video games. Remember, one of the main benefits of Sofa is the rich display of media. If you can add anything to the app without being integrated to a data source then I’m not sure how it’s better than a notes app.
Adding custom items is a fallback solution. Ideally people won’t have to use this feature very often.
Since this is a fallback feature, it doesn’t need to be visually prominent. It simply needs to be there when you need it. The most natural place for this is at the bottom of the search results view.
The workflow looks something like this:
I’m doing a couple of things here to make the workflow as fast as possible. First, I take the text from the search bar and carry it over into this view as the starting title. This is a nice quality of life feature that shows there was love put into this.
Second, I restrict what details can be configured for custom items. Only a title and the data type. Yes, I know people will ask to add a custom cover image or metadata, but that also adds a lot of complexity. The “add an item” workflow needs to be super fast and focused. Sofa is geared towards organizing lists, not building libraries.
Since a custom item doesn’t have a data source powering it, this means no cover images. I struggled to think through how to solve this problem. Adding a custom item without a rich cover image felt really out of place in the app.
First, I tried adding text labels in place of a cover image. I moved on quickly from this because it sucked. The covers weren’t feeling distinct enough.
My second attempt was better. I made a series of custom-designed cover images. This was making custom items feel like first-class citizens, but it had a scaling problem. I would need to create em>
The third time is the charm. I remembered that apps like Notion and Trello integrate with Unsplash to pull in beautiful images. Turns out the a href=“https://unsplash.com/developers”\>
The results are pretty great. The images from Unsplash are super high quality and feel right at home in the app.
All of this combined adds some much-needed power to Sofa. All without adding additional complexity.
I’m still digesting all the new stuff from WWDC, but a plan for what I’ll focus on this summer is slowly forming.
If you haven’t yet, go a href=“https://itunes.apple.com/app/id1276554886”\>
For the past year or so this site has been running on a href=“https://www.gatsbyjs.org/”\>
The process ended up being too tedious for what I’m looking for so I moved to WordPress.
I’ll break the Gatsby experience down into two parts: building and publishing.
Building with Gatsby was, and is, awesome. Once I got my head wrapped around GraphQL I was able to really get things moving. Also, hot reloading and Sass FTW.
This is where the experience fell down for me. Writing in markdown was great, but having to push to git and rebuild the site every time I wrote a new post kinda sucked.
If I was on my laptop all the time this would be fine. The problem is I do so much of my writing on my phone and iPad these days. While it’s technically possible to publish from iOS with a href=“https://apps.apple.com/us/app/working-copy-git-client/id896694807”\>
I looked at a few other options, notably, but ended up going with WordPress.
Also, I have some experience using a Headless CMS + Gatsby. It’s more work and maintenance than I’m looking for.
I’m by no means shitting on Gatsby. I love and use it for other projects. The a href=“https://www.sofahq.com/”\>
For example, this entire post was written on my iPhone, in Bear, and then published with the WordPress iOS app. Just what I’m looking for.
In iOS 13, people will be able to choose a light or dark “theme” that will apply system wide. Regardless of what you think about dark mode, apps that don’t adopt this will stick out like a sore thumb.
Luckily, Sofa already has a dark mode, but I needed to integrate it into these new appearance settings.
Since I have themes in Sofa, and plan to add many more, it’s not quite as simple as just following the system appearance settings. What if the user’s system theme is set to “light”, but they specifically want “dark” in Sofa? I need to provide the option of following or ignoring the system settings.
I added a setting in the Sofa themes view that either follows or ignores the user’s system appearance. By default, this is on.
If it’s on, Sofa will follow the user’s system appearance settings. There are some nice benefits to this too. The one I like is having your appearance settings follow sunrise and sunset.
The setting can be turned off two ways…
If the user manually turns this setting off Sofa will no longer follow the system appearance settings and will retain whatever current theme is applied.
If the user manually changes their Sofa theme while this setting is on, the selected theme will be applied and the setting will be turned off.
The assumption I’m making here is that the user wants a specific theme to always be applied and no longer wants to follow the system appearance settings.
Apple calls the new themes “appearance” settings, not dark mode. This makes sense since you can choose between light and dark.
The thing I need to make clear is the difference between iOS System and Sofa settings. When I say “system settings” is it clear I’m talking about your phone’s system-wise settings? I em>
The best course of action may be to follow the Settings app language call this “Appearance”.
Ok, now what about the switch label? Since a UISwitch is a true or false control, the label is kind of a mix between a question and statement. Here’s some options I’m thinking about:
I’m leaning towards “Use System Appearance” because it’s not specific to a specific light or dark appearance, and it’s a concise question/statement.
In case this isn’t clear enough, I’m adding some helper text.
If enabled, Sofa’s theme will match your light or dark appearance preferences in the Settings app.
Combined this should be clear to people how this settings works and what to expect when it’s on or off.
Expandable elements are extremely common across desktop and mobile apps. So common in fact that you might be wondering why I’m spending time writing about this. Things that are common are not always well understood.
A well-designed expandable element comes down to the placement and rotation of the caret (the little arrow). There is more than one way to do this, but let’s first go over the confusing way to do it.
If the caret is placed and pointing to the right you’re going to confuse people. This pattern signifies that upon interaction you will navigate one level deeper in the view hierarchy. If this element expands instead, that will be unexpected behavior. Essentially, you’ll be overloading this pattern with too many meanings.
The first thing you want to decide is where to place the caret. The caret can be placed to the left or right or the expanding element.
strong>
strong>
Easy peasy lemon squeezy.
You’ve been designing web apps for years, and you’re a total pro at it. Well done!
Now you have to design your first native app and you’re not quite sure where to start. Don’t worry. The good thing is most of your web design knowledge is transferable, but there are a few things you should keep in mind.
Understanding the environment you’re designing for is fundamental. What are the patterns and interactions users expect? If you design an iOS or Android app using only web design patterns, people will be frustrated.
The best way to understand platform conventions is to use that platform for an extended period of time. If you’re an iPhone user, try using an Android for a few months, and vice versa. Don’t let the Apple vs Google holy wars get in the way of doing great design work.
I’m aware that it’s not always feasible to acquire a second device, so here are a few other options for learning more about a software platform:
This is not to say that performance doesn’t matter with web apps, but people’s expectations are different. On native platforms, people expect fast loading, smooth scrolling, and an overall snappy feel.
Your design decisions affect performance in positive and negative ways. Work closely with your development team to make sure your design doesn’t compromise performance. If it does, change your design.
Over the past few years, the design community has latched on to the idea that an app must look and function exactly the same for every single platform its on. The reason sounds something like this:
“If the UI is the same on every platform then our customers can easily jump from web, to iOS, to Android and not have to re-learn anything. This is a better user experience.”
The statement above is true if people only use your app. Sorry to break it to you but your app is probably not the center of people’s lives. That would be nice 😜.
Your app lives in the larger context of someone’s life. They are not thinking about your app as much as you are. They use it when needed and then move on.
In reality, people view their phones as a single experience. They may jump from app to app, but the way they see it they are just “using their phone”. Your app should fit nicely into that experience. Anything you do out of the ordinary will be noticed, and that’s not always good.
I think it’s more user-focused to use native patterns because it takes into account the totality of the user’s phone experience. They’ll understand the navigation structure because it’s similar to most of the other apps they use. They’ll know they can swipe to go back because every other app on their phone behaves the same way.
Not every app needs to, or should, surprise and delight. Most of the time people just want stuff that’s reliable and works well.
Designing native apps is so much fun. Each platform has unique and powerful capabilities that are not available to web designers. Enjoy the experience of learning something new and don’t forget:
Go forth and design great native apps!
This is a list of resources for design systems. Hopefully, it will be as helpful to you as it is to me. This will be updated as I come across more design system goodies.
These are examples of design systems that I reference frequently. Either for their content, structure, or general design.
These are articles I’ve come across that have made me stop and think. I don’t necessarily agree with everything here, but this is all good stuff.
I’m looking at purchasing a Tom Bihn Synik 22. These are resources I’m collecting to help me decide if I should purchase. I’ll be updating this resource as I come across more info.
Sofa was suffering from a tight-coupling problem between view controllers. I discovered this while trying to refactor my massive controllers. I stumbled upon the coordinator pattern, which ended up being a great solution.
I’m a beginner when it comes to iOS development, and the coordinator pattern is an advanced one for me. I struggled with things that more experience developers would find trivial. There were moments where I thought I may have bitten off more than I could chew, but in the end it all worked out. I ended up learning a lot and improving the quality of Sofa.
For 2019, I’m working on some pretty large features for Sofa and thought I better clean things up before diving in. I was running into the issue of tight-coupling while refactoring my ViewControllers.
Up to this point, I’d been using segues to handle navigation flow. This wasn’t a problem until recently. I wanted to fix my massive view controller problem, but having tight coupling between my ViewControllers was making this incredibly difficult. Luckily, Paul Hudson wrote about the a href=“https://www.hackingwithswift.com/articles/71/how-to-use-the-coordinator-pattern-in-ios-apps”\>
After a quick read, it looked like the Coordinator pattern would solve my tight-coupling issues. So I dove into implementing it.
The coordinator pattern has been successfully implemented and is live in a href=“https://itunes.apple.com/app/id1276554886”\>
This completely fixed the tight-coupling issue that was holding a lot of improvements back. While I’m really happy with the results, there were plenty of tricky details that I struggled with.
For the coordinator pattern to work, you need to have a single code>
I wasn’t initially sure when to make a child coordinator vs just adding it to code>
If a view controller needs to present (not push) another view controller, it should be its own child coordinator.
This worked fairly well and forced me to not over-think things.
Delegation was something that I understood at a high-level, but struggled to grasp the details of. Halfway through implementing coordinators, I realized, “Oh, this is just delegation.” It was a nice “ah-ha” moment, and ended up giving me a deeper understanding of how delegation works.
Similar to delegation, protocols were another area of mystery for me. Having to create the code>
I ended up making one adjustment to the code>
code>
The main navigation flow for Sofa is handled by a subclassed navigation controller: code>
Pushing views with coordinators was no issue, but I was getting stuck on how to present views modally. Luckily a href=“https://twitter.com/oliverpfeffer”\>
Let’s look at the code>
First, we make it conform to the code>
code>
Next, we want to add a private var for the settings navigation controller. This will be used to push other views into this navigation controller.
private var settingsNavController: UINavigationController?
Finally, we put it all together in code>
code>
This may look simple, but in the moment I was incredibly confused 🤪
This is the most tedious and manual part of using coordinators. You need to make sure you’re removing the child coordinators you’ve created from memory. Since I had a few levels of child coordinators it took a lot of mental effort to implement and test. Overall, the effort was worth it for the final result.
The amount of unwinds I was using prior to coordinators was tragic. SO. MANY. UNWINDS. In the end, most of the unwinds were resolved by using delegates instead. YAY for learning more about delegation!
I’m glad I invested the time to implement coordinators in Sofa. Overall, it took me about two months (6 hours per week) to complete. Sofa is now in a better position to handle more complex features, and it taught me more about key iOS concepts: delegation and protocols. Wins all around.
I go over the reasons for making Sofa a free app.
I try to get a button working. Yes. A button.
I conducted research on the Sofa App Store page. I also discuss the process & tools used to conduct the research.
A video showing you the process I went through to design Quick Add in Sofa.
There’s a constant debate about whether or not designers should learn to code. While I’m happy to talk about that at length, I think it’s helpful to look at it from a different perspective.
What are you trying to accomplish? Are you trying to get a job, build up your resume, break into a new area of design, communicate better with devs? Learning to code really depends on what you want to accomplish.
In my case, I wanted to ship a product.
In 2015, I worked on the a href=“https://medium.com/sofa-blog/sofa-1-0-is-here-73a37e19ce3c?ref=shawnhickman.studio”\>
At this point I didn’t em>
Then life got in the way. This was a side project for all of us and we still had full-time jobs. The two devs got extremely busy and couldn’t work on Sofa at the same capacity. The app sat there not being updated and it was painful for me. I had tons of ideas based on user feedback to implement, but was powerless to do so. This was a big driver for me to learn how to code.
Like most designers, I had dabbled in HTML, CSS and a little Javascript. It wasn’t until I used a href=“https://framer.com/?ref=shawnhickman.studio”\>
Framer is such an amazing tool for designers to learn how to code. Being able to see the results of your code em>
From there I dabbled a bit more in Javascript but my heart was always in native iOS apps.
I had tried to learn iOS in the pre-Swift days, but Objective-C was difficult for me to digest. When Swift was announced, I immediately thought “Hey, I might be able to learn that.” I wasn’t sure, but it gave me a little confidence.
This is the hard part. There are many resources for learning iOS development, but most are pretty terrible. The teachers make too many assumptions about what the student already knows. This is true even for courses designed for beginners. They tell you how to do “X”, but never tell you that you also need to do “A, B & C”. It ends up being incredibly confusing, intimidating and demoralizing.
The single best resource I’ve used to get started learning iOS development was from a href=“https://twitter.com/MengTo?ref=shawnhickman.studio”\>
Design + Code taught me how to send data back and forth between views, change the design of the app with code and use Storyboards. Again, other courses do this, but they don’t explain it well to designers.
That course taught me the fundamentals of iOS development. From there I was able to explore and build a few prototypes. One was an early Sofa 2 prototype and the other was a collaborative whiteboard for iPads. I never finished either of them, but learned a ton in the process.
In the summer of 2017, I got to the point where I couldn’t wait any longer to move Sofa forward. My teammates’ shedules were not letting up and it could be another year until they could contribute again. That’s when I decided to build 2.0 myself.
When I started I didn’t know exactly how I was going to do it, but I dove in and got started. I knew enough of the basics to get going.
While building, there where two resources I used constantly: Stack Overflow and YouTube. Yes, YouTube. When you’re learning something new, reading about it isn’t always enough. Seeing someone solve the problem you have is incredibly helpful. That’s where YouTube shines. I would type in whatever I was trying to figure and then start watching. There are a few YouTube accounts that consistently taught me how to do things:
I am eternally grateful to these people for putting out great content that was easy to understand.
From July to September, I worked on getting the basic experience of the app functioning. Then from September to December I had beta testers to help test assumptions and refine the experience.
With every week that went by, I was gaining more confidence. There were a few tricky issues to figure out and a few things I was scared of, like Core Data, but overall it ended being fairly straightforward.
I ended up launching Sofa 2.0 on December 6, 2017. Technically a little less than 6 months, but I was never good at math anyway. It’s hard to describe the feeling of working on something for a long time and then sharing it with the world. It’s scary, exciting, humbling and most all…fun!
During this time, my good friend and Sofa teammate, a href=“https://twitter.com/oliverpfeffer?ref=shawnhickman.studio”\>
I am hyper aware that I didn’t and couldn’t do any of this alone. Framer taught me the basics of coding, Meng To taught me the basics of iOS development, and Stack Overflow, YouTube and Oli taught me deeper parts of iOS.
It’s not only the people who taught me code, it’s also the people who support me everyday. My wife, family, friends, co-workers, bosses, etc. I am extremely lucky to be surrounded by people who care about me and support my goofy passions. It’s something I never forget.
This isn’t just for designers, but for everyone. If you have a goal you’re driving towards, but currently lack the skills, don’t worry. Learning new things today is easier than at any other point in history. All you have to do is put in the time. It may not take as long or be as hard as you think 👍
If you’re interested in seeing the fruits of my labor, you can a href=“https://itunes.apple.com/app/id1276554886?ref=shawnhickman.studio”\>
When we started working on Sofa, it was very different from what you see today. In fact, it wasn’t even called Sofa. It was called many things: Movie Night, Movie List, and Movie Pal just to name a few. I wanted to share a little bit of the story about how we got to Sofa 1.0.
When we started working on Sofa, it was very different from what you see today. In fact, it wasn’t even called Sofa. It was called many things: Movie Night, Movie List, and Movie Pal just to name a few. I wanted to share a little bit of the story about how we got to Sofa 1.0.
Sofa was originally called em>
Then it became em>
Once we felt like we had something interesting with em>
Early sketch of UI and icon ideas from Sep 2014
We kept the first fews builds to ourselves to test and refine. We wanted to see if the product was even interesting to us before we let others check it out. We liked it and invited family and friends to check it out.
Having other people use em>
At this point, em>
During the beta period we were constantly talking to and soliciting feedback from the testers. We slowly added new features that we didn’t originally intend to or think of, such as, a movie detail page, Discover section, people pages and sharing. We also fixed plenty of poorly designed workflows and bugs.
We were in beta for close to a year. While this may seem like a long time, keep in mind that we weren’t working on this full time. We all have day jobs and families to take of. Those em>
The beta period was extremely important for us. Not only to find bugs, but to shape the product. When something is so new, it’s hard to nail down what it really is or if it’s good for anything. The only way to figure that out is to get people using it.
This was a tough one. There were a few times when I thought we were ready, but it turns out we weren’t. The moment I knew it was time to launch was when we were arguing over really minor features. The product was beyond good enough and we needed to see how more people would use it.
Before launch, we had a product roapmap that stretched many releases into the future. This was dumb. We were planning where the product should go before people had even used it. While it was good for us to have ideas for new features, making hard plans was a waste of time.
We ended up totally revising our roadmap about a month after launch, and only planning a few releases into the future. This is good because we are able to make plans based on feedback, be more flexible to market changes, and focus on what really em>
I can’t stress how important getting feedback was during this entire process. From the very early concept phase to the beta releases. Everyone’s feedback shaped Sofa into what is today and will continue to shape it in the future. If you are not constantly soliciting feedback for your work, it will never be as good as it could.
strong>
strong>
strong>
Ok, so we’ve shipped our 1.0. Now what? We have plenty of features in the pipeline, but we don’t want to plan too far ahead. This is all new to us. None of us has ever created a company or product before, so we are simply rolling with it. We are learning tons about product development, marketing, strategy, etc. We are probably going to screw up a lot, but man-o-man is this fun 😜
If you haven’t downloaded Sofa, you can grab it from the a href=“https://appsto.re/us/Stz74.i?ref=shawnhickman.studio”\>
Let me start this off with this simple fact: I’m not a heavy Facebook user. Most of my digital time is spent in a href=“http://twitter.com/poohbers”\>
It’s natural to compare Facebook’s flagship app and Paper, but I don’t see them as competitors. The flagship app is designed for a broad audience, and Paper is designed for a narrow one.
I took a backstage tour at Disney World a few years back, and something our guide said really stuck with me, “We try to tailor our experience to every type of person who comes to our parks.” On the surface it sounds simple, but think about how hard that is. People are so different from each other. They have different beliefs, tolerances, desires, expectations, etc. How do you design a single experience tailored to each of them? Maybe this is why we are seeing a big trend in the unbundling of apps. Once you gain a certain number of users, it becomes too difficult to keep them happy with a single experience. Hence, smaller focused apps aimed at making specific types of people happy.
This may sound obvious, but Facebook has a lot of users from all over the world. Can they design a single experience for a billion people and have them all be happy with it?
At this point you may be saying, “Yea yea, Shawn, but didn’t you see the numbers that Paper users only use it for x seconds per day/week/month?” Yes but I don’t care about that metric because it doesn’t tell me anything. It doesn’t tell me if the person is happy, frustrated, busy, excited, or whatever other infinite senarios I could write. Metrics are good, but they tell you very little. As a designer, I would rather have a happy user that spends 10 seconds than a frustrated user that spends 10 minutes.
I don’t know what the future of Paper will be. Maybe Facebook will kill it if it doesn’t reach a certain number of users, or maybe they will continue making these small focused apps for a narrow audience. In the meantime, I’m enjoying Paper. It’s making me a happier Facebook user, even if it’s only for a few minutes a week.
Currently, when I get a text or push notification on my iPhone, it interrupts whatever I’m doing and shows me a dialog box that I must interact with. It’s insanely annoying.
After thinking about how it could be implemented on the iPhone, I think I have come up with something that solves this problem.
Here are some additional thoughts about my decisions:
This got a nice writeup on a href=“http://techcrunch.com/2011/03/07/iphone-notification-system/”\>