I think, this article misses the point.
Someone found out, that the usable CPU (and GPU) speed stayed (almost) the same.
The conclusion is not, that "devices did not become slower". This is ludicrous, because the hardware is still the same. How should it become slower? The conclusion is: the slowness we users experience - which is real - , does not come from the CPUs suddenly running at lower clock rates, but is caused by something else.
So where is the performance lost?
I am a software developer for 10+ years. I started writing software for iOS in early 2010. Let me tell you what changed for me.
I don't remember optimizing for the original iPhone. But I remember optimizing our software for iPhone 3G a lot, when there was iPhone 3GS already and even when there was iPhone 4 around.
What did we need to optimize? A ton of things. ObjC is a slow language, so we went for C wherever necessary (which is easy, because C is (except minor things) a subset of ObjC). So for example clustering pins on a map was taking 30 seconds in ObjC on an iPhone 3G and about 1-2 seconds on the same device, when it was implemented in C. But honestly the bigger challenge was not optimizing the data part of the application, but optimizing the UI. For the table view for example - a very common UI element - we were pre-rendering cell images and putting them in some cache. We were using low quality jpegs, which don't have an alpha layer and thus don't need alpha blending and they have a small file size (with lossy compression) and can be decoded fast enough (faster than pngs) with the old CPUs. We spent a lot of time doing these optimizations.
As the iPhone 4 came, we had the same problem. Yes, the device was faster, but actually the faster CPU did not help us so much. The new problem was, that the images had to be 4x the size now (both dimensions grew by a factor of 2x). So still we had to optimize a lot to get these higher quality images moving on the screen at good speed. The table view (again as example) behaves a little odd here, because it does not simply animate/move a rendered image on screen (which would be fast), but at each step it does need to update the scroll offset, calculate the cell layout and do the drawing [1], which costs a lot of time.
So there we were, still optimizing. I would say, the first phone with "plenty" of power was the iPhone 4s. But if you tried using it today with the latest iOS it supports, it is again super slow. So why is that?
I think, that the developers at Apple (and also the 3rd party developers like me) don't optimize their software at all anymore. The devices are so fast now, that you can get away with almost any crapy code. This means, there is a lot of CPU and GPU power wasted, because of inefficient code. This makes every app slower and oftentimes use more RAM than necessary. Once you update the OS, all the apps from Apple are a litte slower, because they have more features and are less optimized - at least for the new code. With the incoming updates from 3rd party apps it gets worse (but the latter is a more continuous process).
Here are the details:
- The apps use more RAM (more features, less care about wasting ram, more advanced features, that require more RAM, no optimizations that could alleviate the problem): this makes it slow for everyone, because apps stay open less (get terminated earlier as memory is needed), which makes switching between apps slower, especially on older devices, that have less ram. And with a new iOS release, usually all apps are updated. Also these apps have more features which might require more RAM.
- The system libraries grow with the OS updates: As the apps launch, the DYLD loads the libraries, which takes longer with larger libraries (including system libraries and the libraries the apps ship with), which increases all apps launch times. Also the libraries (except from stable base ones) might themselves become slower and use more RAM due to the more features they offer. And nowadays apps make use of have 20 libraries via CocoaPods, because it is always easier to use the code, than writing your own. Do we strip them, to remove the code, we don't use? I know, we strip the binray before releasing, but honestly, I don't know, if we strip the libraries, that we bundle with the apps.
- Developers and Apple make use of more features, thus using more CPU/RAM. E.g. why does it need time for the words (words, not single characters) in the Notes app to appear on screen, when I have already typed them on my iPhone 6? Is it Because the text is now synced with the cloud for every few characters I type? I don't know for sure, but Notes app on my iPod 1st gen (iOS 4) runs much faster than Notes app on iOS 11 on my iPhone 6. Yes, it has more features, that is exactly my point. I am pretty sure, that Apple's really good developers could make the current Notes app really fast on "older" devices like my iPhone 6 also, if some high ranking manger complained about the speed. As a comparison: MS Word on my 16MHz computer in the end of 80ies was fast. But Notes (which has less text formatting features than the MS Word back then) on a dual-core 1.3GHz iPhone is laggy? I think, Apple's developers are more busy adding new cool features, than they have time for making them run fast. They probably have the latest phones and don't invest so much time on older phones. I could tell you some stories about performance at Apple from Ex-Apple employees, but remain silent. Short: they don't optimize everything a lot. And the truth is, a lot of 3rd party developers also don't, because they say: "it is fast on my phone" - which was usually bought within the last two years.
- The OS very slightly gets slower, but only a little bit. [2]
- We have switches to Swift: it was common for apps to increase form 5 MB to 30 MB executable size while remaining the same functionality. This means, that it takes more time to load the apps into RAM and that they take up more RAM, while running. This causes the same issues mentioned above (less apps in RAM at the same time results in more time to switch between them, as they need to be re-launched a lot - which again costs more CPU and drains your battery faster).
There are some things, that I might be wrong about. Also this is not a complete list. I am not perfect. But this is, what my impression is on the topic and I hope, I could give you some helpful information as a developer.
[1]
https://download.developer.apple.co...formance_optimization_on_iphone_os_part_1.pdf
[2]
https://www.phoronix.com/scan.php?page=article&item=macos-1013-linux&num=1