Well, just sharing my experience as one whom messed with Unity (or C#) for a fair bit:
- I tend to use List more than arrays, they are very similar. I do think some of the beginner mistakes I made are usually due not keeping track of them (like initializing them or adding and removing of stuff), but errors logs will help you out.
some read on choosing collection type: http://wiki.unity3d.com/index.php/Choosing_the_rig...
- [SerializeField] (for private lists/arrays) / making list public (the former is a better approach imo) can help you keep track of your list in your inspector, so you can quickly refer to its contents during debugging
- Pretty much everything else comes with experience. Do I need a class to store stuff or can a list of variables do the same trick? Planning out what your script does and needs on paper helps a bunch!
Considering your art style for the game. One approach I would try to emphasize on is the immediate feedback that comes along with the players choices (e.g. maybe a lower pitch SFX during speech to indicate hostility, colored font etc). Just my 2 cents though.
Hope it helped! :>