Having led teams of software development (in a business setting), there are often some folks that have no business programming anything.
My observation with most development is the person who is writing the software has never done the job so they are 'disconnected' from using it.
One of my teams developed a fairly complex warehouse management system I had designed many years ago (before wi-fi and PCs).
The design goal was to go from shipping 1/4 million dollars a day to 1 million dollars a day, add no people, and pay for itself in 1 year (and we did it).
It had remote terminals on forklifts, barcode scanning, tons of interlocking conveyors systems and all sorts of 'interesting' stuff.
When they finished I told them -
"Tomorrow we will put on our jeans and go over to the warehouse.
There you will operate alongside the warehouse workers the stuff that you just wrote.
That way when Suzy on the forklift tells you it takes too many clicks to do a particular function, you will understand and come back and fix it right!"
It was a very valuable learning experience for the developers and gave them a real 'taste' of programming versus use.
The system was a bit ahead of its time so much so that a small car company (Saturn GM) brought an entourage to come and see it.