Joomla router

Some weeks ago we published the information that we are looking into the router code. Since then we have checked with a team of developers the code for the new router. The initial reason was an issue about it not responding to invalid URLs with the 404. Here we would like to share the reasons why we have came to the conclusion to remove the new router from the 3.7 release.

Before we go into the details we would like to share that we have also thought about the path forward. We know that many people were looking forward to a better router for Joomla. Our plan is to work over the next 2-3 months intensively on the router and we plan a 3.8 release with a new router included. This will be supported by a Google Summer of Code Project and we will setup a team of developers and SEO experts to help to make it the best router the Joomla! Project has ever seen.

We are not blaming specific people, we all have made mistakes and the biggest mistake was that the PLT didn't spend enough time looking into the router development and has set requirements without having enough knowledge about the internals.

This brings us to the main reason why this has failed. Because of a requirement that the router has to be enabled per component, the development focused on the component routing. The new router comes into play after a lot of old router code has been executed. So the new router must do the work based on some old magic. This is a limiting factor and the main reason this didn’t go very well. The right approach would have been to start at the beginning of the routing process and let the new router takes the lead of the process instead of being more or less a very late guest at the party.

Anything else is more or less a result of the wrong decision we made at very beginning. To let the site administrator decide which component the new routing should be enabled for is often beyond their expertise, so we didn’t have our target group in mind. To fix some of the problems we included more "hard to understand" parameters, that didn't make the situation any easier.

The code itself also had some issues, some parts are pretty much unreadable and even with debugging not easy to understand. In life some things mimic each other. The testing of the code and a good joke are similar in that if you have to explain them then they have failed in their purpose. The code quality makes maintenance in the future difficult. The new router code and procedures also need to be well documented to provide all the information our users and developers are legitimately expecting. If it had been a Pull Request it would never been merged in the state it is in.

Coming back to the user base. Our users are building websites and in a world with Google you need to be visible in Google. People created a lot of URLs want to be high on the search results. With the new router we didn't provide a path for them to keep their URLs and move to the new routing. To really understand the effect, it was planned to have the new router as default for Joomla! 4.0, without an option to switch back. So you can chose the routing, if you are on Joomla! 3.x, but when you update to Joomla! 4 you are facing a real problem. This might be manageable for a small site but often small site owners are not fully understanding the effects and for big sites it is a lot of work managing the change. So we came to the conclusion that we have to support our users better and that we can't achieve this with the current code.

The Production Department Leadership Team, the teams involved in maintaining the code (release team and maintainers team) and myself as the release leader for 3.7 were reluctant to remove the router from 3.7 at this late stage but we are now sure it is the right decision. Although it will inevitably delay the release of 3.7, the decision is made that much easier knowing we now have a solid plan to move forward with the router in 3.8.

Finally a big "Thank you" to all contributors for all the hard work that they put into this. This was NOT wasted time, we learnt a lot from the process and it would all contribute to making it better in the future. The new routing team will pick up on the ideas and learn from the experience. Everyone is invited to join the team (especially those involved in the router so far).

Robert Deutz, 3.7 Release Leader.

PS: Because of the time we have spent on the router we will delay the 3.7 release, details will be published soon.