Reach for Webform (not code)!
We've written a huge number of forms over the years (mainly using PHP or Symfony) and can pretty much produce most customisable forms that are required. But using Webform within Drupal has been a real game-changer for us. While we'll still create custom code for some specific form tasks, I'd say that Webform answers at least 50% of the typical use cases that face us on a daily basis.
The voucher form we've just produced is a case in point. While we wanted to add some quite specific additions for back-office use with the campaign, the core of the form is built with just the Webform toolset. We make heavy use of tokens to generate a number of reserved codes and so no programming is required to do this. The reports out of the box with Webform are good enough for initial metrics reviews by our clients - all we need to do is set up permissions and team members can log in and get the data they need. There was even a last minute change to the form layout once the site had been launched but once again with everything controlled by Webform, layout changes were incredibly easy to put through. In short, this module once saved us many hours of work, and our client was able to benefit from reduced costs and a superquick turnaround.
To be clear - Webform won't answer all your needs and we've recently developed a number of Drupal forms on a much larger site using custom code alone. You might also want to check out Entity Forms and specific task-based form modules such as Entity Forms Registration too (I plan to follow up this blog with a short example of a set of forms we produced recently using that Registration module). That said, for many simple projects, especially where you might want to extend form building functionality to your clients, Webform is a great first port of call.