The 49ers open training camp next week in Santa Clara with a number of competitions going on simultaneously on both sides of the ball.
Coach Kyle Shanahan did not hire an offensive coordinator. He will assume the role of running the offense, as he atempts to remake the 49ers' offense to his specifications.
Brian Hoyer is set at quarterback. Joe Staley will line up at left tackle. Kyle Juszcyzk was signed as the highest-priced fullback in the NFL, and the starting wide receivers figure to be Pierre Garçon and Marquise Goodwin.
After that, things are a lot less certain.
Here is a look at the 49ers’ top four training camp battles on offense...
The tackle positions appear straight-forward with Staley and Trent Brown – though Brown will have to hold off Garry Gilliam to retain his starting job.
But there are a lot of options for the 49ers at the three interior positions. Zane Beadles started all 16 games last season at three different positions. He enters camp as the front-runner to start at left guard.
Jeremy Zuttah, who was added to the Pro Bowl roster at center last season, came to the 49ers in an offseason trade with the Baltimore Ravens. Zuttah and Daniel Kilgore will compete for the starting job. Tim Barnes, who started 32 games the past two seasons with the Los Angeles Rams, is in the mix, too.
If Zuttah is not the starting center, he can transition to either guard position to compete with Beadles on the left side or, more likely, the right side.
Joshua Garnett, whom former 49ers general manager Trent Baalke traded up to select in the first round of the 2016 draft, will have to show dramatic improvement over his rookie season to return as the starter at right guard.
Brandon Fusco, who spent his first six NFL seasons with the Minnesota Vikings, started 16 games at left guard in 2015 and 14 games last season at right guard.
It is within the realm of possibility the 49ers could have a complete overhaul at tight end, as none of the five players who finished the season with the team is a lock to win a roster spot.
The 49ers selected George Kittle in the fifth round. He showed a lot of promise with the best showing of any tight end during the team’s offseason program. The 49ers this offseason also added blocking tight end Logan Paulsen, who has experience in Kyle Shanahan’s scheme, and undrafted rookie pass-catcher Cole Hikutini.
Vance McDonald was the subject of trade talks during the draft – just months after signing a contract extension with $9.1 million in guaranteed money. Garrett Celek and Blake Bell also face stiff competition in order to be back on the 53-man roster.
Carlos Hyde is entering the final year of his original four-year contract, and he has competition for the first time since Frank Gore’s exit cleared the way for him to be the featured back.
Shanahan and running backs coach Bobby Turner handpicked former Utah running back Joe Williams for their scheme. Williams got off to a slow start after joining the offseason program, but he eventually put himself into a position to compete for a significant role in training camp.
Veteran additions Tim Hightower and Kapri Bibbs will be competing for roles in the backfield, as well. Undrafted rookie Matt Breida had an impressive offseason during the non-padded practices.
Jeremy Kerley was one of the few free agents from last year’s team that the 49ers had any interest in re-signing. Kerley was the best receiver on the team a year ago -- and it wasn’t even close. He caught 64 passes for 667 yards for the league's least-productive passing game.
The 49ers selected Trent Taylor in the fifth round, and he made an immediate impact during the offseason program after catching 136 passes for 1,803 yards and 12 touchdowns as a senior at Louisiana Tech.
A year ago, Bruce Ellington was the 49ers’ best receiver during training camp before his season came to an abrupt end with a torn hamstring in an exhibition game. The onus is on Ellington to remain healthy and prove himself to the new coaching staff.