What principles do you follow to make interfaces feel discoverable without relying on tutorials?
I stick closely to strong conventions. If you respect platform norms and familiar UX patterns, people can naturally rely on their existing knowledge to navigate your app.
Think of something simple, like shower faucets. You should know how to use them. Yet, if you have traveled enough, you have probably encountered at least one hotel faucet you could not figure out. Not because you are stupid, but because it is not only different from every other faucet you have used, it is different from almost anything else in your life. The same applies to design. When you use patterns your audience already recognizes, they already know how to interact with them.
Still, any moderately complex app eventually runs into constraints or overwhelming choices that need simplifying. That is when progressive disclosure is really helpful. For instance, placing a "more" menu near primary actions maintains a clean UI while still making extra functionality easy to find. Design tools do this all the time: bold, italic, and line-height are prominent, while advanced options like kerning or superscript live behind a nearby "more" affordance.
Larry Wall, creator of Perl, famously said: "Easy things should be easy, hard things should be possible." I take that to mean that some features are inherently complex. For those cases, good documentation or tutorials are the last resort, but they are still perfectly acceptable.