It never takes me longer than a week to train a pup and we foster many of them. Schedule is the total secret and although we use crates and Xpens, we never leave them in a crate long enough when trained for them to hold it too long and possibly damage their kidneys.
Schedule drinking as well as food. Teach your pup to eat when fed by picking up the dish after 15 minutes. Give the pup water when it has gone potty. at 3 months about 1 hr and 15 minutes max, by 4 months 1.5 hrs apart. I say go potty as they are going, I note their body language just before they go for help in the house. I praise them immediately and give a treat then water and some play time to going potty is not a signal to them they will go back inside immediately. I do keep the leash attached to my waist and this also helps teach the pup to bond with people. Using this method also teaches the pup as it grows to go potty on cue. Remember to make potty spots good varieties so on a trip the pup/dog will not insist on a grass lawn or a graveled spot to relieve themselves. At night our 5 dogs go out and I say go potty and they do. Then each comes in individually for a short tug play and a treat then to bed in their crates which they love.