Don't keep the user waiting. If a CGI is going to take a long time to process, split the CGI into two parts. One part that grabs the data from the form and returns a response to the user and a second part that processes that data at a later time. Agents are a perfect solution for the second part of this task. Use form elements appropriately.
Nothing is more frustrating than a confusing form.
Be thoughtful in your design. Don't use radiobuttons when you want the user to have more than one choice. Don't use checkboxes when the user is only suppose to choose one. Keep things neat. Tables help with form layout, use them.