1) end recipient tells you what they want
2) you build that, perhaps exactly
3) they don't like it
Thinking in abstractions, and imagining what that would really look like once implemented, is more or less a job description for programmers. It isn't, for most other jobs, and thus most other people. If you don't do frequent reality checks during the process, you will be quite likely to get this result at the end. Of course, the students doing the programming in this case, were unlikely to have had multiple software projects' experience, to know this. But someone there should have, and should have insisted on putting sample results in front of parents to see what their theoretical response would be. I find that management, and probably also politicians, don't like doing that because they can't control how the conversation goes, and it could bring them bad news. But putting that off until the end, brings worse news.