I just joined a new company which is a new start up, STILL applying for funds etc. The product is very promising and likely to be a success once fully released to the public (we're currently in a closed beta). It has a very nice user interface and an easy experience, so design wise it's top notch.
However, the application itself is written quite poorly. I'm a Senior Web Developer in this company and I was a little shocked with the lack of structure of the code. The manager (Main Senior? Can't think of an appropriate name) is very logical and always has the right solutions in mind and can also code them out nicely, but they are not very efficient performance wise and don't follow any particular concept (eg. DRY).
We use a kind of a MVC model, but it's not very efficient and does not save us from the headaches it should fix. Code repetition is a major problem and so is the amount of jQuery, Ajax calls, unnecessary timeouts etc. The database abstraction layer seems very inefficient too and it doesn't include any sort of ORM. So to sum this up, the code is a mess, but the product works (can't judge the security yet).
I would be able to take the whole project and code it from scratch with some rules in mind. I would make it easy to extend while preserving the same functionality, though it would take a while since a lot was done.
I would incorporate things that would make development for the future team very seamless, such as:
- Use of version control (Git). We do this, but not as much as we should.
- Use an already existent MVC framework that is updated and maintained by a community on regular basis (eg. Rails, Laravel, Django etc.).
- Enforce DRY.
- Do test driven development (optional, but useful).
- Use a Javascript framework and avoid the use of jQuery to manipulate the DOM (eg. ReactJS, AngularJS etc.).
Anyway, I don't know how to approach the manager about this. It would take additional resources to get this started and done. Also time. But I know that as soon as we go online and get huge amounts of visits, we'll end up exploding and patching things in that mess, until we end up rewriting the whole thing or the product failing altogether.
What should I do?