> Never make a user type something more than once... each time data is entered is another opportunity for error.
To the greatest extent possible, don't let users type anything. First, let them validate your suggested inputs (if you can discern it or there are sane defaults). Next, let them select options (with your control over invariants, no way to select invalid scenarios). And only after the previous, let them type something in. Ideally separated into multiple fields so that you don't have to parse (screw you office time system that requires me to type 'hh:mm am/pm' precisely, an extra space or missing am/pm throws it off, even though it uses 24h time, so damn stupid).