It really depends on the size of organization. For something like Google, I would say that long-response times are the norm and frequently the recruiter/contact person are extremely swamped and may have forgotten about you. Not necessarily because you aren't good, but because their volume is insane. In this case I would write a quick letter that says "Thanks, I really enjoyed meeting X (person you talked to). We had a good conversation and I wanted to check if you needed any more information from me." This is generally enough to push them if they are inclined to pursue you, if they didn't like you for whatever reason then they probably won't respond or will reject you. If they don't respond after that I would say send one more email about a week later that is slightly more urgent (considering other offers, etc). If they don't respond to that, then it's best to let that one go.
For smaller companies, they most likely don't have the resources to keep in touch with everyone. For me, this is the main value of an Applicant Tracking System: making sure no one falls through the cracks. That being said, most small companies don't have them, so they are relying on their memory + spreadsheet to carry them through.
If you're working through an external recruiter: talk to them, they have every incentive to push you through the pipeline and have a direct read on the process.
If you have a contact in the company or you met with someone in person: send them a quick follow up email is enough to move the pipeline usually.
If you've blind applied: then I would suggest sending them a quick note to get back onto their priority queue. Whomever is in charge of the process WANTS to respond to everyone, but if they don't see a fresh email sitting in their inbox, they quite possibly have forgotten that you're in the pipeline.
Also as mentioned below, pursuing many job opportunities in parallel is good for you and can be a great forcing-function/bargaining chip in late-stage hiring processes.
Keep pinging people. Asking for updates on a roughly weekly basis is a good thing. You should presumably have at least one contact from when the interview was scheduled, and hopefully you met someone during the interview and have e-mail addresses - ping these people as well.
Also, keep looking. A successful interview, even with reassurances from your contacts that things are moving along, isn't worth very much. If you get another offer in this period, you have a lot more options.
In the past, after pinging the person via email, I've waited a few days and if I haven't gotten a response, I send the person an invitation to connect on Linked-In - I've been pleasantly surprised to see the connection accepted and a real response to the original email shortly thereafter more than once.
Depending on your skill and demand, you could simply nudge them by asking if they are considering an offer because youll need to make a decision soon, as you don't want other companies to wait simply because they responded quickly.
This communicates you have options, and that they are going slower than you'd like. Clearly this only works in certain situations and can be dangerous if executed poorly.