I'm writing an internal web application to generate subtitle text for videos. Part of the requirement for this project is that each line not exceed X characters, except where circumstances warrant.
I don't necessarily want to prevent the user from entering more than X characters, but I do want to show them that they are approaching (and then possibly exceeding) that number.
Ideally, they won't normally go over the limit. The application is to be used in-house by those who have received some level of training in best practices, or who have done this type of work before. I attempted to bring my own experience to the project, as I have done this sort of work before myself.
download bmml source – Wireframes created with Balsamiq Mockups
Method 1 - Counting Up
I implement a character counter beside the text input field which counts up from zero, restyling to show that they are approaching the limit, and then again in some dramatic way to reflect that they have gone over the limit.
Method 2 - Counting Down
I implement a character counter beside the text input field which counts down from the limit, and then restyles to show that they are going over their limit by n characters (say, by using negative numbers)?
Method 3 - Purely graphic cues
I implement a progress bar underneath the input field which fills to the soft maximum number of characters and which then restyles to show that they have gone over the limit. In this method, the exact number of characters by which they have gone over can be concealed from the user.
I have a strong preference for the progress bar, or for counting up, mostly because captioning is extremely cognitively taxing and I don't want the user to be overly distracted by exactly how many characters they have left until it actually becomes a problem. Furthermore, after 2 or 3 inputs, the user has developed a good idea of how much they can type, reducing the need for this warning mechanism.
Additional:
Regarding Ben Brocka's comment: Twitter and SE's comment counter is exactly what I don't want to emulate, actually. In both, you enter only one message which you can craft carefully over a few minutes. In that circumstance, having a counter is appropriate because you have a strictly-enforced maximum, and every single character matters. In my scenario, users have mere seconds to enter text and shouldn't (really, ever) have to drag their eyes across to a numerical counter. My case is also different in that it tracks a soft maximum: we don't really care if it sometimes goes over by 3 characters.
Additionally, the only reason the style change of SE's comment box character counter is obvious without looking directly at it is because it contains the words "characters remaining", making it a fairly large area whose colour change can be perceived without looking at it directly. I should have mentioned originally that the layout of this page will probably end up being fairly tight.
Edit 2: Now that I think about it, a large number beside the input field (the red 16 in my mock-up) is probably perfectly easy to read.