- Too many bugs
- Too difficult to use
- Too much administration and maintenance work
Since I started programming, I could see the IT world complexity growing and growing. In the beginning there was one processor and one process running at a time - no other software to integrate with. Everything was easier. When I think back to times of Commodore C-64 or when I was using the MS DOS Borland Turbo Pascal or C compilers - they were all extremely robust and when there was something not working as desired, I could be to 99 % sure that it's my fault. So at least the core system and the development platform were rock-solid and stable. That did not always apply to my programs... ;-)
Nowadays, operating systems and their core services as well as development environments - and in addition to that a bunch of third-party libraries all have their issues. So the software developer doesn't even start on a rock-solid base as it happened to be back in the early eightees (at least according to my experience - YMMV). In addition to that: If you want to produce cars, toys or whatever other physical stuff, in most cases you need a factory and a lot of money before you can start. For producing software, all you need is a computer and download some tutorial from the net and even a fool can get started - and unfortunately a lot of fools do...
But the low entrance barrier is only one reason for the lot of issues around. In my opinion the complexity is the worst thing here. Even with the honest strong desire to get everything right, you can't - apart from the fact that IT world has grown far too big to be completely covered by a single person.
But the growing IT world did not bring only troubles - we do have far more possibilities since computers were invented. Software development is far easier than in the beginning of computers. We can build software with far more features in much shorter time now. The problem: The software can often do far more than the users can handle.
And last but not least: I remember times when the "installation" of a program was just copying it to the machine and run it. Today it requires dependency checks and sometimes complex installation procedures. Although still possible - only a very few programs that run fine when you just copy them. Nowadays many software products have a bunch of required preconditions and a lot of integration options that need configuration. Highly integrated software means more maintenance work regarding updates (of any of the involved components). Another reason for increased maintenance work are the customization options that most software comes with.
A normal user nowadays is working with a lot of different software products and often there are some software products that are used very seldom only. I have seen users dealing with software they need to touch only once a month. From one month to the other they need to re-find all needed menu items again because from one month to the other they always forgot.
The challenge these days is:
- To reduce complexity (of the problem and feature set) as far as possible (while maintaining flexibility).
- To make using the software easier - software must be intuitive to use (only a very few people do read documentation or help file text).
- And to make configuration obvious and simple.