Technical Reports from the Front Lines of Software & Systems.

Keeping your environments up-to-date and integrated is like building a ship while out at sea. The best place to work on a ship is in a large harbor with all the necessary tools and materials nearby.

So why have so many neglected their version dependencies?

From 2007 to 2013, jQuery published the latest version of their script to a file called jquery-latest.min.js in a CDN. It’s still available today but returns v1.11.1 instead of the latest version. At the time, this was extremely useful for downloading the latest available version to bootstrap new projects. However, several projects used this CDN address in their production environments. When features were added or removed, those changes were automatically downloaded to the client. As the team prepared for releasing jQuery 2x, they told everyone “Don’t Use jquery-latest.js“. They realized they could potentially “break the web”, and decided that it was too dangerous to continue down that path.

Components deliver value but each new version has the potential to introduce a defect in the system. That’s why we have M-INT and L-INT environments. The differences between L-INT and M-INT are very straightforward, but doing it wrong can cause production systems to fail.

The main difference between the two is that L-INT uses the latest available version of a component while M-INT uses a specific version of a component. L-INT can be useful in lower environments but M-INT is needs to be used in production and staging environments so we verify the changed behaviors and contracts before customers are impacted..

Latest-Integration (L-INT)

This integration methodology uses the Latest available version of a software component. This does not mean it is the Last integration stage. This is useful in lower environments but you should think carefully before deploying this strategy in production.

Most software integrations should be managed so you can choose when to introduce breaking changes to your system. This allows you to control the pace of change and avoid disruptions.

Managed-Integration (M-INT)

This type of integration references specific versions of software components, rather than always taking the latest version available. Including the specific software version in code allows us to pin the versions so that the versions do not automatically change. This allows us to control when contracts change, roll forward and backwards, and thoroughly test the system.

If you deploy software to a production environment, you want your components to stay the same so you can decide when to integrate with the latest version. Always pin your versions in production environments!

Leave a comment