The best way to advance your career is to be great at your job. If you are great, do people know it? In the day-to-day grind, it is easy to fade to the background and be taken for granted.
It is important to advocate for yourself. Take ownership of your career. If you wait for someone else to make your career be what you hope it to be, then expect to keep waiting.
Make it obvious that you are great at what you do. Publish open source projects. Write articles. Give talks. Share your knowledge and help others be better.
If your pay level is near average for your position, that does not mean that you should not be paid more. Are you above average? Then your salary should also be above average. Get promoted to be a senior-level dev or a tech lead, and be prepared to take on more responsibility.
Many developers dislike recruiters. Are some of them annoyingly incompetent at understanding what we do? Sure, but recruiters are not the enemy. Many have been around for a while and have knowledge about who gets hired for what position, at what pay and why. If you find one that is respectful and knows what they are doing, talk to them about how you can get to where you want to be in your career.
As your career advances, you will be faced with a decision. Do you want to manage a team? If not, you will encounter a pay ceiling. Being a great developer has value to a company, but being able to build and lead a team of great developers is even more valuable. There is nothing wrong with not wanting to be a manager, but you will need to accept that others will progress beyond you in pay (though if you ask them, they may confess they greatly miss writing code).
This email is meant to be the start of a conversation. Expect to have further discussion on the matter.
Things to keep in mind:
SUBJECT: Lets Talk About a Raise
Hi [name of your boss] - [State things you love about your company ways you continue make a positive impact on what your company does]
[State things about people/recruiters trying to lure you away from your company that you love]
[State research about how other companies are paying more for people that are just like you. If you want to move up to a more senior position, then make your case.]
[Finish with an invitation to continue the discussion in person.]
Hi [Name of your boss] - As you know, I love it here. Our team is solid and I really enjoy collaborating with them. I feel lucky to get to work on projects like [awesome project] for [client] and [other project] for [other client]. Being able to add my skills and knowledge to the mix of all the talented people here at the agency makes it really exciting for me to come to work every day.
I have no desire to work anywhere else, but lately I have been getting lots of recruiters and people I know at other companies reaching out to me to see if I'd be interested in making a move. I tell them I am not interested of course, but in doing some research, I see that the average salary for web developers in [city] is higher than what I am currently making. I certainly consider myself above average, and I hope you agree.
Please get back to me when you have some time to discuss further. Thanks!
Do you have your own example, or a different approach? Submit an issue or pull request.