"I broke his serve early in both sets and that gave me control of the match," said Del Potro. "It was an easier match than I expected."
Federer had an altogether knottier route to the final. He had to come from a set down to beat the unseeded Croatian Borna Coric 5-7 6-4 6-4.
The world number 49 had the Swiss on the ropes after taking the first set and going a break up in the second to lead 4-2. But the 36-year-old top seed clawed his way back to level the match.
However Federer coughed up his service again in the decider to trail 3-4. But he won 11 of the final 12 points to snatch victory from the 21-year-old and extend his 2018 winning streak to 17 matches.
"Margins are slim at the top of the game," said Federer. "And I have been there so many times. You just hope to take the right decisions along the way and then it ends up falling your way.
"But for that you need to have a very positive mindset. You need to be match-tough. You need to be confident and have experience. I think I have a bit of all of that right now."
It is Federer’s best calendar year start since 2006 when he opened with 16 wins. The surge has furnished him with the Australian Open – his 20th Grand Slam trophy – and the Rotterdam indoor where he also reclaimed the world number one spot.
"I got a little bit lucky against Borna,” Federer added. “I hung tough and put a lot of effort into it.”
Federer will be aiming for a record sixth Indian Wells title and the 97th of his career. Del Potro is seeking a second consecutive tournament triumph after claiming the Mexican Open in Acapulco earlier this month.
Federer said he expected another attritional match with Del Potro who has won six of their 24 encounters most notably in the US Open final in 2009.
"We have had a lot of close matches. Big matches, close matches," said Federer. “Just three-setters, five-setters the whole way."
Del Potro conceded he would be the underdog but added: “I have beaten him and I know I can repeat that. But it is not easy."