Happy new year! A lot has happened with the project over the last year. There's been many positive developments, but I've also made some mistakes along the way. Let's dig into all of it.
Not much has changed in regards to scope, but there have been massive moves behind the scenes to improve how everything comes together.
Probably the most impactful engineering change was deprecating Mac Catalyst. When I started the project I wanted to make being multi-platform as easy as possible. I decided to use Mac Catalyst, a iOS/macOS translation layer, so that I could write code once for iOS and reuse it for macOS with as few exceptions as possible. It worked at first, but as the app got more complex and my standards got higher I started running into issues. For example, for a long time the app would bug out in full-screen mode on Mac. Toolbar buttons would just disappear and there was zero useful feedback I could use to figure out why it was happening. Utterly frustrated with this problem and many more, I finally gave up on Mac Catalyst and switched to a truly native approach to Mac. The real kicker is that it wasn’t even difficult! I had built it up as a huge hurdle, but since I’m using SwiftUI it was mostly just replacing the “if macCatalyst” macros with “if mac” macros. The code is still ninety-percent the same between iOS and macOS. I wouldn’t go so far as to say I was dead wrong about Mac Catalyst. It was useful starting out in that I could focus on just learning how iOS worked without worrying about Mac so much. That said, I kept it around way longer than I should have and ended up wasting a bunch of time chasing issues when the fix was simply being lost in translation.
Another engineering initiative that really had an impact this year was focusing on automated UI tests. The initial motivation was that I was sick of manually taking screenshots for the App Store, but in the process of writing the tests I discovered dozens of bugs and areas for improvement that I wouldn’t have caught otherwise. I still hate tests and think XCUITest is one of the worst frameworks ever devised, but it’s hard to ignore the improvements to stability and quality tests have provided.
The biggest design challenge I tackled this year was color. Now I know what you’re thinking, “What color? Everything is just gray.” Well let me tell you, those grays aren’t normal grays. On Mac, background colors and materials (the overlays that blur things underneath them) are influenced by the current desktop background. The result is that the design needs to support a near infinite number of underlying hues. If you try to use any fixed gray tone on top of the tinted backgrounds it just ends up looking bad. Add to this light and dark appearances and the result is a recipe for going insane. To be fair, this is an optional thing. Many developers ignore it and go their own way with colors, especially for main content areas. I however wanted the cleanest and most native design possible, so I toiled for what feels like hundreds of hours perfecting the shading.
Last but not least, overhauling how items are displayed was a big focus late in the year. Before, content from the feed was the main focus. Now, the app has a more full-featured built-in browser view and opening item links is the main focus. Very few feeds include full content with items, but all feed items must have a link. It just makes sense to base an aspect as important as viewing/reading on a universal attribute.
Long overdue, I finally got this website going! It’s still very much a work in progress, especially on the content side, but it’s nice to have everything setup. The plan for at least the next year is monthly blog posts and working on help articles.
If I remember right it was around August this year I shut down the Discord server. Over the year or two it was going I had maybe a half-dozen good conversations, but mostly it was just me posting release notes and random questions to a handful of inactive users. A spammer joining and uglying up the place was the final straw. It just isn’t worth it keeping up with yet another app. Email is easier for chatting and the website is better for posting updates.
The biggest mistake I made this year was flirting with making the project open source. In a nutshell, I made the code available under MIT license, then over the course of six months discovered that it wasn’t a smart idea, then made the repository private again. So why isn’t open source a good fit?
First, a paid business model on the App Store doesn’t fit well with open source code. I considered making a free download for Mac outside the App Store, changing the business model to in-app purchases, putting multiple versions on the app store, etc. It all leads to more complexity and admin overhead that I don’t want to deal with.
Second, another app of mine, Auto Reload, that is open source and also on the App Store was ripped off by a developer who’s modus operandi seems to be re-offering open source projects. With Auto Reload, I don’t really care. It’s a tiny project and I don’t have much time into it. It’s distasteful, but it’s not violating the terms of the license. However, if that happened to Den, someone ripping it off with very little effort just to scam App Store customers that landed on the wrong page, well I would be pretty upset.
Maybe someday I’ll give open source another go. If I do I think it will coincide with a change to the business model and a less permissive license. I apologize to anyone who followed the project on GitHub during it’s short time in the sun.
Oh yeah! Check out those gains! If I take out the $99 developer membership fee then I'm up $90 for the year. Den has had its first profitable year! 🤑
It’s been a good year. On the engineering front the project is more stable than ever. I’ve also made a lot of progress on design and honing the user experience. Improvements in the app has created some room for me to consider other stuff like marketing and I think that’s showing up in the sales numbers. Obviously, there’s still a long ways to go, but I’m proud of how far this project has come.