Personally, I like a bit of a blended model:
- Start with a large libray of effects
- Add a large library of and prequisites to those effects ("prequisite" isn't a great term here - maybe "side effect" is better, or even "means").
- Create base library of spells that use these effects and prequisites
- Let modders add spells as well, using these effects and prequisite
In Dom3, there's a cool spell that sends a flock of ravens to a battlefield, destroys corpses, and recovers Death Gems (a resource). In the model above, the "prequisite" is the flock of ravens; there are two effects: corpse destruction, and death gem creation.
Getting a list of #1 is fairly straightforward, getting a list of #2 is where imagination (and probably more coding) come into play. Dom3 does a great job coming up with ideas for #2, though of course the nature of the game engine is such that they don't have to display every effect: they just describe them.