Software Features to Avoid in a Production Environment
When developing an application, it’s best practice not to use certain software features in a production environment. You have to consider the production setup to avoid bugs or crashes on the production servers.
As software evolves, some features that were once useful may become outdated. Such features are not immediately removed but instead marked as “deprecated.”
“Deprecated” does not mean a feature is not supported anymore or is unusable; it just means that the feature is not recommended to be used anymore, and it is usually designated for removal in a later version.
A feature or API could be deprecated for several reasons:
- It's been renamed for simplicity or convention
- It's been replaced with a better one
- It's been merged with another feature or API
- It has some bug or other issue
- It's become extraneous or outdated due to design changes
Alpha, Beta, and RC Features
During the development phase, a programming language typically goes through several prerelease versions marked Alpha, Beta, and RC versions. An alpha version has some features completed but is not feature-complete yet. A beta version is feature-complete but may have some bugs. An RC version stands for release candidate, which means it’s feature-complete and all bugs found during testing have been fixed.
More testing is performed on an RC version to find and fix any design issues that may have been omitted in prior versions, and then the RC version is potentially stable and ready to be made generally available (GA) as a release.
To be usable in production, a release should be a stable or GA version.
Experimental features are currently in development and may not be fully implemented but are available for testing. After feedback from end-users, experimental features are made suitable for production use, and the “experimental” tag is removed in a later version.
For example, Google Chrome has several experimental APIs available for user feedback.
Similarly, new software, tools, languages, or services could be made available as a preview to a select group.
Preview features are complete in design, specification, and implementation but differ from standard features:
- They are not permanent
- They could be made available in a different form in a future version
- They could be removed in a future version
User testing in real-world situations helps determine if preview features have any bugs or technical errors, design issues, or unsuitable architectural choices. Based on that feedback, a preview feature may be refined in later versions before being made permanent, or it could be removed.
Most software has versions or distributions for which it provides long-term support (LTS) and other intermediate versions for which it doesn’t. The non-LTS versions are not recommended for production environments because it would be risky to lose support and have to move to another version.
Java is a good example. With its six-month release cycle, most new versions are non-LTS. Although Java 14 came out in March, 2018’s Java 11 is the latest LTS version that is guaranteed to have support in production for years to come.