Especially in a small company, I'd use one account per instance per service, so in general, 2-3 per instance (Agent, SSRS, SSIS, etc)

I have only worked in small companies, so out of interest only why do you say "Especially in a small company" -- are suggesting other security (passwords, network access etc etc) may not be as thorough as a larger company there security is more likely to be compromised?

There's not just hacking to worry about. I've seen a situation where we have a Production server and a Test Server running a copy of the production database. We run a process on Test that deletes a large number of records. Part of this process failed, because an obscure part of the software configuration contained a connection path to the production database! If we had been using the same login accounts & service accounts for Test & Production, it would have been a disaster. Since then I've made sure that accounts used on test systems have no permissions on production systems.

A larger company is more likely to have its security comprimised. If you have 100,000 employees or more, chances are there are people outside IT with the both the technical knowledge and lack of moral fiber needed to do things they shouldn't. That's not so likely in a non-tech company with 20 people. Secondly, it's a certainty that large companies like Microsoft & Boeing are targeted by skilled hackers every day, while a small company who serves only local customers may not be.

Still, that's no excuse, because the possibility of both scenarios exists for all organizations regardless of size.

Dan makes great points, but the reason I say especially at a smaller company is that you have less to manage. It's easier to set service accounts for a dozen or so instances.

At a larger company, imagine 1000 instances. It becomes a chore if you deploy instances at any scale. We had hundreds (300-400) at one place I worked, and we had separate accounts, but developers, Windows admins, etc. constantly complained. Getting new accounts, setting things up, was a small issue (to me), but it felt large (to some people).

I typically use a long, 25char, one time password for service accounts. Someone creates the account, writes down the password (no digital trails), we enter it in on setup (or later) and then we destroy the paper. If we need to get to the service account, we just change the password.