From mnml Launcher to YASAN Launcher
--
This is the first-ever developer update I am doing so any feedback on how I can improve these can be helpful.
I want to start with how the launcher was created originally:
Version 1 — The Prototype:
I always had the idea in the back of my mind and wondered why no one has made a launcher that learns the user’s usage patterns & shows the apps the user is most likely open next on the home screen automatically.
I expected a launcher with this feature to be published by someone else for years. After I saw it is not happening I wondered if I had underestimated how hard it would be to create such a launcher.
I had a simple algorithm in my mind which could be used to predict how much each app is likely to be opened next based on the user’s previous app launches. Using this algorithm I could show the top apps on the home screen automatically.
Since the algorithm I had in my mind sounded too easy, I wondered if it really worked or not. I thought if it is this easy, why no one has created such a launcher all this time?!
I spent 3–4 hours on a weekend creating a prototype just to know if my idea works or not. It worked!!! And it even worked better than I had imagined.
So I just published it on Google Play Store as “mnml Launcher” and forgot about it.
Nothing much really happened after that for a few months. Then suddenly I noticed the launcher was featured on a few Android news podcasts, websites & YouTube videos.
Version 2 — The First Try:
Seeing the launcher getting some attention made me think about making the full launcher with more features. So I started making the first full version of the launcher.
I created everything from scratch except the AI code. It looks much nicer, had more customization options & some features were locked behind an in-app purchase for the Premium version.
The launcher was renamed to YASAN Launcher after a few months & I designed a new icon for it as well. It’s a minimalistic house, sun & a cloud.
This version worked fine for the most part but had severe performance issues. The problem was that even though I had experience making apps before, none of them were launchers. Making a launcher was almost like a whole different thing especially due to how much performance and customization support were important in it.
Version 3 — Almost:
I decided to try recreating the launcher with the problems it had on the current version in my mind.
Almost all the issues I had on the previous version were solved on this version and the rest were partially solved. The launcher no longer had any performance issues, had more customization options & just was way more polished.
Thanks to the improvements, the number of users was increased tremendously on this version & this version is still the live version on the Google Play Store since none of the next versions reached this level of polish before getting scrapped.
The AI was refined on this version & gained new input variables. For example. The device’s audio output mode could now affect the suggestions. Also now the AI could understand when its predictions were “bad” and it would learn from it.
This version also added a new “Smart Search / Typo Fix” feature for searching apps. If enabled, the algorithm would analyze the input text and try to predict what the user meant to write to show some search results even if there were no matches for the exact searched text.
The main problem in this version was the lack of customization support in its core & the navigation style in the launcher.
I almost did what I wanted with the launcher this time but the perfectionist in me was never fully satisfied with it. I wanted to make a fully-featured launcher that could compete with the top launchers on the market.
To fix these issues I had to fully redo the UI & how everything is rendered to make everything customizable. Basically, I had to change almost all the code to achieve this.
Since it sounded harder to do than a rewrite, I decided just to rewrite the app. The hard parts of the code could easily be transferred to the new app anyways.
Version 4 — The Lost Version:
This version was just an idea & was not even coded. I scrapped it after I got the idea for version 5. It has no source code & I cannot fully recall what I wanted to do with this version! As far as I can remember, its goal was to be something like what version 7 currently is.
Version 5 — Next Level AI:
This version was focused on a much smarter AI system I had in my mind.
I worked on it for a few weeks but I ended up scrapping it because even though it was much smarter, it was also much heavier & would even get heavier with time, unlike the old system. Since every time the Home screen was opened the AI predictions had to refresh, the AI predictions taking longer to be created was a major issue.
The other main reason I scrapped this version was that literally no one ever complained about how the AI worked, it always worked fine, even on the initial prototype. The users never asked for a better AI system, they always asked for more customization options. It felt like I was wasting my time on a major new feature that no one was even interested in instead of working on features that users asked for frequently.
Version 6 — Modularization, Core Version & Open-source
This version was meant to modularize the project. The idea was to split the project into 4 modules:
- AI module: Only contained the AI code.
- Launcher module: Only contained the code for launcher-related features. These features include getting the list of apps, updating apps, launching apps, etc.
- AI-Launcher Mediator module: This module would connect AI & Launcher modules to make them work with each other.
- App module: This module mostly only contains the user interface & features related to that. It uses the Mediator module to use AI & Launcher modules’ features.
With this model, I could update the code in each module separately. Also, I could open-source any module I wanted separately without open-sourcing the parts I didn’t want.
Also, I could make different versions of the launcher with different user interfaces & features without having to work on the AI & Launcher part. The plan was to publish two separate Core & Main versions of the launcher in this phase. They both used the same AI, Launcher & Mediator modules but had different App modules. The Core version would only contain basic features and be fully free but the main version would have lots of extra features including Premium ones.
Even though this modularized system still sounds really good to me, it introduced tons of new complexities to the project which I was not expecting.
I scrapped this version after I realized it just had made the project more complex with barely any real benefits.
Version 7 / X — The Final Version
This version is the one I am currently working on & I am trying to replace the current live version with this as soon as possible. I have recycled as much code as possible from versions 6 & 3 to make the process faster.
With this version, I am not after crazy ideas like versions 5 and 6. I just want to do what I did with version 3 did but with a better foundation & everything else. I am focused on what actually matters this time, unlike the last two versions which I got too crazy with my ideas.
I had created the prototype about 2+ years ago & as a programmer, I have much more experience now which has already helped me a ton to make the foundation of the launcher much better in every aspect.
This version is focused on performance & customization options. Fortunately, I have had no problems easily achieving both this time & am really pleased with the progress I have already made.
I am cherry-picking my favorite parts from all the previous versions for this version. This version also supports multiple AI systems and the user can choose which one they want to use. I am also really inspired by Aviate launcher for this version.
This version is not named by a number internally unlike previous versions. This version is simply code-named as X.
It is still really early in the development of this version but I know I am on the right path this time. Reaching what I want to do with the launcher might take some time but I have no doubt I am going to reach it. I cannot wait to share this version with the users.
I am going to post regular developer updates here whenever I reach a milestone.
You can follow me on Twitter, join the Telegram channel or Discord server to get notified when there is a new blog post available.
You can get YASAN Launcher from Google Play Store.