LTS (Laravel) is a joke

brown tree
Photo by Neil Thomas / Unsplash

Today while looking at some old hobby projects, I realized I built two of them on Laravel 5.1 which happened to be the first LTS for Laravel.

Laravel 5.1 is the first release of Laravel to receive long term support. Laravel 5.1 will receive bug fixes for 2 years and security fixes for 3 years. This support window is the largest ever provided for Laravel and provides stability and peace of mind for larger, enterprise clients and customers.
Laravel 5.1 Release Notes

At face value this sounds like a good deal. You get a product that will continue to be supported into the far future. In Internet time, supporting a product for 5 years is not an easy task so consumers probably very much appreciate it. Normal Laravel releases seem to come every 6 months, so keeping up to date with those is sometimes difficult.

This is why I was drawn to LTS, but now years later I feel completely different about the entire ecosystem of LTS releases.

Delaying Technical Debt

Starting with a hobby project, picking Laravel 5.1 allowed me to pretty much ignore every Laravel release until the next LTS, which was Laravel 5.5.

  • Laravel 5.1 LTS - June 9, 2015
  • Laravel 5.5 LTS - August 30, 2017

However, when August of 2017 rolled around my hobby project wasn't in active development, just the occasional small commit to fix an issue. The technical debt required to jump to the next LTS was too large to take. For the PHP framework world, you can't just jump from 5.1 -> 5.5.

Upgrade notes only existed for 5.1 -> 5.2, 5.2 -> 5.3, 5.3 -> 5.4 and 5.4 -> 5.5. This meant that I needed to do each individual (non-LTS) upgrade in order to get to the next LTS release. With my current LTS no longer supported and fighting incompatibilities with the newer PHP language, I needed to upgrade.

The upgrade from 5.1 -> 5.5 was not an easy task. Something as simple as updating my dependencies would be met with stress and anger. Imagine a popular dependency that has support for LTS versions (5.1 & 5.5 and the latest Laravel release - 5.7). While upgrading to Laravel 5.2, I cannot find a suitable package version for a certain package. This means I have to mess around with specific tags and commits in order to run an old version of software solely to complete my 5.2 upgrade.

When this hobby project was in its prime time of many hours of development a week, I should have taken the 5.2 upgrade. Package versions would have been aligned and 1 upgrade would be easier than 4.

I have this problem with more projects both at work and at home. You think you are saving time and energy, but you are only delaying the problem and by doing so just making it that much harder to complete when the time arrives.

The next time I've given a choice between LTS and non, I'm sticking with a regular release cycle. If a product isn't dead, there isn't any reason to restrict myself to the technical debt that an LTS carries.