As an engineering manager who does resume screening for candidates, I can comfortably say that I have read thousands of resumes by now.
Doing interviews after the screening, I found that there is no correlation between the quality of the resume and the candidate. There were candidates with stellar resumes who failed basic questions and some with bad resumes who excelled in interviews and later became great performers in the team.
The problem is that a badly made resume frequently gets people disqualified from getting interviews. It happens more than it should due to bad heuristics from the screeners.
The more candidates in the role, the less time there is to analyze CVs, this leads to screeners quickly disqualifying candidates based on assumptions. Even if those people were interviewed, there will be those that will interview next asking about "red flags in the resume".
Before diving into what gets people discarded, let's see why there is a need for a resume at all.
Behind The Scenes
Before the company opens a role, there is a conversation where it will be decided what an "ideal future employee" looks like.
Let's say we are hiring for a Senior Brainfuck Engineer, since nobody can't get Senior graduation in a Brainfuck degree, no one can't prove they are qualified, so the search will revert to the next metric: years of experience. 
Here is an example of an opening profile:
- 5+ years of coding experience.
- 3+ years of Brainfuck
- 3+ years of esoteric languages in SaaS settings.
- Cultural fit, that can't be quantified in the resume, let's skip this.
This opening will be published, and hiring managers / HR will realize that they don't have a perfect candidate and now have thousands of CVs to parse through, most of them with lots of filler written in them.
Due to the volume, they will probably start skimming resumes in just 7 seconds, so you better not waste their time and keep it to the point.
In those seconds hiring managers will be skimming for which roles and companies have you worked for and if that experience is related to the open position. They also will check your LinkedIn to see if you are a fake candidate or a lunatic.
Anything that does not contribute positively to this screening is irrelevant and needs to be removed. You just have to convince them that you are worth 30-60 minutes of their time that they could spend doing their backlog tasks or browsing Reddit / Hacker News 
So for anything that will not fit the screening process described above, leave it out of your resume.
"Perfection is finally attained not when there is no longer anything to add but when there is no longer anything to take away." - Antoine de Saint-Exupéry.
Avoid including a photo
This one happens mostly with designers, junior engineers, and older candidates. 
You should never have your photo in your resume, this can create a bias against you, if you are good looking you won't get any points for that, if you are not, or your picture is blurry or badly taken, this can create a bias against you. Even judges are guilty of doing this.
Save a good picture for your LinkedIn since you should have it there. The lack of a profile picture might have you confused for a fake candidate. 
Avoid giving personal info
Personal info can work against you and even violate your own privacy like age, marital status, date of birth, full address. This info can get leaked on the open web and you can be doxxed.
It's not necessary to list referrals at this stage, so do not include emails or phone numbers of third parties, in order to respect their privacy, this information can be given later, if needed.
+-----------------------------------+ | xxxxxxxxxxx | | xxx xx | | xxx xxxxxx xx | | xx x x | | xx x xxxxx xxxxx x xxx | | xxxxx x x x x xxx x | | xxxx xxxx xxxxx x xx | | xxxx xxxx xxx | | x xx xx xx | | x xxxxxxxx xx | | xxx xxxx | | xxxxxxxxxxx | | Gollum / Sméagol | | Date of birth: 2400, Third Age | | Marital Statuses: Single (Yes!) | | Location: Misty Mountains | +-----------------------------------+
Avoid giving yourself a competency score
This one will always be biased, either by the Dunning Kruger effect or by the Impostor Syndrome.
It is impossible to measure yourself, because you don't know what you don't know, even if those skills were measured by others, everyone has different scales of how to analyze them.
The situation gets even weirder when people rate themselves on Agile / Kanban / Git as a developer, do you know what the is difference between a "3" to a "4" score at Kanban? I don't.
Personal anedote on Dunning Kruger effect
I see that most people that give themselves a 5/5 in everything, have less than 3 years in the industry. Writing years of experience is not necessary but is way better.
myself as a 1/5, everything was very hard, I needed to be constantly searching and reading documentation to build a usable website.
6 months later, I rarely googled anymore, and felt like a master. I
was finally 5/5!
Now, 8 years later, I would rate myself a 3/5, honestly, it is
a lot of things that I haven't touched yet like WebRTC that made me to finish an online game due to using TCP for real time .
By the time I learned those things, new things will come, and I will still feel like a 3/5.
▲ │ xx C │ xxx o │ x xx n │ xx xx x f │ xx xxx xx i │ x xxx xx d │ x xxxxxx e │ xx n │ xx c │ x e │ x └──────────────────────────► Experience
Keep the information relevant
Resumes that have just lots of roles with responsibilities as "fixing bugs and implementing features" and "attending meetings", which is a given in any software job. Rejection for this one is very common.
I've already seen a good referral get rejected because they wrote bogus skills in their resume such as "Windows, Chrome, and Visual Studio Code", this came across to the hiring manager as someone that does not know much beyond that. Fortunately, the decision was overruled.
Another thing, If you worked in a non-related field before, you can list it, but don't provide too much information unless it is relevant to the role, it will only compete for attention for things that are actually relevant. Also, make the ordering reverse chronological.
Instead of this:
You can do this:
+----------------------------------+ | **Full Stack Engineer @ Evil | | Corp** | | | | - Shipped PWA web application | | for Internal pong app for | | 50.000 DAU, using React | | and Redux | | | | - Architect changes inside the | | Django project, leveraging | | the strangling pattern to | | transition from a monolith | | to multiple apps, with | | unit test coverage. | | | | - Built and shipped the | | payment gateway extension, | | leveraging third-party | | APIs like Stripe | | | +----------------------------------+
Avoid listing too many similar technologies
An example of this is candidates that claim they worked with React.js, Angular, and Vue just within a year of their job. Rarely ever someone will work with more than 2 similar technologies during a short period.
Padding the resume brings the question: was this the primary language, or was it just one bug fix made this whole time in a forgotten codebase? Or are they lying altogether? Either way, it would cost the screener 30-60 minutes to discover during the interview.
The exception can be granted when working for 2+ years in same company. In any case, if that happens you should group the experience by those projects, individually highlighting the accomplishments of each.
Also don't list conflicting technology at the footer, write what project you did with each one of them.
Too many responsibilities won't do well either
Listing multiple roles in the same position is a big no, for example, there are candidates that claims that they work as a Developer, DevOps, and SDET in the same job. You can wear many hats, but doing other activities once in a while hardly makes it 2-5 official roles.
Just give focus on the role you are currently looking for, and if looking multiple roles, make one resume for each and upload them selectively.
Things like multiple spelling mistakes, broken margins, and resumes sent as .docx and other formats most likely to be discarded by HR or the applicant tracking system. Make sure to spellcheck, and proofread the document. For foreigners, don't mix English with your native language. Use Grammarly, it is awesome and they are not even paying me to tell that.
There are some materials that place a great exaggeration on these things and how they should be done, but you should not waste too much time on it:
Page size: It's not ideal to have too many pages, but I never saw someone getting disqualified for having too many pages in the resume. This could be true when resumes got printed but nowadays the worst that can happen is getting into points that were given above.
About me: This one is not particularly necessary, the resume should have all the information, if it is too long it will definitely get skipped. Best to keep it short and don't repeat information.
Hobbies: I would not include this one, but nobody has any problem with it, just don't say that you like to embezzle companies in your free time.
I would not recommend spending much time writing and perfecting a resume, it is nice to have a good resume, but that takes time that would be better spent preparing for the interviews.
Building a resume is something that can be done iteratively and polished as the search progresses. For every position, write 3-5 short paragraphs of the most important accomplishments of the project like users acquired or time saved, with what tech stack was used.
The performance in the interviews will have way more impact. The goal of a resume is simply to get you there.
: If you are currently looking for a job, a good tool you can use is JobSniffer, it searches through lots of companies, have better location heuristics than LinkedIn, and it is more complete than traditional job boards.
: Years of experience is a metric that signals some correlation between experience but it is not a good one, but at this stage is the best we have. In 3 years someone can become an engineer with more skill sets than someone in 7 years.
: While it is nice talking to people and sometimes learning something from them, nobody loves interviewing. In earlier stages, most applicants fail the interview, sometimes through no fault of their skills, because interviewing by itself is a skill. I failed all interviews that I attended before 10 AM.
 My theory for older people adding photos is that adding photos to resumes was a tradition 10-20 years ago, and designers think it is "hip" to do so.
 Unfortunately, there are a lot of fake candidates with no photo or stock images claiming to be living in the US/Canada (and recently in Ukraine), when they join the call they are clearly not in the same timezone with an accent that is not from those regions.
: If you are doing a game and using Websockets you will have problems with TCP jittering, even locally. I discovered that people just used 2 WebSocket connections and grab the earliest packets that came through the wire. WebRTC might be a better solution nowadays.