Get the stupidest thing done and finished. I started my compiler with waay too much ambition. I planned out a Hindley Milner type system but with row polymorphism. I planned out the entire syntax, records and all. But I didn't actually have anything done. I spent so much time trying to think about how to implement x feature or y feature because I thought I should get it all done at once. It took me maybe a year to figure out that I should just get the stupidest thing working: arithmetic from parsing to code gen. I had resisted this because frankly there's a million tutorials online about making a calculator compiler. But who cares? It doesn't have to be original. It needs to be done.
Also only learn one new thing at a time. Don't make a side project where you're learning to write a compiler in a language that's new to you. That's two new topics and therefore infinitely harder.