Complain about the software is a popular pastime, but a lot of software has improved over the last decade has improved exactly as in previous decades. Unfortunately, the improvements have come with a tremendous cost in human effort and computational resources. Basically, we learned to build reasonably reliable systems from unreliable parts adding endless layers of checks at run time and test mass.
The code structure itself has sometimes changed, but not always for the better. Often, these layers of intricate software dependencies and common design to prevent an individual, however competent, can fully understand a system. This bodes ill for the future: we can not understand and can not even measure the critical aspects of our systems.
There are, of course, that system builders have resisted pressures to build more swollen and covered systems. We thank them our planes do not crash computer, our phones work, and our emails arrive on time. They deserve praise for their efforts to make software development a mature and reliable set of principles, tools and techniques. Unfortunately they are a minority, and the bloatware (software swollen) dominates much of the printing and thinking of people.