Coding to specifications is a dangerous thing. Sure, not having any specs is dangerous as well. The problem arises when you only check off the items on the specs and don’t look at the completed product that you’ve built.
This happens often in software and I see it all the time. The product owner writes down the things that are needed and the work is divvied up amongst the programmers. Each given tasks. The code is written and code reviewed. The product owner looks at the end result from the view of himself or herself.
The software gets shipped to the waiting masses.
The waiting masses don’t have the same expectations or understanding of the product owner. Real users do all sorts of things that you might not expect.
– = –
Here’s an example:
You might have an app on a device to turn on security on the device. If you launch the app you obviously want to turn on the lock, right? The flow takes you through setting up the security all OK.
What if you hit the icon accidentally?
Well, that’s not on the spec.
The spec says to lead the user through setting a PIN; exiting isn’t part of the spec.
Then you reboot because there’s no way out.
– = –
The specs can be (and most likely are) all trees and very little forest.