A lot of people engineer their computing environment to break with newer branches/versions of an OS, so they need to remain on the previous OS version for a bit until it's safe for them to upgrade. It's VERY important to have an upgrade path, and be able to test how apps will work in the new environment.
For example, compare which PHP packages are on Ubuntu 20.04 vs 22.04 vs 23.10. As a dev, you will have to be sure your PHP app can work with whichever PHP package is provided. Rebuilding your entire app from scratch every time an OS upgrade comes out is not sustainable, so devs will remain on an older version until they have enough time/resources to rewrite it for the newer OS. They might stay on 20.04 until the OS no longer receives updates and becomes End of Life. They might start looking at 24.04 and seeing which PHP version will be available on it, and rewrite accordingly.
This is just one example for one set of packages. Multiply this by tens of thousands of packages, and you can see how delicate and complex an OS upgrade can be. Not just for the maintainers, but complex for end users as well.