Lux Year 4: Doubling Down

Ben Sandofsky
Jun 2, 2021
20 min read

Four years ago, we launched Halide from a kitchen dinner table in Sebastiaan’s apartment in San Francisco. We didn’t have huge ambitions when we built and launched our little camera app: we had made something that was great for our own needs. Perhaps, we thought, a few others would like it too. Four years later, it’s not a little app anymore. It’s now a business. A company!

Four years is a major milestone for a new company. At startups, this is when employees start facing existential questions. Do you want to stick around another few years? Are you happy doing what you’re doing? Do you believe in the future of the company?

We aren’t startup employees. We came here chasing our passions, not profit. The ultimate question is whether we can continue pursuing those passions. After the success of our second app, Spectre, we asked ourselves, “What do we want to be when we grow up?”

We talked many a late night and came up with a roadmap of our ambitions: three apps. We teased them last year:

We know everyone will love these apps, but there’s one small problem: our two existing apps fill all the hours in our day. While we delegate some work (like promotional sites) to contractors (thank you, Jonathan!), we need to build out our core team to build out our core products. We needed to rev on the company.

We decided to spend 2020 tackling our most ambitious (and possibly-controversial) dream product: “Stark”. We knew this was going to be a big project, not only technically, but one personal and close to our hearts. Stark would launch as Halide “Mark II”.

We knew Mark II would define our fourth year, and if everything went according to plan, it would carry us through to the next phase. So how did it go?

This retrospective tells all. It explains why Mark II laid the groundwork for the company. We’ll cover its development and launch, the user reaction, and finally touch on financials. Read to see our moments of fear, joy, and everything in between…

Why Halide 2.0?

Why double down on an existing product? After three years, Halide was doing extremely well. It had become a well-known name: you could spot it on the home screen in a tech website’s review of the latest iPhones, catch it in the wild being used by professional and amateur photographers alike, and see it featured in every country the App Store is available.

Halide was designed and built as a passion project. We launched it with no idea it would develop a big following, and we never thought we’d be adding features for years.

From a design perspective, Halide 1.0 was born on home-button iPhones; a redesign let us perfect it for the latest devices and old ones alike, and future-proof it for many more years of updates. From an engineering perspective, we had ambitious ideas to engineer the best photography tools available by a mile, and to really take advantage of the latest technologies.

Then there’s the money part. Halide experienced solid revenue growth for years, despite giving away huge, free updates for three years. We believe deeply in goodwill, and thinks it makes the best marketing. We didn’t want to chop-up Halide so we could hide features behind additional in-app purchases. It was all going well, so why mess with what works?

Well, in the words of Ed Catmull, “Success hides problems.”

While gross revenue more than doubled from 2018 to 2019, we did not owe that to Halide. We owed that to the launch of our second app, Spectre. Not only was the launch a massive success, but Apple awarded it iPhone App of the Year. This had a halo effects on Halide thanks to our multi-app bundle. We were beyond proud of 2019 — but it would be dangerous for us to confuse a few home runs with building a sustainable business.

As a two person company, Halide development slowed down while we built Spectre. Sure, we could chase another home run by starting a third app, but now we’d have to shelve both Halide and Spectre. This is the tradeoff of a Pay-Once model: you’re incentivized to ship big new apps that draw headlines, rather than investing in your existing portfolio, and improving the lives of your users.

Users noticed Halide updates slowing during Spectre’s development. We kept fielding questions from our die-hard Halide users asking about our plans for the next update. A few even asked if it was abandoned! It was clear users craved more from Halide, but that’s not all: we wanted to keep building Halide.

There was just no way to build new apps without growing our little team. To do that, we need stable revenue.

As a Bay Area company, we know one approach is venture capital. But we built Halide as a passionate, opinionated project, and well… it is very hard to bring on VCs without compromising on the things that makes our apps great.

Another way to increase revenue is to—hear me out here—charge more.

We always felt Halide was underpriced. We launched in 2017 back when many “pro” apps cost $3. Halide stood in a class of its own, so we felt we comfortable charging $6. It worked. It worked so well, in fact, that by 2019 all the camera apps (including a free one) went up to match its price. Meanwhile, our most passionate users told us, “I wish I could pay you more.”

We knew Mark II would raise the bar, and with the work we were putting in it was looking more and more like a new app than an upgrade. This felt to us as the best time to release it as a new app, reset our price—or introduce a new business model. We’ll get to that in a second.

