During my semester abroad at Singapore Management University, I took a class on core software engineering principles and practices. For the final project, all groups in the class were given the exact same requirements document from the professors who served as the clients. It was to build an online course bidding system with a hundred little peculiarities.
Singapore Management University had (and probably still has) this infuriating system where you can't just get into the class you are interested in or is a requirement for you to graduate. You can't even meet the prerequisites to be allowed into it. You need to bid on it with your limited online dollars, based on how badly you want the class. Every student gets the same amount of dollars, and you have to somehow become a master at resource allocation with uncertainty for some stupid reason that I never understood.
In this required-to-graduate course, which I would assume students found themselves in as a result of a successful bid, we needed to rebuild this system with all the quirks that exist in the real system. Throughout the course, we had to report to the clients with a certain level of progress, while being as agile. This was a painful exercise in the lesson that customer is king, and resources are always limited, and every build decision involves a tradeoff.