Published on

Indie Dev Weekly #1


Before we get started

I've been keeping an eye on the weekly reports of other developers and development-related organizations. Originally, I had planned to update this blog regularly as well, but due to various reasons (mostly laziness), I've been updating irregularly and even went on a long hiatus.

Now, I've decided to start publishing a weekly report (as much as possible) starting from today. On the one hand, I want to push myself to produce content every week, and on the other hand, I hope to use the weekly report to review and reflect on my weekly work.

This could also be considered as some form of "build in public," or rather "build in limited public" 😜.

Zen Flip Clock

This week, I've been busy working on the Zen Flip Clock for iOS, specifically on adding new features for version 4.2.0.

  1. Added two tutorial guides
  2. Customizable time settings
  3. Celebratory animation upon completion of a Pomodoro session
  4. Added and optimized flip sounds
  5. Optimized duration adjustment for Pomodoro

The most time-consuming task was dealing with two bugs caused by the SwiftUI DatePicker. The first bug was resolved, which was that the date selection couldn't be clicked, but the second bug was that the size couldn't be freely customized, so I had to compromise on that. Each bug took half a day to resolve.

The new version is almost ready to go, I just need to do some final sound optimizations. I'm feeling pretty confident that I'll be able to submit the update next week!

Also, a new android version of Zen Flip Clock has been released on Google Play(2.5.11), which is two months after the last release (2.5.10). Unfortunately, the recent earthquake in Turkey has had an impact on downloads and revenue. It's interesting to see how world events affect the popularity of my app. Russia used to have the most users, but now they've dropped to fourth place, and Turkey has taken over as the top country. However, with the recent events in Turkey, India has overtaken them. Let's hope everything is okay there!

Minimal Diary

This week, I spent about four and a half days exploring two performance optimization solutions for the Minimal Diary iOS app.

To achieve infinite loading of picture diaries in the list, I initially planned to write my own memory management and paging control. However, I felt that there should be a more mature and convenient solution. After consulting with my friend, I found out that to fundamentally solve the issue, it would require modifying the data model in Core Data. But given the current situation, I could only optimize based on the existing code base.

The first solution was to remove the intermediate view model and load the managed objects directly from Core Data in the list. However, due to too many and large pictures, the memory quickly ran out.

The second solution was to rewrite the conversion process from Core Data model to view model using async/await, which was the first time I used this Swift feature on such a large scale. It was a whole new challenge, but in the end, the result was good and I'm quite satisfied. Next week, I will continue to optimize and hopefully release the TF.

Both solutions involved the diary data model used in various pages, so basically, I had to go through the whole app twice and my fingers hurt from typing on the keyboard.

Two Solutions


The development process is full of compromises: compromising due to lack of skills, compromising due to system limitations, and compromising due to laziness.

Beyond Development

[Reading Time] I finished reading "The 4-Hour Work Week" this week, and the biggest takeaway for me was the Pareto principle, also known as the 80/20 rule. Although I have known about the 80/20 rule for a while, I haven't always applied it in practice. One night, feeling anxious, I analyzed my income composition from the perspective of the app and the market, and decided the proportion of my future work using the 80/20 rule.

I shared this 80/20 rule with a friend and we came up with a key phrase: "Never underestimate someone's methodology, and never overestimate someone's action." Simply put, anyone can talk the talk, but not everyone can walk the walk.


[Recommendation] On Monday, I bought a laptop stand that is very high, and it unexpectedly turned out to be very stable. I've been using the classic mStand, which is still too low, so I decided to raise the laptop screen to eye level to protect my cervical spine, and also cleaned up my desk. (One week later, my desk returned to its messy state🤪)

Laptop stand

[Unsellable Keyboard] Recently, I wanted to clear out my keyboard collection (and buy a new one), so I listed two keyboards on a secondhand marketplace, but surprisingly, no one was interested. I set a goal for myself to achieve financial freedom, and my first target was to create my dream keyboard. I hope to achieve this goal soon.

[Gift from Google] On Sunday morning, I received a gift from Google Developers, which was the second time. The last time, I received two pens and an umbrella, and at first, I thought it would be the same this time. Later, I saw in the delivery information that it was stickers, and I was already very happy, as I love development-related stickers. I didn't expect to receive more than just stickers, though. My wife loves using this pen and says it's very comfortable to write with. I told her that only developers with over a million downloads receive this gift, and there aren't many in the world. She actually believed me 😜.