A second issue that stood in the way of hiring someone: revenue volatility. Consider this breakdown of 2018:

2018 Revenue by Month. New hardware drops in Spring and Fall, causing sales spikes

During the Holidays, we earn 4x the revenue of summer months. That’s expected and fine for ephemeral products, like video games, but users expect camera app updates year-round. Oh, and we need to pay employees year-round. It’s scary to grow a company with this volatility; one bad winter, and everything falls apart. If we hire people, we want them to be able to count on us to be able to pay them.

Remember, this is 2020. As a pandemic suddenly happened, people stopped going on photography trips and started baking sourdough. Revenue dipped — so low, in fact, that we slightly panicked about hiring another developer. Revenue recovered a month later, when Apple launched the iPhone SE2, but it was a still wakeup call. If we want to grow the team, we can’t bet so much on an unending stream of new users that show up.

We wanted to keep building Halide. Our users wanted us to keep building Halide. And we wanted to expand the team. The path seemed clear: After years of free updates, it was time to dip our toes into into recurring revenue. When I was growing up, we called them “Paid Upgrades,” but the App Store… complicates things.

Enter Subscriptions

The App Store lacks any native concept of a paid upgrade. The closest it offers are subscriptions. It isn’t our ideal solution, but on the bright side, subscriptions can reduce volatility. For example, rather than $24 for an annual upgrade, you could charge $2 a month. We decided to start considering a Halide subscription model.

We realized there were immediate benefits. There’s powerful App Store features only supported though subscriptions: a paid app has one price, that is more or less the same around the world. With subscriptions, you can set per-country pricing. That 30% fee Epic complains so much about? If your retain a subscriber for a year, Apple reduces their cut from 30% to 15%. Want to offer free trials? It only takes a few clicks.

All those benefits aside, with stable recurring revenue lets us invest in updates that serve our active users, rather than splashy updates to bring in new users. Subscriptions also open the door to products with ongoing costs, such as servers. We don’t pre-announce products, so we’ll just leave that there…

That all sounds great. However, as I mentioned, we love goodwill, and a lot of people wince when they hear “subscription.” The first thing that pops up in a user’s head are scammy companies that make cancellation a nightmare, like multi-level marketing schemes, gym memberships, and Adobe. The App Store prevents these shenanigans: you get a reminder email before renewal, and you can cancel within the Settings app in seconds. Whenever a company offers a subscription, I always try to buy it through the App Store.

Some folks absolutely loathe subscriptions on principle, and will never rent something if they can own it. This is not unreasonable. Halide is like a camera, and while professionals are used to renting gear, most consumers own their camera.

We wish the App Store offered more options than subscriptions. We’d love something similar to the Sketch licensing model; if you don’t renew Sketch every year, it still works, but you stop receiving updates. Few can argue against the fairness of that, but since that doesn’t exist on the App Store, the best we could offer is a separate Pay-Once option in Halide.

Note I said ‘few’ can argue against the fairness. Unfortunately, there’s that vocal minority of users that fill with rage at sight of subscriptions, pay-once option or not. We can never please them. These folks will leave one star reviews and toxic internet comments. On a personal level, you have to brace yourself for negativity. On a strategic level, you need to prepare for an angry mob that will amplify outrage over any changes or mistakes. I will admit that we were afraid of having a potential angry mob on our hands.

We figured the ultimate rebuttal and pitchfork mob deterrent is to just offer a pay-once option at a sustainable price point. Which leaves us with the question: what are the right price points for Pay-Once and Subscriptions?

A Crash Course in Pricing

When I was young and looking for my first job, I asked my dad, who majored in economics, what I should be paid. I asked, “What am I worth?,” and he replied, “By definition, you are worth whatever someone pays.”

Outside of commodities like aluminum and orange futures, the cost of materials and labor has no bearing on price. It’s all about what customers will pay for the value you deliver. A Kia and Porsche 911 cost the same to manufacture, and serve the same function, but the Porsche costs 10× more. That’s because people will pay a premium for design, performance, and even the cool-factor. Nobody grew up with a poster of a Kia hanging in their bedroom.

Of course humans use price anchoring to determine what’s reasonable. If I ask you what you’d pay for a cup of coffee, you probably think $5, thanks to Starbucks. Believe it or not, people used to think of coffee like Folgers, a commodity worth 5 cents a cup. Starbucks broke that anchoring by making coffee a luxury experience, and we think our apps can stand out in a similar way.

