I'm a strong advocate for Software Engineering, but even I must admit that we do not have many of the same tools, priniciples, and laws as other engineering disciplines. Why is this? And, what should we do to get there?
closed as too broad by Martijn Pieters, whatsisname, psr, Konrad Morawski, Thomas Owens♦ May 12 '14 at 19:03
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
Two major reasons:
People don't want most of their software to be well designed, engineered solutions. While people don't want bugs in the software controlling a 747, they are clearly happy to allow them in their word processor if it means it costs $20 instead of $20,000.
Software exists primarily in an imaginary universe that usually crosses into this universe in explicitly defined areas. Much of the operation of software is essentially free from any physical limitations, and you can do just about anything as long as you have enough cpu and memory space, which more often than not you do.
Compare that to other disciplines, where you are dominated by physical constraints. Things have mass, they have tensile strengths, they have size, they have tolerance. Materials corrode, change, and have other interactions. Software is essentially information. It has no real size, and a 1 in software is an ideal 1. There are no tolerances on everything like in the physical world.
Consequently, there are very few first principles that are universal in software development. Almost every 'rule' or 'best practice' can be violated, and there are often situations where violating them is the right course of action for the given task. The lack of first principles is what prevents most software development from being the same kind of discipline as other engineering disciplines.
That's why the flight computer, where its requirements are dictated by the laws of the universe, can be engineered through a traditional process, and a line-of-business app, where you can do pretty much just about anything you want, won't be, nor should it.