|About 4 months ago, I joined a friend of mine as a tech co-founder for a company he had been working on (he's biz, and darn good at it).|
He had been contracting out the code for the MVP, and as things were working out, he figured it was time to fully delve into it and bring a full time cofounder on board. The contractor had no interest in doing so, and that's where I came in.
The code has been working well for all intents and purposes, and we have users (in the high 4 digits) who use the product everyday and love it, but it's showing limitations. Here's a quick overview (it's a Django webapp):
a) There are many inefficiencies in the code, and now that our userbase is starting to grow fast, it is causing major slowdowns. My current solution is to throw more dynos at it, which sort of works but is an ugly temporary workaround.
b) The code is more tightly coupled than not, which is making life tough when implementing new features. Many parts could be refactored.
c) There is no unit testing, which makes things harder than they should be when it comes to testing/hunting bugs.
d) Nothing is commented; and even though Python tends to be somewhat self-explanatory, it gets pretty dense when trying to understand what certain things do.
e) The architecture of it all is very monolithic; based on our plans for the future business development, quite a few parts should be decoupled and made more independent of each other.
A full rewrite seems out of the question, as we have many users and we need to keep on moving with bug fixing + shipping new features. For that same reason, it's hard for me to justify blocking 2 weeks to refactor a subpart of the application.
I'm the only engineer right now; we're funded and looking to hire more people, but it's going slowly.
Has anyone been in a similar situation before? Any recommended books/articles? If you're in SF and have relevant experience, I'll gladly buy you lunch in exchange for your thoughts.