Software maintenance
A necessity or a rip-off?

Introduction
We all understand that an internal combustion engine needs maintenance. The oil needs to be changed regularly, likewise the spark plugs and the timing belt. A failure to do so will most likely result in a higher consumption, lower engine performance, and in the end complete engine failure. Maintenance is necessary, because the engine has internal moving parts that wear out during its lifetime. It just comes down to physics.
If we take that analogy to software, one could argue that software does not need maintenance. It does not have any moving internal parts. So why is software maintenance even a thing?
The moving parts of software
With software, the “moving parts” are not on the inside of the program but on the outside.
Device OS
The device OS where the software is running on gets feature and security updates. It is not certain that the software will run flawlessly on a newer OS. It can be the features in the OS that change, but it can also be that the software is actively refused by the OS. Android nowadays prevents really old software to be run. Software compiled with older SDK’s are actively refused. That minimum SDK boundary rises automatically, with every new OS release.
Programming language
The app’s programming language evolves. The language gets new features and functions, but also some functions get deprecated and are eventually removed.
Libraries used
The libraries that the app uses are in motion. Some libraries are updated to follow the programming languages best practises and deprecation guidelines. Some libraries get new functionalities, and others are abandoned or superseded by competing libraries.
Programming tools
The programming tools evolve. The programming tools, like Android Studio, will support a lower boundary and an upper boundary of the programming language. To load an old project, an old version of Android Studio needs to be used.
Developers OS
The operating system of the developers laptop, changes. There comes a point in time when the developer is not able to start an old version of the development tools, like Android Studio.
CPU architecture developers OS
Eventually the developer gets a new laptop with a new processor architecture. Like in the past years where Apple made the transition from x86/x64 to arm64. I must admit that the backwards compatibility provided is pretty good, but it is for a fact that old x86/x64 virtual machine images are not usable on arm64. That means, that old windows software has to be able to run on the arm version of Windows, otherwise you are out of luck.
Security
If software maintenance is neglected, so is the security of the solution. The amount of vulnerabilities in software increases with time because of newly discovered vulnerabilities. Using unmaintained software is like driving a car without ever checking the tires.
Technical debt
The above shows that with software maintenance, everything is connected. The software itself does not change, of course, but it’s surroundings do. When software is not maintained it’s technical debt increases with time. If software maintenance is neglected long enough it might even become irreparable. Then the software is total loss, just like a car engine that snapped it’s timing belt.
Be sure that your software is maintained and kept up to date.
Technology Release Timeline (2013 - 2024+)
| Technology | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024+ |
| ARM64 Transition | Apple A7 Chip (1st 64-bit consumer ARM CPU) | Windows 10 on ARM support | iOS drops 32-bit support | AWS Graviton (ARM in cloud) | Play Store 64-bit mandate, Surface Pro X (ARM) | Apple announces Mac transition, Apple M1 Chip released | Play Store 64-bit ONLY mandate, Apple M1 Pro/Max | Apple M2 Chip | Apple M2/M3 families, Snapdragon X Elite announced | First Snapdragon X Elite PCs (Planned) | ||
| macOS | Mavericks (10.9) | Yosemite (10.10) | El Capitan (10.11) | Sierra (10.12) | High Sierra (10.13) | Mojave (10.14) | Catalina (10.15) (Drops 32-bit app support) | Big Sur (11.0) (Native Apple Silicon support) | Monterey (12.0) | Ventura (13.0) | Sonoma (14.0) | Ongoing Releases |
| Windows | Windows 8.1 | Windows 10 | Windows 11 (Improved ARM support) | |||||||||
| iOS | iOS 7 (1st 64-bit support) | iOS 8 | iOS 9 | iOS 10 | iOS 11 | iOS 12 | iOS 13 | iOS 14 | iOS 15 | iOS 16 | iOS 17 | Ongoing Releases |
| Android | Android 5.0 Lollipop (1st ARM64 support) | Android 6 Marshmallow | Android 7 Nougat | Android 8 Oreo | Android 9 Pie | Android 10 | Android 11 | Android 12 | Android 13 | Android 14 | ||
| Android Studio | AS 1.0 | AS 1.1 - 1.5 | AS 2.0 - 2.2 | AS 2.3 - 3.0 | AS 3.1 - 3.3 | AS 3.4 - 3.6 | AS 4.0 - 4.1 | Arctic Fox, Bumblebee | Dolphin, Electric Eel | Flamingo, Giraffe, Hedgehog | Ongoing Releases | |
| Dart | Dart 1.0 | Dart 2.0 | Dart 2.10 (Null Safety Beta) | Dart 2.12 (Stable Null Safety) | Dart 2.16-2.18 | Dart 3.0 | Ongoing Releases | |||||
| Flutter | "Sky" Demo | Alpha | Flutter 1.0 | Flutter 1.2x | Flutter 2.0 (Stable Web) | Flutter 3.0 (Stable Desktop) | Flutter 3.7-3.16 (Impeller) | Ongoing Releases |

