I wrote a app for learning Japanese kanji when I was in college learning Flutter, I didn’t have any experience working on real world projects and barely have any knowledge of design pattern, architecture, clean code etc… I was young and naive, but had passion, so I started collecting data using scrappers I wrote in Python, organized them into a SQLite database, put a lot of example sentences and vocabulary on Firebase, then made an app using Flutter. I gradually added more features into the app after I released the first version, things like handwritten kanji recognition using Tensorflow lite and image text extraction using Google OCR api… I learned a lot, and by a lot, I mean a lot lot of stuff from making this app. The app is functioning just fine but the code is ugly as hell…for example attributes in data model classes are not final, doesn’t support dependency injection, etc….
After I started working, I learned a lot about how to write clean code and I always wanted to refactor/rewrite the whole app which gonna take a lot of effort and time of course. But every time I sat down, opened the old codebase, I hesitated, thought about it and told myself that it wasn’t worth it then continued my life.
do you have any personal project you always wanted to refactor/rewrite but still haven’t done or probably never will do so?
if you are interested, you can come see and compare the code of the kanji app and a new app I wrote recently:
https://github.com/Livinglist/Manji
https://github.com/Livinglist/Hacki
The "second system effect" suggests that the rewrite will take a great deal of effort and for very little gain.
If I were in your position, I would direct my energies to new projects. There is far greater potential for expanding your experience and knowledge than by reworking something that you will shudder to look into too deeply.
As for my experience. I have shelved my early systems. For systems I wrote in the past 10 years, I have been refactoring every time I add a new feature or fix some edge case. By maintaining clean separation of concerns it has even been possible to swap out one module implementation with another.