Hi, I’m Joel and I made Hush – a cookie notice blocker for people who want a less interrupted browsing experience. In my day job I work as a principal engineer at Klarna where I mostly do architecture, processes and tooling – so I basically never get to write any UI. While I understand the need for specialization in organizations and society, I try to keep both my brain halves working – so I did both designing and coding for this project.
It’s kind of one of those slightly ridiculous “I couldn’t find a good Todo app so I wrote my own” stories. Basically I wanted an extension that worked on Safari both on my phone and on my laptop. At the same time it was important for me to not block ads. While I don’t enjoy them one bit, they are the bread and butter for many publishers and creators on the internet and they deserve to eat like the rest of us. Additionally the absolute majority of extensions require full access to the browser, which comes with major security concerns such as passwords leaking. Some extensions will even make money by selling your browsing data.
So I decided to build something on top of Apple’s content blocking APIs instead, where the browsing session is sandboxed and as a developer I’m prevented from snooping on the user.
Hush is, besides serving my own utilitarian purposes, primarily a creative outlet and a vehicle for learning and trying out new technologies. I don’t charge for it and I made it open source to prove there is no monkey business going on.
Because of Covid I hadn’t taken enough vacation last year so I was “forced” to take a long one before the year ends. So I had a lot of time when my girlfriend was working and everything else was shut down. I made the initial version over the course of about two weeks, with active development time maybe about 3-4 days. The only investment I made was to pay for the Apple Developer Program, which is needed to publish apps on the App Store and is about $100 on an annual basis.
The app is intentionally very simple. That doesn’t mean I didn’t put a lot of effort into it – making something simple is actually quite difficult. The less features it has, the more every detail matters.
The launch itself was quite undramatic, I just published it on App Store and sent a tweet about it. It fairly quickly got recognition in the Apple community and I figured that I might as well use that momentum and haphazardly post it to Product Hunt. It became #2 Product of the Day, but that barely had any effect on spread or installs.
The reception overall has been very positive, and honestly a lot of the negative feedback has been about not supporting their specific OS version or browser. At the peak it averaged about 10K installs per day, and now it’s down to around 1K. It’s by far most popular here in Germany, probably because their culture is very privacy aware for historical reasons.
In the development phase I sent a TestFlight link to a few friends in tech for them to try it out. I thought the concept was so simple and obvious that it didn’t need any explanation, but they mostly didn’t understand what it did or what made my app stand out. So my marketing efforts went into making a landing page that explained that.
I was lucky to be featured on the App Store and got a lot of installs that way, but that wasn’t planned nor a strategy. Other than that, most of the spread was viral; people wrote about it on blogs (especially impactful was glowing review on Daring Fireball), talked about it on podcasts, posted it to Reddit, Hacker News, Twitter, Facebook, LinkedIn etc. I actually tried posting it to Hacker News myself, but someone else had already done it, so my submission was buried.
The app basically consists of two parts: the app UI and the block rules.
The app is entirely written in Swift UI for me to explore the latest additions and how well it works as a cross platform solution. I really like the declarative UI paradigm that got popular with React, and Swift UI is the most promising implementation that I’ve seen so far. The technology is still new and it’s not a realistic choice for most apps yet, but I figured that for a completely new and small app it would work. In general I’m pretty happy about it, but it needs maybe two more years of maturity and a larger component library before I would recommend it to everyone. The app itself has no third party dependencies, doesn’t do any networking nor analytics.
On the block rules part, I started by writing all the rules by hand, but quickly found out that there are already existing decent open source block rules out there that are much more mature and complete than what I would manage to do on my own, such as Fanboy’s List. Unfortunately, all the lists out there are written using a format that is incompatible with Apple’s own content blocker API, so the majority of my efforts went into writing a script that transforms that format into Apple’s. I’ve had my eyes on the node alternative Deno for a while and in my opinion it’s especially well suited for writing CLI tools like these. I really like that it comes with batteries like formatting, test runner and a reasonable standard library and has a sane security model. The biggest drawback is the minuscule ecosystem, and I don’t think I would use it outside of scripting at this point.
In my day job I’m quite disconnected from the end customer and even the end product. The bigger the organization you work for or the more high level your job is the harder it is to gauge the value of the work you’re doing or what impact you have.
As an indie dev it’s the opposite, so it’s pretty cool talking directly with people that like your product on Twitter, knowing that you alone are responsible for the thing they enjoy and are able to fix their problems. That of course also makes it all the more emotional when someone hates it.
I believe that most of the bad products out there are not a cause of incompetent people, but rather competent people not feeling connected to or responsible for what they make. Juan Lulkin, an ex-colleague, recently framed it well: “Quality is caring. Being good at something is a side-effect not a requirement.”
For Hush I don’t have that many new features in mind, but rather keep grinding to make sure it works well with all the websites on the internet. The only thing I’ve considered is self-updating block rules – in fact I’ve already written this functionality, but decided not to release it. Since the app is really tiny and most people have auto-updates enabled that is a more efficient, albeit slightly slower rollout mechanism.
I’ve got a few other things brewing, both new ideas and some old projects that I never got around to finish. None of them are apps however.
My aforementioned ex-colleague is working on a social network called Chll as a counter movement to the A/B tested growth hacks that turned us into attention junkies.
I’m kind of rediscovering the world of long form podcasts, so I don’t really have any hidden gems, but I’m currently enjoying the Lex Fridman podcast.
On learning, online courses, videos etc don’t work too well on me. Usually they are outdated and either too basic or too advanced for me depending on the subject. I also have a hard time staying interested and focused enough to actually take in all the information. For me I prefer starting with a real problem to solve which keeps my motivation and focus on top. Having those concrete examples helps me go deep and quite often end up reading source code instead of documentation/books to understand the behaviors I’m observing.
That said, before Covid I enjoyed the occasional lunch and learn – not so much for the video content, but as a conversation starter. Tech talks are usually geared towards “thought leadership” that tends to be self-promoting, exaggerated, and lack nuance, so having a healthy discussion about the core ideas is what makes it interesting to me.
A knowledge-sharing community for app developers