To find our new price, we downloaded a bunch of popular successful photo and video apps that offer both subscriptions and Pay-Once. We found Pay-Once prices were around $60. As the goal of the launch was to stem negativity, we decided on $36, with a launch discount of $30. If faced with complains about subscriptions, we could say, “There’s also a pay once option!.” If anyone complains about the pay-once price, we can then explain it’s half of what other apps charge.

The ‘just charge more’ theory makes sense on paper, but we decided to run a secret test to verify our ideas. In the summer leading up to launch, we quietly raised the price of Halide 1.0 by $1 every week. We stopped at $20, partly because we didn’t want to draw too much attention to our experiment, and partly because it felt wrong to charge new users the final price for a product on its way out the door. It kept selling — and we did not get complaints. Our Pay-Once pricing seemed validated.

For our subscription price, $11.99 a year just felt right. It would cover our costs for growing the company after Apple’s cut. We decided to launch Mark II at a discount: the initial price of $9.99 per year would reward early adopters, who would lock in a lower price. We also figured it would jump-start our subscriber base.

Now we just had to come up with the last detail: the upgrade path for Halide 1.0 users. This was not going to be easy.

The One Halide Model

Going from Halide to Halide Mark II could be done in a few ways. We could release a second Halide app. After all, this was basically a new app. We had completely redesigned it, re-worked many of its core features and added and changed over a hundred other features and aspects. Forget about Halide, meet Halide Mark II!

The problem, however, is that we’d have two Halides on the App Store. It would confuse anyone searching for our app —after all, which one is the ‘right’ one? There was also the complexity of trying to give a discount to our existing users; Apple’s “Bundle” discount system doesn’t work with in-app purchases.

Eventually, another solution dawned on us: just replace Halide 1. One day, every existing Halide user would wake up with Mark II on their phone. Existing users have an expectation of continuity, though. It would be completely unacceptable to force our users pay a second time to continue using the app. Perhaps, in theory, we could lock new features behind an In-App-Purchase. This didn’t sit right with us. It just didn’t feel good.

We decided on the ultimate gesture of good will: all existing users would get Mark II for free. After one year, Halide still works, but they will have to upgrade to access new new stuff. That’s four and a half years of free updates.

When it comes to that transition, we know this is going to be complicated. But hey, it’s a one-time-only thing for Halide 1 users. We still don’t know how we’ll implement it, as it depends on whatever we ship this year, but I guess we’ll cross that bridge when we come to it.

Shipping Mark II

Okay, we had a plan. Now we just had to actually ship this enormous project.

Half the challenge of a big upgrade is supporting the old version of your app. In small updates, you would build your new features into the old app hidden behind flags, and un-hide them when they’re ready to release. We couldn’t do that in our case, because too much of Mark II would change. When we say it was like a whole new app, we really mean it.

That also meant that we effectively had to support two apps. We decided to release one last “big” update to Halide 1.x in March 2020, and it was painful. In addition to halting progress on Halide 2.0, we had to duplicate some work as we ported over the 1.x changes to the new codebase. After that update, we knew enough was enough. We would halt all updates to Halide 1.x. Everything was going into Mark II.

We knew we had to get it out before the fall launch of new iPhones, in part because we have to update Halide to accompany the hardware changes. If Mark II wasn’t ready, fall would be dominated by updating Halide 1.x, and there’s no way Mark II would launch before 2021. On top of this, it’s a very bad look to launch a significant “paid update” right after a surge in sales.

We targeted September, when Apple typically releases its new hardware. With the deadline coming up, but took a big sigh of relief with the news the new iPhones were launching in October. Even with the extra month, we spent every last minute getting things into shape. It would have been absolutely impossible to ship Mark II in 2020 without bringing on our second iOS developer, Rebecca.

After a massive crunch to make that new hardware deadline, we put the finishing touches on it and submitted to Apple. App Review surprised us with repeated rejections due to our subscription sign-up flow. Despite so many news about prolific App Store scams, it turns out App Review system is very strict when it comes to ensuring your subscription terms and prices are clear. They even had notes on seemingly small things, like the placement of our “Terms and Service” button. None of this was onerous, but it took a week of back-and-forth to get our final build approved.

Launch Day

