Wait 6 months or 1 year, and you've given them time to gather sufficient experience for motivating a more mindful way of working.
Wait 3 years or more, and you've just taught them bad habits.
I'm tired of interviewing candidates who were supposedly trained extensively in programming, asking them "how do you approach making quality software?" and hearing the usual "oh, I indent my code and write a lot of comments" as an answer.
I've been to a "regular" university and I'm pretty sure I said some variant of "I write lots of comments" w/r/t my code maintenance approach in a very early interview. I could have written any algorithm you gave me -- but I had no idea what maintaining an application with users entailed.
My experience is you can't really "teach" writing maintainable code beyond just having people fix bugs for 6 months in a million-line codebase that's reasonably well written.
You could write 100% functional code that handles every edge case you could think of, and you could still get a B- on an exam for not using the 'Design Recipe.' While frustrating, the students do emerge as 'junior SWEs' with a grasp on how to design organized, efficient, and complex programs themselves.
I believe this is a good method for beginners. A beginner doesn't need to think much because he/she doesn't have the material/experience for that anyway, but instead just practice as much as possible. Later, he/she will reflects on what he/she think he knows and get a more structured / professional work.