From two weeks on, we did bath/bottle/bed routine.
Cay would be ready for bed by 8pm, so we allowed half hour for massage/dressed for bed, 15 minutes for final bit of bottle, 15 for bath. So, he'd have his bath at 7pm. We started making an extra big bottle, which he'd have 3/4 at 6pm, then play for a bit, then bath, rest of bottle etc.
He also always woke for a bottle at 6am, but would feed anywhere in between.
So, once he'd had his 6am bottle, he'd eat around 8am. Instead of feeding him, we'd distract him. Lift him and take a walk around the house, sing to him, whatever. Once he was unstoppable-crying, we fed him. Then started the whole process again in two hours time. Two days of this, and he was eating at 6am, 10am, 2pm, 6pm, 10pm, and 2am. (This was after about a week of bath/bottle/bed, so he was used to that already).
Then he stopped waking at 10pm, and woke at midnight instead, then 4am, and still 6am. This went on for about a week, until I clicked "hang on, if he can go from 7pm-midnight, he can go from midnight until 5am". The next few nights when he woke at 4am, I popped his dummy in instead. He went to 4:30 the first night, then started crying, so I fed him. The next night he woke at 4am, but dummy-popping got us to 5:30am. The night after that he didn't even wake until 5:45am.
Then he started dropping his after-bath top-up, so he'd have a bottle 6pm, midnight, 6am, 10am, 2pm, 6pm again.
He did this from about a month, up to 4.5 months when we started weaning.
It made going out so easy as I always knew how many bottles he'd take while we were out (and I always just kept a small sterile bottle and unopened ready-made in his bag, just in case). Sometimes he'd start screaming half-hour early for a feed, if he did, I fed him (say 9:30), then went to 1:45, then 6pm as normal, so always got him back on track.
I have been blessed with a super-easy baby though.
The trick is to know the difference between them whining and crying. If they're whining, and can be distracted, even for five minutes longer than last time, great. As soon as the crying starts, feed them and bugger the routine.
Find a feed that falls at the same sort of time each day, and work from that. If you get them to feed every three hours, great! Then, get them to four hourly the same way.
The real thing for me was once he'd done a few four-hour gaps, I knew he could do it when he wanted, which made it easier.
If he was napping at a feed time, I'd just wait and feed him when he woke, then feed the next time as normal, then the feed after that as normal.
That was what worked for us, anyway xx