What is the best way for intermediate arduino users to raise our skill level?

Learning by doing works well as Nick observes. Indeed, you can augment it with education, but it's where the rubber meets the road.

Doing some C/C++ tutorials and reading a book or two on the subject, preferably without an Arduino focus, would likely help.

Read something on coding or software engineering - I like Steve McConnell's 'Code Complete'.

After reading the above, go back to some of your earlier projects and examine your code. Hopefully, what you see will make you cringe. As an exercise, see if you can improve it, no need to actually deploy it of course.

In my opinion though, since most arduino projects have to be pretty small because of memory limitations, you can get away with a multitude of sins regarding software methodology. Using it makes things easier and clearer, but you can still just as well hack stuff together and get it to work. So maybe don't worry so much about the big picture - learn some better techniques bottom up and add them to your projects as you go - sneak up on superior coding.

It may be worth posting some of your existing code for review; just be sure you're ready for some hard truths, perhaps expressed unsympathetically :wink: