TL;DR Say no to projects, let mentors work on non-critical projects if you can, and evaluate if all of your projects are feasible right now.
From my experience in programming both as student and mentor on a smaller team (we have 8 total students this year, 12 last year, and 6 in 2020, programmers being mostly novices and seniors), I’ve found a few things that help. They’re more or less the same as others have said, but they’re worth repeating.
First, Absolutely drop projects if you can’t do them all. Your team needs to sit down and talk about what they want done. Obviously, anything pertaining to game-relevant robot code should probably be the highest priority, but beyond that, what do they want done the most? And “we want all of it” is not an acceptable answer (as much as they’ll try) - there needs to be a concrete priority list by the end of it. For example, if there is a reasonable alternative to one of your projects that already exists, don’t reinvent the wheel! Those projects should be low-priority.
Second, Offload work if you can. My view on FIRST is that the only thing that needs to be exclusively student-led is work on the actual competition robot. If students can do other projects more or less independently, fantastic! But mentors stepping in to take some of the work is perfectly reasonable. For example, I offered to my students last year before competition that if they could come up with an interface, even just a wireframe, I would happily build a scouting website for them. I did this because none of them had any experience with that kind of programming, and I couldn’t seriously expect that to be exclusively their project.
Third, (the extra point that is implied by the other two) A critical skill for programmers is self-awareness. It’s valuable to learn new things, but starting on an important project without any knowledge of how to do it is often doable, but tricky at best, and the quality will rarely be good (speaking from real-life work experience/regrets here). Have your programmers take a look at their own skills, and honestly evaluate themselves as to whether or not they’re capable of taking on the project right now (this analysis requires a certain vulnerability, which I recognize can be hard).
For your example of a scouting app again, probably the easiest way to do it is to build a small website that’s not much more than a simple interface for a DB backend, but is that something your programmers have done before? What about building an actual phone app (as inferred from the word “app” in OP)? Largely the same process, but more confined to a certain framework. Do they have experience with that? Do they want to rewrite it for every game? If not, do they have an idea of how they would make it dynamic for every year? If the answer to any of these questions is “no” or “not really”, then maybe that’s not a project that they should be taking on right now. There’s nothing wrong with not being able to do everything, and it’s important as a programmer to know where your strengths and weaknesses lie. In the meantime, they can learn new skills that they want, instead of what they need for the team. Don’t just let the mechanical teams (who tend to not have a well-calibrated gauge for software complexity), or the idea of “that sounds cool” drive your work load. An informed “This is not reasonable” is a valid response to a project pitch.
Finally, maybe recruit one of the mechanical students to learn programming. Some are quite good at it and interested, they’ve just never given it a fair shake, or they had a bad experience. with 15 students, it’s entirely reasonable to have 3 of them be programmers.