1) David Warner, Australia

808 runs at 44.88

Warner began the year with a bang against Pakistan in Sydney, when he walloped a hundred off 78 balls and became the first batsman in 40 years to score a century before a Test match had even stopped for lunch. But he is nicknamed the Reverend these days, and showed off a more meditative side on Australia’s tour of Bangladesh, where he strung together back-to-back centuries. He thought the first, in a narrow defeat at Mirpur, was the best he’d ever made. But the second was better still. It took him six hours and 209 balls, which made it the slowest, most patient and painstaking, of his career.

2) Dean Elgar, South Africa

1,097 runs at 54.85

In January, Elgar said how fed up he was that he kept getting out for “stupid 20s and 30s and 40s.” He decided something had to change, and it did. He started with a century against Sri Lanka in Cape Town, followed that with another against New Zealand in Dunedin, and a third against England at The Oval, the second half of this last scored even though he had a broken finger. Back home, he devoured Bangladesh’s attack, and made 199 and 113 in back-to-back matches. In the end, he scored as many Test centuries this year as he had in the previous five of his career put together.

3) Cheteshwar Pujara, India

1,140 runs at 67.05

The older Pujara gets, the more of throwback he seems. Never mind not playing in the IPL, he said that this year he didn’t even bother to watch it on TV. Instead, he spent spring getting more practice. Given that he’d only just played the longest Test innings by an Indian batsman, he hardly needed it. That was against Australia at Ranchi, when he batted through two days for 202 runs. He followed that with three hefty centuries against Sri Lanka. In another Test against them, at Eden Gardens, he managed to bat on all five days. Altogether, he spent 55 hours at the crease in Test cricket this year.

4) Steve Smith, Australia

1,127 runs at 70.43

No one knows exactly what went down between the devil and Steve Smith at the crossroads back in the winter of 2013. But whatever it was, Smith, who was once a ropy leg-spinner with a rickety batting technique, has been in unreal form ever since. He finishes 2017 as he began it, top of the ICC’s Test batting rankings, even though he had a short slump during Australia’s tour of Bangladesh. Either side of that, he made three brilliant centuries in India, two of them in conditions so difficult that no one else made it near three figures, and then eviscerated England in Brisbane and Perth.

5) Virat Kohli, India

1,059 runs at 75.64

Kohli scored three double centuries and another couple of hundreds this year but only just squeezed into this team. Like Joe Root, he was underwhelming in his team’s key series. Against Australia, Kohli only made 46 runs in six innings. Which, for a man who seems to take perfection as his standard — he could soon become the first batsman to be top of the Test, ODI and T20 rankings — is a serious blight on his record. Aside from that, there was an irresistible wave of runs against Bangladesh and Sri Lanka, who suffered through back-to-back innings of 104 in Kolkata, 213 in Nagpur, and 243 in Delhi.

6) Shakib Al Hasan, Bangladesh

665 runs at 47.5 / 29 wickets at 33.37

The best all-rounder in the world isn’t Ben Stokes, or either of India’s two talented spinners Ravi Ashwin and Ravindra Jadeja, but Shakib Al Hasan. He began the year by breaking Bangladesh’s national record for the highest score in Test cricket, with 217 against Trent Boult and Tim Southee in Wellington. Then he shaped Bangladesh’s first against Sri Lanka by scoring their only century in a four-wicket victory in Colombo. His peak, though, was his performance in Bangladesh’s famous first victory against Australia. That was in Dhaka, where he made the top score of 84 and followed up by taking a match haul of 10 for 153.

7) Mushfiqur Rahim, Bangladesh

766 runs at 54.71 / 12 catches, 2 stumpings

That’s two Bangladesh players, then, which seems a lot since it also happens to be the number of matches they won this year. But then, it wasn’t for a want of effort from their captain, who has been their leading run-scorer, and, more often than not, their wicketkeeper too. He scored 159 in a record-breaking stand with Shakib against New Zealand in January, and followed up, a month later, with 127 in Bangladesh’s first ever Test in India. After that he made a string of gritty rearguard fifties against Sri Lanka and Australia. Along the way, he was hospitalised, twice, after being hit on the head by Duanne Olivier and Tim Southee.

8) Mitchell Starc, Australia

26 wickets at 26.34

Until the Ashes came around, Starc’s year didn’t add up to all that much. He missed two Tests against India and another couple against Bangladesh, which meant that, coming into the Australian summer he had only taken seven wickets in four matches. And while he cut through England in Brisbane and Adelaide, you could say he was outbowled by Josh Hazlewood and Pat Cummins. But then came Perth, and in that ball, a 90m/h leg-cutter that beat James Vince like John Bonham’s bass drum. It was an unforgettable, iconic, delivery. Even if it jagged off a crack. At his best, there’s no one better.

9) Nathan Lyon, Australia

60 wickets at 22.91

Between his aggressive sledging, all those cheap English wickets, and the fleeting turn his love life took in the tabloids, Lyon’s doing a pretty fair impression of Shane Warne these days. This year, he even did something Warne never quite could and came unscathed through a tour of India. He took 19 wickets at 25 each, including eight for 50 at Bengaluru. Lyon’s always been a fine bowler in Australia, where he can work with bounce and over-spin, but now he has figured out how to do it in Asia, too. He was even better in Bangladesh, where he took two six-fors and a seven-for in back-to-back innings.

10) Jimmy Anderson, England

51 wickets at 16.86

Rumour has it Anderson has a portrait of himself delivering a hideous leg-side half volley stashed in his attic. At the age of 35, he had the best season of his life. But then, he has an old master’s understanding of his craft. He took 39 wickets at an average of 14 each in the summer, including a career-best seven for 42 against West Indies at Lord’s. And if he’s been bowling little less than his best in Australia, where he has to work on unforgiving pitches and with a different tool in a Kookaburra ball, he still picked up his first five-for there in the day/night Test at Adelaide.

11) Kagiso Rabada, South Africa

54 wickets at 20.96

Rabada had a couple of ordinary tours this summer, to England and New Zealand, but he’s still finished up with more wickets than any other fast bowler. If he hadn’t been suspended from the second Test against England because of his bad language, he would surely have had even more, too, since he took wickets in every single game he played this year. Back home, he swept through Sri Lanka — 10 for 92 in the Test at Cape Town — and Bangladesh — 10 for 63 at Bloemfontein. By the end of the year, he had become one of the youngest men in history to take 100 Test wickets.

This is an extract taken from The Spin, the Guardian.