I created my own private accounting application in Perl/mod_perl in 2007, as part of my personal website. The first revision was made using Perl/Mojolicious in 2019, with the aim of making it mobile-friendly using Bootstrap, and with modern back-end and front-end technologies such as jQuery.

The second revision was done in Python/Django in 2020, as I was looking to change my career from PHP/Laravel to Python, but lacked experience with large Python projects. I needed something in my portfolio and decided to work on the somewhat outdated Mojolicious project.

Despite having no prior experience with Django, I spent two months working late nights to create the Mia! Accounting Django application. It took me another 1.5 months to make it an independent module, which I later released as an open source project on PyPI.

The application worked nicely for my household bookkeeping for two years. However, new demands arose over time, especially with tracking payables and receivables. This was critical during the pandemic as more payments were made online with credit cards.

The biggest issue I encountered was with Django’s MTV architectural pattern. Django takes over the control flow. I had to override several parts of the class-based views for different but yet simple control flow logic. In the end, it became very difficult to track whether things went wrong because I overrode something or because it just wouldn’t work with the basic assumption of the class-based views. By the time I realized it, it was too late for me to drop Django’s MTV and rewrite everything from class-based views to function-based views.

Therefore, I decided to turn to microframeworks like Flask. After working with modularized Flask and FastAPI applications for two years, I returned to the project and wrote its third revision using Flask in 2023.