I just finished reading Dreaming in code by Scott Rosenberg.
In this book, Scott tried to answer the question on why is building software is so hard. To answer the question he spent 3 years following the development of an open source PIM project called Chandler.
It was a very interesting book albeit it's also a quite depressing one. In the end I got the impression that we cannot find an answer why software is hard, it just is. For the case study itself, Chandler was started in 2002 and now 6 years later it only managed to reach 0.7 release.
There are some really good quotes in this book, these are few of them:
On the subject of information distribution speed by the internet:
That means you couldn't afford to perfect anything - but no need to worry because nobody else could, either.
Their work (developers) is one percent inspiration, the rest sweat-drenched detective work; their products are never finished or perfect, just varying degress of "less broken".
Brook's Law - Adding manpower to a late software project makes it later
In the software world, most of the choices that arise boils down to one particularly heartbreaking three-way trade-off ... There's an old saying: I can make it for you fast, cheap or good. Pick any two.
... effort to produce a "perfect spec" ... would prove an infinite labor; you'd never finish spec writing and start coding.
... agile development and XP are best for small teams of experienced coders.
XP can quickly decays into a means to ... "Deliver Crap Quickly"
Software developers always have more to do; the definition of "done"; ... is always somewhat arbitrary... "Done" is something that you must decide for yourself.
I got introduced (and re-introduced) to some people whose work I would love to read: Frederick Brooks, Mitch Kapor, Joel Sposky, Martin Fowler etc. It was very enjoyable reading experience, I literally can't put it down, definitely recommended reading.