Complexity in Software Industry

One of the realities in our industry that everybody agree is that the only constant in software development is change, but another that has great impact as well is complexity.

I have read many articles and books about the complexity in the software industry, is mentioned in literacy about the profession, and everyone agree that is an issue that has to be managed and if it is possible be avoided in order to has success when developing a product. I’m not only read about it, I have been experience it in all this 14 years as software developer professional.

Develop software applications is complex, but I believe that it hasn’t be at all. I always thought about it and asking myself why it is this way, why is a fact that even is considered as a management issue and why it has to be like that.
In fact, one of my reflections took me to the conclusion is that there are specific and well indentified sources of complexity that I put in four categories: technical, management, business-industry and client specific.

Why I classified all this? Because I’m convinced that at least the most part of all complexity is generated by us and our industry itself, and the other part from the client’s specific complex business needs. The first is avoidable; the second has to be managed.

Starting with client’s inner business complexity , here is the source of many problems that maybe impact in the complexity of the software tools to be developed: size of the project, complexity of the problems to resolve, legal and budget constraints, etc.

Related to business and industry there are the several vendors and platforms because every company want to get a piece of cake in the market. One example ? Mobile platforms.
We have all least 3 important vendors that are fighting each other here like Google, Apple and the others. That gives as result that everyone has its own different platform to develop mobile applications. So when you think to create one universal mobile app, you have to split your effort for each platform, that each one has its own different way and apis. That’s one effort multiplied by three ( or more ).

Then we get to management, here is like to talk very much about it. Everybody agrees that one of the biggest causes of software projects fails is management decisions. Too many agrees but nobody cares, that's why projects still fail every time. How many times have you heard about bad and optimistic estimates? Poor project definition and details? Hiring the wrong people ? Promoting to manager a guy because he is been doing great in coding star but who doesn’t have the abilities to manage people? Or taking technical decisions because your are the boss but not having any knowledge or technical experience ? Process that add more heavy weight way to the project but little or no value?

Yes my friends, those and more are management issues, well known source of problems who add complexity and there are mentioned even in books.

And finally we are in the pure technical subjects where great part of all complexity and problems is generated. Yes, I have to admit this one, is our fault: the way of design solutions to the problems, our lack of simplicity in designing those solutions, the tendency think that all our code has to be sophisticate otherwise is not valid solutions( geek thinking ), unreadable code, lack of documentation, lack of usability, not coding and developing applications thinking in that other people will use it, etc. It’s a very wide topic.

The reason and meaning of our industry to exists is about to create and develop tools that give solutions; but also is so open, flexible, and at this moment cheap and to ubiquitous that everybody can propose and create several ways to resolve and give solutions to the same problems the clients have.
Is this diversity of options really necessary? My answered is not. It only adds wood to the fire, and creates change for nothing.

I will be writing articles in where I will develop each topic in a more detailed way.