I'm about to get a little crazy here, so bear with me. I just had to let people in on this way out realization I had:
Developers are people, too.
Now, developers, I know that you already knew this. This post is not for you. Go read the archives of XKCD or something. Those emotionally close to developers probably expected the above, so you can probably skip this post, too.
Who, then, am I writing to?
I write to those that have to work with developers. Specifically, I'm speaking to those that have to deal with evaluating the work of a developer.
Let's say your significant other asks for a cake. Great, you think, I know how to make a cake. I have all the ingredients here. This shouldn't be any problem. So, you collect your flour and sugar and vanilla and milk and eggs-- Oh, wait. Eggs. Have to go get eggs.
So you go to the store to get eggs, and start cooking. Except you can't remember how much flour to use, and you can't remember where you put that one recipe from Southern Living back in 87. A few hours of searching later, you've found it, only to discover that you need sour cream as well. You debate substituting some old creamer in the back of your fridge, but, remembering you actually love your significant other, you go back to the store.
Now with everything in hand, you start cooking. An hour later, you're covered in flour and sugar and egg bits, but the cakes are in the oven. You start to clean up, but by now, you're dragging, having been running about for most the day for a stupid cake. You are considering an existence without cake. A nocaken?
The cake finishes, and you icing it, then present it proudly to your significant other. And he/she frowns.
"But I wanted chocolate."
Want to know how the analogy maps?
We get requests all the time that start with a basic need. "I need a way to share files through a web interface." Great! we think. We have a CMS that does that out of the box! This will be sooo easy.
Easy until we discover that the servers are all already taken, and we have to beg for another one. Once we get the server, we find out we're out of licenses. Once we have a license, we discover there's issues installing the proper decoders onto our flavor of *nix, and we have to find a special buildout recipe. Finally, we get everything to build consistently, and we hand over something we've been working our butt off on for weeks, if not months.
"But I wanted it to have a preview function."
Cake is so much more satisfying to throw at someone than code.
"But I hear devs critique each other ALL THE TIME!"
Well, yes. But see, we're not in the same role with each other. We're peers, and some amount of critique/pissing content is expected. We even invite it. If Alton Brown came in and said, "Darling, that cake should have been chocolate," I would have been rushing off for some cocoa to make everything alright for ALTON FREAKING BROWN. My husband just gets cake shoved somewhere improbable.
So, what to do?
Take a deep breath. Perhaps the requirements were misread. Perhaps a major part of the requirement was missed (more on how that happens later). Perhaps hallway conversations and after-meeting asides perverted the requirement over time. It happens. Humans wrote the requirements, humans passed them along, humans implemented the requirements, and humans QA'd them. That's a lot of space for error.
There's things you can do in the future to help, but for now, getting spun up over the difference between chocolate and vanilla is going to do nothing for anyone. You might win a quick victory by slamming on the coders, but in the end, you'll end up hurting your team more. Is it worth killing the team's momentum for that?
Do you really want to have them throw the cake in your face and walk out the door?
Don't stop everything due to the cake being the wrong flavor. Go ahead and eat it, and make a note to ask for chocolate next time.