>>58
Software takes long and costs so much because of the nature of solving problems. Solving a problem with software inherently means being able to describe the problem statement and scope in a highly precise manner. It isn't always easy to be able to do this on the sole basis of chatting with stakeholders for a couple of weeks. Having an imprecise problem statement leads to developing a software solution that is likely to be incompatible towards the stakeholder's context.
The good news is that going through the process of producing (well conforming or incompatible) software can increase the contextual understanding on the part of the programmers and system designers. The software developers can further reiterate the process of communicating with stakeholders, producing a software that conforms to the updated knowledge, then applying the software to the stakeholders. This will then produce more knowledge about the stakeholder context allowing the developers to improve their problem statement and problem scope. This software development process can reiterate for as long as needed to increase understanding to the problem statement, this in turn improves the software's ability to solve the stakeholder's problem.