Well...
Many add-ons will fail simply because their creators are relatively new to scripting and at the same time have "an awesome great idea that will make <popular add-on> look like <derogatory term>". The problem is that they then start on a very ambitious project that would take even an experienced scripter a long time to get right. Naturally, they just can't get things to work the way they want it to, so they start to use more hackish(as in poor quality, quickly implemented, and barely gets the job done, not breaking security) solutions to issues they have, and sloppily deciding that what they have is close enough. After a few more days, involving desperate copy-paste from successful mods and if they are lucky, maybe one or two bugs fixed, they decide that they are done, and release it.
After a few of those, the smarter ones will start to pick up on tips, proper techniques, and most importantly, they will start to notice what their own abilities are, and some will even realize when their ideas are too ambitious. After that, it is just practise, study, research, and time, before the best of them become actually decent.
One important skill to learn if you want to succeed, is spelling/grammar. If you can spell correctly in-game, you will get more respect. Combine that with being polite, and the current good scripters will be far more likely to help you get better.
Another important thing to try is looking at current add-ons, and trying to understand how they work. Also, trying little snippets in the console. If you don't understand how vectorScale() works, try echo(vectorScale(...)); a few times with different arguments until you do understand it. Once you find something new and figure out how it works, use it! Come up with some simple idea for an add-on that will give you a chance t o use your new knowledge. It doesn't have to be some fancy new gamemode, nor even something that you release some day, it just needs to give you a chance to try a new bit of code yourself.
A good, consistant, formatting style is critical to success. Even though everyone has their own(One space indents! No, two! Five! Four! Tabs, not spaces! Three spaces!, and do you put the { on the same line as the if(), or the next? And if it is on the next, is it indented any more than the if()? What about breaking up _very_ long statements? Do you even bother? Split on the commas? Split it as if the ()s were {}s and the ,s ;s? Maybe break it up into various statements and use the results of those? Do you ever use ?:s?,......), keeping yours consistant wwithin your own code will help you read it.
Once someone finally reaches some unknown point, they will be making good add-ons. You, the person reading this, could become on of those people, if only you tried(or maybe you have, and succeeded, and in that case, well done!).