The key to any successful negotiation is leverage, and the willingness to walk away. The best way to get leverage is to do parallel interviews with multiple companies at the same time, and structure the interview rounds to maximize the possibility of two or more paper offers being received at (roughly) the same time.
In terms of common mistakes, don’t base your salary request off of what they are currently earning instead of the market value for their skill set. If you were being underpaid before, this approach will perpetuate your wage gap.
Take some time before your interviews and use objective, third party resources that take years of experience, company size, and geographic location into account to come up with your numbers. For example, Payscale offers free salary surveys for people looking to get a new job or negotiate their current salary.
Hired.com also offers several resources to educate job seekers on the market rate for their skills, like our salary calculator and State of Salaries report, which looks at average software engineering salaries in tech hubs across the U.S.
Finally, don’t forget you can negotiate much more than just your base salary. For example, if you’re a sales person, you might negotiate of a higher-tiered commission or bonus if you reach a certain success threshold. You can also negotiate paid time off, cell phone/commute subsidies, or the flexibility to work from home a few days a week if that’s important to you.