At 7:00 a.m. on October 22—a day before the iPhone 12 would be in stores—we pressed the “Release” button. We had a press embargo set for 9:00 AM. Neither us nor the press would mention our big update until then.

Then it happened. Minutes after 7 AM, reports rolled in with the worst imaginable bug: users who already paid for Halide 1.0 weren’t getting their free upgrade. While some users had read our blog post that explained they got a free upgrade, and understood this must be a bug, most users were unaware of our plans. They thought we expected them to pay a second time, and negative reviews and angry tweets began pouring in. No amount of pitchfork mitigation could save us from this kind of angry mob.

If that bug was there past our 9:00 a.m. press embargo, it could have destroyed the whole release. 7:15 to 7:25 a.m. were the most stressful ten minutes of my professional programming career, as we hacked together, tested, and submitted a fix to Apple. I begged our developer relations contact to expedite our review, which thankfully went through.

Aside from that incident, the launch couldn’t have gone better. The app itself received critical acclaim, and huge press coverage. A few commenters still complained about subscriptions, but years of building goodwill finally paid off as our own users came to our defense.

Many existing Halide users reached out to tell us that they were so happy with our approach that they decided to pay anyway. Support was so overwhelming that we hadn’t anticipated some of their requests: Some requested a way to both pay-once and subscribe, a scenario we had not imagined! We have since expanded our ways that existing users can support us, and added a special icon for those absolute heroes. Yes, our users are the absolute best. If that’s you, thank you so much.

Scaling Support

The influx of new users put a lot of stress on support, which was split among our team. Fortunately, after asking around our network, we met our amazing new support lead who is now is not only answering customers faster than ever, but helping us write support documentation and more. Thanks Jaimi!

If you have ever contacted us after the big launch, you might have emailed with her. Send her a note of appreciation here if you’d like!

The Free App Problem

There was one post-launch surprise that was out of our control: the only way for us to offer the choice between Pay-Once and subscriptions is to make the app free to download, and throwing up a “paywall” at launch. The App Store doesn’t surface this clearly: it just lists it on the “Free” charts. Many folks downloaded Halide expecting it to be free, and get upset that we ask for payment.

We quickly added a disclaimer to the very top of our App Store description: “Please note Halide is not free. We offer a 7-day free trial for annual memberships. Don’t like subscriptions? You can also buy the app outright with a single in-app purchase.” It doesn’t seem to help. To this day, our top source of negative reviews are people who are shocked you need to either pay for the app or start the free trial. We’re lucky that we have a lot of very happy users that still leave positive reviews.

We’re not alone in this, it seems: Apple Design Award candidate (Not Boring) Weather has the same problem (and solution):

Apple could solve this problem in two ways. First, they could update the UI. Right now the only insight the user has into the apps business model is the download button. It’s either “GET” or something like “$1.99,” and users think the former always means “FREE.” I don’t know if the solution involves a third type of button, or some other label, but the fundamental problem is that the App Store UX needs some rethinking.

There’s a much simpler solution short of a design overhaul. For apps that require payment to function, don’t let users leave a review unless they’ve at least started the free trial.

Pro Phones, ProRAW, Per Month

We, of course, caught zero breaks after launch. We updated the app for the larger and smaller iPhones that were out a bit later. The iPhone 12 Pro Max camera in particular proved to be a fantastic pairing with Halide.

December saw our last major update of 2020, with ProRAW support. We went above-and-beyond the ProRAW support available in the first-party app to address the unwieldy file sizes of ProRAW. By letting users choose 10-bit capture, file sizes dropped up to 50%. We added a setting to disable Deep Fusion, and more.

Alongside the update, we published a deep-dive into ProRAW, and RAW in general. The positive reception bodes well, as it’s our long term strategy to help people become better photographers. We can’t wait to share similar deep-dives in the future.

We weren’t quite done there: Some customers told us that they thought Halide was $9.99 a month, not a year, and had decided to pay anyway. We took this as a sign we should launch monthly subscriptions sooner rather than later, and they launched in late January.

The Notorious XPC

Those are cool features, but let’s talk bugs. Between iOS 14 and our own massive code changes, a lot had changed with Mark II. We decided to start the new year ensuring Halide was in good shape. Jaimi was invaluable in identifying bugs, and found the biggest issue, by far, was a failure to save photos. It was accompanied by a cryptic error involving a “helper process” or “XPC,” which stands for “Cross Process Communication.”*

