Brutal. My experience has been that people who do good work and take performance reviews seriously advance just fine. I can count on 2 fingers the number of times in my 23 year sales career that someone was promoted because of reasons unrelated to performance, and both times it was the same loser who was drinking buddies with the VP of Sales.
Ideally, yes. But software development is a new field and thus far no one has come up with a reliable way to measure throughout. This is related to why estimating is so hard, we don't know how to determine how hard a task will be before we start it, and once we finish it, we don't know how to determine objectively if it was done as efficiently as possible. Each task is different, and when something goes wrong or takes longer than expected it's hard to tell if the reason is incompetence or actual difficulties.