I can't claim to have cracked it by any stretch of the imagination, but I have 2 DSs, DS1 is 17 and DS2 is 14. So far DS2 has been fine.
DS1 has had his moments over the last couple of years, including stealing money from us.
What seems to work so far is consistency and continued firmness. Don't try and be his friend. Your job is to be his parent. Make it clear what is and isn't acceptable and just keep on and on about it.
Yes, there will be shouting.
But try and remember, in between bad moments, to give him a cuddle (obviously when no-one is looking!) and tell him how much you love him, how proud of him you are - as long as this is true! - and other positive stuff. All too often it's an unrelenting battlefield and it can be as horrible for you as it is for him.
I find that tickling can work too. Makes the bugger crack a smile, which is nice to see.
If you find any other tips, please pass them on!