It's hard to give advice with no idea at all of the scope of what you want to add.
Say you want to add a "decimal mode" that make the normal add and subtract instructions work in BCD instead of binary. You'd want a SED instruction and a CLD instruction. Pretty simple ... any 1 bit hole anywhere in the instruction set will do ... some fixed 31 bit combination that says it's your extension, and then 1 bit to say whether is SED or CLD.
On the other hand, if you want to add, say, something like "count leading zeroes", with a source register and a destination register then you'll need a bit bigger hole ... but still just 10 bits to specify the registers (hopefully in the standard places) and some fixed combination of the other 22 bits that says "this ia a CLZ". Or, if you don't care if the source and destination are always a0 (convenient for a pseudo-function) then you only need to find one single 32 bit opcode -- and it's an even smaller extension (in opcode space) than the SED/CLD instead of taking up 1024 opcodes.
If you want a whole new data type, a new register file, special load/store instructions, special operations on your private register file ... you're going to want a whole lot more opcode space! Maybe in this case you'd steal the opcodes (semi-)reserved for 128 bit integer or FP and just say that your extension will only ever work with RV32 or RV64 CPUs.
If you need *really* a lot of opcode space then you can say that your extension is incompatible with the C standard extension and then you can use all the 3,221,225,472 opcodes ending in 00, 01, or 10! No problem ... just configure your copy of gcc to never generate 16 bit instructions. Everything will work fine. Your code will be a little bigger, but if you *really* need that opcode space you can use it.
So many possibilities. And we didn't even talk about 48 bit or 64 bit or bigger opcodes.