4 ms·
> I know a full rewrite is necessary, but how to balance it? A full rewrite of a functional 12-year old application? Yea, you're going to waste years and deliv
by that_guy_iain 4y ago
> I know a full rewrite is necessary, but how to balance it?
A full rewrite of a functional 12-year old application? Yea, you're going to waste years and deliver something that is functionaly worse than what you have. It took 12-years to build it would realistically take years to rebuild. Fixing this will take years and honestly some serious skill.
What you want to do is build something in front of your mudball application. For the most part your application will be working. It's just a mudball.
Step 0. Make management and HQ understand the state of the application. To do this I would make a presentation explaining and showing best practices from various project docs and then show what you have. Without this step, everything else is pointless.
If they don't understand how bad it is. You will fail. Failure is the only option.
If the team is not willing to change and you're not able to force change then you're going to fail.
So once you have the ability to implement changes.
Step 1. Add version control.
Step 2. Add a deployment process to stop coding developing in production.
Step 3. Standardise the development env.
If you have views and not intermingled php & html:
Step 4. Start a new frontend and create endpoints that reuse the original code to return json for all the variables.
If not:
Step 4. Add views. Copy all the html into another file and then make a note of the variables.
Step 5. Start a new frontend and create endpoints that reuse the original code to return json for all the variables.
... Carry on moving things over to the new frontend until everything is in the frontend.
Probably a year later.
Step 6. When adding new functionality you can either rewrite that section, do a decorator approach, or edit the original functionality.
That's without fixing the database mess or infra mess.
- yazaddaruvala 4y agoThe approach outlined above is the approach I would take (and have previously taken). Some details that I personally think are important: Step 0. Setup typescript with version control for your current JS mess. Step 1. FWIW, with ReactDOM.renderToString you can use JSX as your template engine. Step 2. Move all of your PHP views to JSX views, PHP keeps returning JSON. Step 3. Abuse component.unmount(); component = ReactDOM.createRoot(…); to get components with view state, but also can get updated by regular JS events that require a rerender just like you would with the legacy jQuery code. Step 4. Keep pushing more of the logic from the legacy jQuery code and PHP code into React/Typescript. You’ll find that the React components will keep getting grouped and you can start to compose more of the widgets together. Step 5. You end up with one big React app, minimal PHP (that is easy to test), and a decision about how to manage your state. At this point it’ll be in shape to not need a lot of attention. Truly, the DB mess will figure itself out as your PHP continually becomes minimal and well tested.