A bonus program should have two key elements. First, it must not become an entitlement program where everyone thinks they will get a bonus no matter what. Secondly, the bonus program should be self-financing - the achievements that the program pays out for should improve the company's bottom line by more than the cost of the payouts.
This means that the individual objectives (whether metrics or MBO-type objectives) must be very carefully chosen, so as to avoid behaviours that are good for the employee and possibly not so good for the company. This is easier said than done. Everyone works for themselves, and this is where it becomes obvious. Manage compensation so that working for the company is the best strategy for the employee.
Secondly, there should be some way of factoring in the success of the project or company, and better yet, the company-level success of the specific objectives (in aggregate) assigned to individuals. This can be a method of determining a pool of money that will be paid as bonuses, or determining a factor that leverages the individual bonus awards to reflect the success of the project or the company as a whole. If the project fails or the company does not make predetermined targets, then bonuses could - and probably should - go to zero. This is a must, in my opinion. Alternatively, if the project or the company results exceed targets, bonuses could be leveraged up.
Think your bonus program through carefully. In my experience, bonus programs can be a very mixed blessing that can easily become a costly nightmare. Poorly designed bonus programs often become an incentive for self-interested activity rather than promoting the success of the company or project. Remember recent high profile arrangements in the financial services industry where high paid people are getting big time payouts while the companies fail under their leadership.