Starting with a rewrite - CustomerInfo

A couple of years ago I quit my job to pursue my own business full-time. At the time I had an online side-business that I felt wasn't growing because I was spending too much time at my day job. In hindsight the project would never have worked out, especially when large multi-million competitors moved into the space. However, when I resigned my boss invited me to have dinner with him and his business partner.

It turned out that they had ideas for services their customers might pay for. These ideas were only partially related to their core-business and thus they didn't feel the company could execute on them. Partnering with them presented a win-win for both of us. I would get direction on what to develop and who to talk to and they could offer more services to their customers at little to no risk. The idea that we settled on became CustomerInfo. A tablet-based sign-up web form where retail customers can sign up and are automatically added to the retailers CRM during in-store checkout (The specific CRM being the core-product of my former employer).

CustomerInfo was my first project where I started from scratch and carried it to production. It was my first professional python project. It was my first interaction with django and many other libraries. To say that mistakes were made is an understatement. The code is needlessly complex and I only later introduced testing. The first few months of development I was searching for the right feature-set that could be shown to customers and thus many features were introduced that didn't connect.

At a point we hit upon features that could be sold and slowly I started onboarding several customers. However before I could reach any level of sustainability I had to find a new job. 10 months had passed and my savings had dried up. I thought I'd shoot for a python job this time, since I enjoyed developing with it more than I did PHP. Luckily enough I was hired quickly and have been working with Python daily since. I left CustomerInfo turned on for 5 years only spending time on it occasionally. The five customers that use it daily seem to be happy with it in the current state.

Since then I've had a few jobs and my python engineering skills have dramatically increased. I owe a lot of the initial growth to hacking away at CustomerInfo and so earlier this year I made the decision to rewrite it from scratch.

Why a rewrite and not a refactor? CustomerInfo is still running on Python 2.7 (in 2019!) and is deployable with fabric which uses git to log into the production server and do a git pull of the master branch. It has no CI/CD set-up, it doesn't have decent test coverage or any linting. But maybe the most important reason for me; I know I can do better than this if I don't have to figure out an upgrade path...

New CustomerInfo has a few requirements that I thought would make sustaining it a lot easier (and cheaper) in the future. For starters I want it to have CI/CD, achieved through GitLab's Auto-Devops, and have billing also completely automated (yes, I've been doing the billing manually every month for years...),. Beyond this I want to run the whole thing on Kubernetes, with Dockerfiles for local development, and of course proper linting and 90+% code coverage.

So for now I'm starting a new project and taking inspiration from the old CustomerInfo to get to a 2.0. I hope I'll learn as much from the v2 as I did from the v1.