Highly specific, but in my operating systems course, we wrote a shell in C, it was very fun. I plan to write it again, but in Rust (mostly out of fun), extend it, make it my daily driver.
Regarding providing hints, my university does this actually. The automated testing software we use (in house built, actually) allows the lecturer / TA team to define hints in case that test case fails.
Providing hints is a bit tricky, however. Often times, students fail the test case for unexpected reasons, and our hints actually mislead them. I've had students come to me (as a TA) saying that the test case is wrong because they take into account the hint.
Naturally, we could just give better test cases / give a broad disclaimer, which we try to. We do the latter, but the former is tricky, especially when we are trying to come up with novel problems.
I've found planning ahead to work, to great success. Almost ridiculously so. It's come to the point where I don't really need my usual distraction blockers.
I've found:
1. I can fit a lot of things into my day, than I assumed.
2. I often overestimate how long things take, on top of that.
Point 2 is particularly interesting, since I know if I just bang out my tasks, I'll keep find "free time" that I over-planned for. By the end of the day, I get a couple free hours to do whatever I want, and it's lovely.
I augment this slightly by using Typora. It's nice for writing inline and fenced math blocks (with LaTeX), which is pretty invaluable for my maths subjects, I've found.
It's nice since it renders the markdown while you write it,
which I kinda need when writing LaTeX.
It's an offline tool, but I'm pretty much always near my laptop, so that's not much of a big deal for me. Tbh, having it offline was kinda a bonus for me.
No Vim support though, which is a bit frustrating.