Let me set the scene.
The Scene
We're a web development company, and so we work within a highly distributed environment. DB Servers, Services, Web Services, Front-end, Back-end, etc etc. I'm not sure if that's relevant, but there it is.
Essentially though, at it's most basic, we develop custom web solutions, and maintain one large CMS application, which we use to leverage 80% of our projects.
The Problem
The CMS application works, kinda, but it has to be customized and changed almost all the time for each project. Every time I go in it, or fix the same problem over and over again, I want to cry.
It just could be so much better, and in it's current form, it's very inflexible, and rigid. For example:
- There's repeated code all over the place
- Global business logic is spread out all over different layers, multiple times, making it a dog to change, anytime anything has to be modified
- there's loads of god classes, and the structure doesn't make any sense
- etc etc.
Not only is this ugly, and annoying, but it makes it prone to bugs, and hard to extend. For example, it would be great if the CMS worked at an API level, but because there's business code all over the UI, it cannot.
The Question
I would love to discuss with my peers solutions for these problems, and fix/rewrite a lot of the issues in the application in a collaborative effort, because I believe it would have a lot of long-term benefits.
For example, it would make each individual project take less time, because there would less bugs to fix. It would make customizing easier, and it would make extending and building a better application simpler.
However, I realize this would be a relatively massive undertaking, and thus would cost a lot of money.
The alternative, which my seniors dictate, is to keep hacking the application each time with quick, non reusable "fixes", which I hate, but it does make it "work", doesn't take THAT long, and so perhaps makes more economic sense?
Who's right? Am I just an idealist fool?
The question is, should I approach my seniors and make a case for it, or not?
UPDATE:
Hey guys, I know my question gets a bit specific towards the end, but I'm really enjoying all your general feedback, and the experiences you've had, and how you dealt with it.
Thanks again, keep 'em coming!