What's the most complex thing about software development?
So far, on Quora.com, there have been four excellent answers to this question: discussing
- the confusing role of people,
-the requirements problems,
-the interactions with the physical world.
Each of these factors certainly makes software development more complex, and processes such as Agile are designed to cope with this complexity. But, the ultimate complexity factor is software testing.
Why testing? In the software development literature, testing is not usually treated as a glamorous part of development, but when we're testing, we're up against the Second Law of Thermodynamics, which warns us that perfection is ultimately unobtainable.
So, even if we absolutely knew all the requirements (which we can't, of course), kept all the human factors under control (also impossible), and knew exactly all the physical properties of the real world (once more, impossible), we would still never be able to perform the infinite number of tests to cover all possible situations.
In other words, the software could still surprise us at any time. That's what I call complexity.
Of course, we can still work hard to solve these other problems. On requirements, for instance, see our Exploring Requirements books.
But no matter how hard you try, you'll still be faced with the testing problem. To understand this problem and what you can do to reduce (but not eliminate) it, take a look at Perfect Software and Other Illusions about Testing.