How do you criticize/give feedback someone's work without demotivating them?
If you need to review someone's work, how do you prevent demotivating them when they did a bad job?
How would a teacher do it?
After all, if you can't connect the dots between the problem and a better solution, then they aren't going to learn anything from the process. So, you have to help them solve the problem themselves.
Openly, honestly, and in a culture that emphasises learning from mistakes instead of punishing failure.
Without that, it's very very hard.
Concentrate on the work not the person. That said, it is very hard to get right.
What you want is the person to change their behaviour in some way so concentrate on that, explaining why the existing behaviour is a problem and what can be done to improve that. This should (hopefully) create some emotional distance between the person and the problem so that they can see that it's not personal and help them concentrate on the solution.
When someone is not doing well, the best thing you can do for them is to tell them what is wrong and what needs to be fixed. Don't fix things behind their back (they will never know that what they do is unacceptable), don't pretend everything is fine. Be honest about the problem, ask them for solutions but point them to the solution you want if need be.
You don't need to be nasty or personally attack them, but you need to set clear expectations of what is acceptable and what is not. I once had two employees and I promoted one and did not promote the other and I had to sit down with her and tell her exactly what she needed to do to get that promotion. She had a specific list of things that needed improvement and that she had to show me she could accomplish before being a senior person. She eventually got that promotion becasue she knew what standard she had to meet and that I would promote her as soon as she had met that standard. Those conversations are hard, they aren't fun for the manager, but you can't manage well unless you are willing to have those conversations.
In the software development world, code reviews are a good place to start. You aren't attacking the person, just seeing what the code does and how it can be improved. Getting the developers to not think they own the code and no one else should see it or touch it, is also a part of code review making it even more important to do in any software shop. And don't just review the poorer performers, if everyone has code reviewed, then the criticisms will be taken better.
In the non-software world, you can also take the time to do checks of someone's work on a regular basis especially if the person is new or very junior. It is easier to catch a problem in the first weeks they work for you, than to get upset over a long-standing problem after they have been doing it that way for a year and you never said anything.
Give positive feedback when warranted. If you see improvement in a specific area of concern, make sure the person knows you noticed.
And be fair. Don't reserve all your praise for one person and all your criticism for another.
And don't criticize publically. Praise is given in public, but criticism is given in private.
Show them all their positives, then explain them the negatives/criticize their work.
Then discuss openly and frankly on how to improve those. Show that you're open for discussing issues and never be patronizing (I find that this is the most hurtful).
This can apply for other situations, such as giving feedback on negative behaviour.
SHOULD they know they screwed up?
Do they KNOW they screwed up?
[yes, no] : Kick them (hard) in the ass.
[no, yes] : Acknowledge the error but have a sense of humor about it.
[no, no] : Take the time to show the rookie the ropes and point out the nature of the problem.
[yes, yes] : "Okay, so what happened?"
All of these answers are great. But they all miss a very obvious one. Know your people!
If you know your direct reports..and I mean non work related things..then you will know how to approach this situation.
With my current position, I have 24 direct reports, but work side by side with 4 other managers to manage an entire section (each with about 24 direct reports). As you can guess, each person is an individual. I know that with person X I can walk up to him, and tell him directly "hey X, you're work isn't cutting it. Pick it up." Person Y I can say "hey, Y, your work isn't cutting it. This is what you should do to get to what we expect." But I also have a few that are under the person Z category. I have to tell them all the good things they are doing in order to discuss the one thing they're not doing right. Any other way and they take it personally.
If it's a person that you've been managing for a while, you should know them by now. If they're new to you, you should use the sandwich method. I've been using this method for a few years now and I find that it works best for the average person. That is, you find 2 things that are good, and 1 thing you want the person to improve on. You sandwich that improvement between the two good things. That way you're starting the meeting off good, hitting the topic the meeting is actually about, and then ending it on something good.
The biggest thing I have learned is to concentrate on one deficiency at a time. Set measurable goals with getting them to the requirements. Set a time that they should be where they need to be. Make sure it's realistic.
Of course, if you're not their manager, than all of this is moot. The best thing to do in that case is the sandwich method. But, you want to make sure they want your feedback. A lot of people don't like hearing about this type of stuff from their peers. If you know that person is this type, the best thing to do is to discuss it with their manager.