Software Complexity
Essential & accidental. The task of a software developer is to discover & write down the fundamental complexity of a solution to a problem, while inventing the minimal amount of accidental complexity [No Silver Bullet - Essence and Accident in Software Engineering][1].
The developers of software have a somewhat unique, and more direct connection to the end users compared to other products.
Software is not a fixed static product. It can be relatively easily changed once it has been released, and it frequently evolves significantly over time.
This direct connection means that the experience of operating and maintaining software is arguably the most important experience a software developer can have.
Studies have shown that fewer than 10% of the development happens before a product is released. The rest of the 90% is once the software is in the hands of users.
References
- [1]: http://www.cs.unc.edu/techreports/86-020.pdf "No Silver Bullet - Essence and Accident in Software Engineering", Fred Brooks, 1986.
- Kemerer, Chris F., and Sandra Slaughter. "An empirical approach to studying software evolution." IEEE transactions on software engineering 25.4 (1999): 493-509.