*On that note, if your photos in Halide ever do fail to save, we have a special Rescue mode built-in. More on that in this post.

These clues suggested this was a bug in iOS itself, and it seemed to correlate more with iOS 14 than Mark II. We reported the issue to Apple in November 2020, and heard nothing back. In January, with reports piling up, we decided to build a web-service that allowed users to report capture errors in Halide.

It turned out about 0.01% of users ran into the problem ever day. While that sounds small, that means one out of every 10,000 customers will be get very mad and probably leave an angry review.

We dug deeper and found it to be a bug when iOS needs to free up memory. Sometimes iOS terminates the program that manages your photo library assetsd. There’s nothing we can do short of telling users to restart their phone. (We kid you not, it might also help to manually quit apps, but we’re not going to recommend it.)

All of this was a reminder of the need to grow the team, as we wasted weeks of engineering time on this bug. It isn’t about, “twice the engineers can ship twice the features.” It’s about redundancy. These unexpected time sinks shouldn’t grind feature development to a standstill.

Halide for iPad

2021 has been packed with working on our ambitious plans. One of them we released earlier this month, when we launched Halide for iPad.

While we planned to launch iPad support with Mark II, it was cut two months before the launch to make our October deadline. This turned out to be a perfect move, not only for Mark II but the feature itself. The extra time in 2021 let us absolutely perfect the iPad experience, and take it to another new level. We even timed it with the release of the new M1 iPad Pro.

In terms of marketing, Halide for iPad was allowed to stand on its own, rather than be exist as a Mark II bullet point. It even gave us enough time to produce our first fancy ad with our incredible resident videographer, Jackson Hayes.

Halide for iPad was a perfect lead-in to our four year anniversary. That brings us to today!

The Numbers

Let’s look at the year in review. We expected 2020 revenue to be lower than 2019, and… it was. There’s no twist here. We had an unusually good 2019, followed by a once-in-a-lifetime pandemic. AppFigures reports app downloads across the entire “Photo & Video” category were down 35% from the year before.

The AppFigures index of “Photo & Video” app downloads

On top of this, Halide 1.x updates waned as we focused everything on Mark II. That meant fewer sales for the first ten months of the year. Then we went and gave away Mark II to existing users. With all of that context, here’s the graph:

While company revenue in 2020 is down 47% from 2019, it’s up 41% from 2018. The vast majority or revenue comes from Halide. For a launch about investment over profit, we are very happy with the results of the last eight months.


Let’s talk about the ‘s-word’. How did that go? In brief: good! While subscribers outnumber Pay-Once buyers by almost five to one, Pay-Once revenue makes up 39% of total revenue. We really think that it’s important to cater to a segment of your users that would not even consider a subscription at any cost out of principle.

Out of our subscribers, 92% are on the annual subscription, which is expected. Not only are annual subscriptions a better deal, but they launched months earlier.

We worried that launching monthlies would eat into our annual plans, but we were surprised to find no impact. It seems monthly subscriptions were purely additive to revenue. About 35% of new subscriptions are monthly, and contribute to 10% of our revenue.

Mark II units sold (active subscribers + Pay Once) are equal to 25% of our monthly active users. We assume many, if not most, Mark II sales came from brand new users. That’s all to say, we’re very interested in seeing how many 1.x users upgrade after their year of free updates end. Our user base is now a delightful mix of Halide ‘veterans’ and newcomers that have only known the refined Mark II.

As we said earlier, coffee once cost 5 cents a cup. Today, independent coffee roasters show people will pay a premium for love and care put into each cup. While the app gold rush of 2009 gave way to cheap or free apps, we hope the success of Halide’s pricing shows there’s a market in “Second Wave Apps” which cater to quality.

When Halide came out, many questioned our wisdom in what they perceived as a crowded area of photo and video apps. We thought — and continue to think — the future is bright. The sun is just starting to rise on a new landscape of photography apps.

In Closing

Like the rest of the world, we had big plans (and low expectations) for 2020. When confronted with a worldwide pandemic, we doubled down on what we were passionate about. Rather than focus on revenue, we built a solid foundation for our next big things, and walked away very happy with what we built, and how we grew.

Four years is a major milestone for new companies, a time when you face existential questions. Do we want to stick around for another few years? Are we happy doing what we’re doing? Do we believe in the future of the company? Our answer is a stronger-than-ever, capital-Y, Yes.