We planned to do it over a weekend but in the event we just snapped and did it midweek! DP did work from home that week though, just in case it went wrong, and to help with the naps as they were a little harder to sort (he still grizzles when he goes down for his naps).
Bedtime routine: at around 6.45 we start feeding him, in the living room rather than his darkened bedroom. He takes his time (usually about 20 minutes) and sometimes he does fall asleep, but I wake him up gently and carry on feeding him. Then his daddy takes him for his bath and I get his room ready. Curtains shut and blind down, nightlight on and white noise thing on. Sleeping bag and pjs ready.
Then daddy brings him in and I dress him (he often cries at this stage because he hates getting dressed) then we put him in his sleeping bag and lie him down and read his story... Sometimes he grizzles through it though, in which case we only do a couple of pages, and sometimes he's cheerful, and then he gets a longer story (because we figure he's grizzling because he's knackered). Then we say 'night night, sleepy time', give him a kiss and leave. Usually we hear nothing at all then til 5.30ish, though occasionally he grizzles for five minutes or sometimes we hear his toys rattling about as we go downstairs - we did tonight. If we do have to go in, we pat him on the back (he likes to sleep on his front or side) and say 'its still sleepy time' and walk straight out again - we don't wait for him to stop crying because he only stops when we leave the room! We never ever pick him up.
I suppose if he were poorly or teething, we might pick him up, but he's had two teeth appear and had a cold since we did the sleep training, and neither stopped him sleeping though!
i should add at I have no idea why it worked so easily. I don't claim credit for it. Something just seemed to click inside him - like he thought, 'Oh ok, bedtime is for sleeping, not cuddling!'