When we talk about software development, we often use terms like “engineering” or “architecture,” and draw on lessons learned from other environments, implying that developing software is like building a house, or designing a new consumer product.
However, there are some very fundamental differences between software and these other sorts of products, and we need to keep these in mind in order to talk sensibly about software development.