Contributing to any open source project is fun. Maintaining an open source project on the other hand, I wouldn't even know where to start explaining. With that being said, I think it's fair, especially to me to voice out some things about my passion project Slim Launcher
I can't even recall the date I announced that I'll be working on version 3 of the app. I believe I've entered the 2nd year after the first v3 dubbed issue was created on github. But there's quite a couple of factors causing this. As much as those factors may sound like excuses, they're pretty valid to be honest. I'm not sure if I'll be able to fully put my point accross but I'll try my best.
When I first released the first version of Slim Launcher, I was the target market. A student in the middle of career defining exams, struggling to focus and in need of something to purge off distractions. Naturally, I blamed my phone for influencing my ill-discipline "I'm using too many apps!", "My phone is just too entertaining" etc. And at that time I was super in to the idea of minimalism and what it can do for a person. I watched documentaries about it, read books and even had a checklist that I was going through to help me be better at being a minimalist.
That also meant decluttering my phone. Of course I couldn't buy the LessPhone, a device's whos selling point is "being created as part of the backlash against smartphone addiction". I was a broke student who didn't have the dollars to splurge on international purchases. Being a tinkerer, I decided rather, to turn my smartphone into a brick, thus the app was born. Fast forward to now, 3 years later, I have even lost count of the number of apps and games in my phone and I'm using the stock launcher of my phone.
Through out the updates, I went from strictly limiting apps to 5 or less. On the next major version, this limit was bumped up to 7, with some slide animation to show around 4 or all when swiping up. One of the biggest requests I got was to include contexts or profiles, a small batch of apps available depending on either location or time i.e. During weekdays have work related apps and maybe weekends have a game or two instead of slack and teams looking at you all the time. To add... Not all users of Slim Launcher are minimalists.
With this, it has become extremely hard to open up my IDE with the same drive and intent as I did all those years ago. It's gotten hard to relate. It's also very tricky adapting a widely used app like this one. It's a struggle between balancing user feedback or straight up "Steve Jobs"ing it.
See that asterisk? Yes, I'm trying to say well most of the time it doesn't. I have people that I look up to who've dropped their 9-5 and now live off their open source projects. But that is very very rare. I can never recommend this article by Kitze enough, as it sums up how I've grown to feel about my open source projects in general.
As much as I see programming like this hobby sent from heaven. I still have to earn a living at the end of the day. This meant me looking for a job years even before I finished my CS degree. I have to work, put food on my table and also support my family. If, and that's a big if, I get time to play around and relax, I'll look at my hobbies. That's what Slim Launcher is. Most of my time will most likely be spent on things that will generate me cash. The most secure form of that for me, and pretty much many people out there, is a secure job.
I also would love to make money on the side. This now means that I'm most likely going to spend my spare time working on project that have potential of generating me revenue than on the one that's forever free and open source. It was super exciting when people using the app were asking for a donation link to buy me coffee, and super encouraging knowing that the little piece of software is making some random stranger's life a little bit easier. But a cup of coffee can only go as far.
What I aimed to achieve with Slim Launcher, I believe I have achieved. The amount of value that I got off of it is immeasurable. I'm forever grateful for people who've supported the project in all forms possible.
Here's an analogy, that might not make full sense, but bare with me. Babies are really cute! More so when they're not yours. The responsibilities of taking care of a baby outweighs all the cuteness and awe by a thousand fold. It's really fun holding a baby, playing with them and taking care of them... for like a few minutes to like a day. Bad comparison, but you get the point.
I can't recall the amount of times that I've suffered from burnout and it was partially due to this project. Don't get me wrong. I love it unconditionally* but some conditions were pretty heavy on my mental health too. In some instances it even felt like a job. Triaging issues, responding to google play reviews, answering emails, pushing out releases consistently, reviewing pull requests, the works. I was doing numbers I tell you. This was fairly easy when my job didn't entail much programing but as things progressed, I kind of felt like I was working 2 jobs and being paid for one.
You can never make the internet happy. The balance between taking and implementing user feedback and straight up pulling a Steve Jobs was difficult. i remember adding a tasks and notes feature to the app. It was met with a split audience. Some were happy about the addition but early adopters were very vocal of how the app is slowly morphing into something its origins go against. I removed those features and I had to deal with apologizing to people because their most recent update purged their notes and tasks with no backup.
And then it's the management of contributions. I can't even count how many issues I have open. Even to this point, there's no distinct guide in how to contribute to the project. That has led to some issues with pull requests coming in. I won't lie, the freedom and the fun of pushing out releases without writing a single line of code is awesome. I've experienced most of the joys of being an open source maintainer. But I've also been stuck with sleepless nights trying to figure out which of the dozens of PRs I've merged in introduced a bug in the master branch.
I still have work to do though. I think once I have a solid contribution guide, I'll get higher quality contributions, and hopefully more in volume. This is no longer my app. It's for the people :)
Well, with all that I've mentioned above, I think it boils down to this. There are so many learnings I've picked up along the way. There's plenty of mistakes I made along the way too. But I learn from them. I'm a way better developer now than I was when this app was born. All thanks to it by the way.
Another motivator that made me open source this project is that I had never contributed to open source myself. I needed an easy, non intimidating way to start. Someone from dev.to nudged me to rather create a project myself and open it up to the public. In doing so, Slim Launcher became the reason I started writing blog articles as I wrote about it. The article I wrote got me the first contribution from the outside which in turn introduced me to #Hacktoberfest where I've gone to also contribute to dozens of repositories myself. I now have all the confidence I need to fork any repo I care about and in best cases, submit a pull request.
The biggest one for me is unit tests. I need to trust pull requests from strangers, I don't even trust my own code sometimes. To help with this, unit test provide some confidence to pieces of code that sometime grow out to be super complex out of nowhere. I also want to spend less time manually testing the app all the time when I either change something or when someone adds a change. Once unit tests are primary to making any addition to the project, automating them will shed so much time out of the process, then I'll have time to focus on other things.
When it comes to the contribution guide. I don't think I need to make this complicated. People should just freestyle all they like here for now. Just as long as their code is tested, I'm happy. There is so much work needed though around cleaning up the code base, i.e. modularizing parts of it. I hope to separate the UI from the logic into separate gradle modules. Not only will this make it easy for me to work on this project but will hopefully make the process of updating from upstream more pleasant from forks of this app. Speaking of, I'm really proud of what Unlauncher has become. It does all that I had hoped to achieve and pushes it even further. I am happy I provided foundation for it.
The more processes I automate, the more releases I'll be able to make. With more releases going out, then more issues will be resolved, PRs will hit production sooner and people contributing will be satisfied with their additions as they see them go live. I once used gradle-play-publisher but the work required to keep up with the issues faced when google updates their apis and break this 3rd party package were getting a little annoying and scary so I opted out and continued with manual releases. I will most likely reuse it or try find a better alternative i.e. fastlane
I'm excited about what's coming! With all this restructuring coming. I've been really pleased by how far Jetpack Compose has been going and what it can do for me and this app. Working with constraint layout is a pain in the ass. Working with animations, xml, multiple screen sizes and constraint layout is a pain in the ass that has a pain in the ass in the ass. My hope is that compose makes it easier going forward as they've promised.
I'm mostly worried about backwards compatibility, it's long term support and it's stability. I'm still learning how it works, some things I'll learn as I go but what also worried me is, once I switch to compose, I'll have to use the beta version of android studio, meaning everyone else who will try to add something will have to do the same for project compatibility issues. Plus, Google's meaning of "beta" is "expect the whole thing to blow up in your face" so that also had held me back in taking a leap of faith.
I've pretty much decided to go ahead with compose for version 3 of Slim Launcher. I will not do a big major v3 release whilst maintaining v2 like I thought I would. I'm most likely going to add things incrementally. One of the most important ones is having to introduce compose whilst keeping the app working and looking exactly the same as before. Not just a small compose component hiding in the dark but have it be a wrapper for the whole application and inevitably compose to host xml view fragments in preparations for their rewrite. This will not be much of a challenge, as I learn from compose documentation but I will take extra precaution/time in factoring it in.
I'm super excited about the future and I'm really happy with how far this project has gone, and all the weird opportunities it has opened for me. The least I can do is to invest back into it with my time and learnings to make it a better version of itself.