My 2 cents worth.
An employee is only there to make money for the employer. If you can afford to pay him more and you would be worse off without him, pay him more.
I don't like the surprise raises idea. It introduces randomness into the process and people like stability. Randomness seems unfair to many people, and when they feel you are unfair, they will leave. Worker bees often value stability and perceived fairness above monetary issues. This is hard to understand for the entrepreneurial type person.
My suggestion is to establish a regular schedule to review an employee's performance. People want and appreciate getting some feedback on what they are doing. Yearly is no where near often enough. It does not have to be real formal, just an honest and fair look at his/her performance. Be upfront when they do something wrong (or right for that matter). It does not have to be a yelling match, just a matter of fact statement that you expect something to be done in a certain way and a clear statement of how you want things done.
In a union shop you have little choice in pay scale, so it is not all that difficult to decide what to pay an employee and when to give them a raise. The written contract will dictate everything. In some respects this makes it easier on the employer because they make no decisions about any one individual as far as what to pay and when to give raises.
In a non-union environment, you have more flexibility, but you have to decide on each and every person, on an individual basis. There will always be some grousing about relative pay rates because everyone thinks they deserve to be paid more than the other guy. Some employers try to deal with this issue by attempting to prohibit the sharing of wage/salary data among employees. This is not usually successful. It is best to discourage such sharing, but not to make a huge deal about it. Everyone should know you try to be fair about raises, and you should make every effort to be fair.
Personally I think if you are in a non-union environment, the best idea is to have a written pay scale that defines what everyone will be paid for each job and seniority level. Than for employees who do average or above average work, introduce a bonus system payable on a regular basis. I don't think it is necessary to have a written definition of what the bonus is based on, or at least not to publish it, but employees will figure out very fast if you are not awarding them fairly. Be aware that your buddy Joe who has worked with you for 20 years, and plays poker with you every Friday night, is probably going to end up with higher bonuses just because you like him and are comfortable with him. This will cause no end of grief for you because of the perception of unfairness.
As for the guy who does not show up to work - probably the best answer is to can him unless there is some special reason to give him more than his fair share of chances. People like that are unreliable and rarely if ever change. If you don't deal with him, the rest of the employees will resent it.