Sitecore 9 Forms is easy to use and powerful feature. Frankly speaking, I think it's a game changer for Marketers and Developers. Marketing people love it because it's so much easier and more flexible than WFFM. From the development point of view, Sitecore 9 Forms save a lot of time, unless you have to implement a lot of customizations. Since Forms come with Sitecore 9 out-of-the-box, I suppose this is the end of the era of old-school forms development for Sitecore. Nevertheless, I've found out that transferring Forms between environments using TDS could be a challenge and I want to share a few thoughts about it.
By default, when you save the Form, it will be created under the /sitecore/Forms item.
The item, which represents your form will have an appropriate hierarchy of elements you've dragged and dropped.
For the sake of simplicity, let's assume you are working on the default bootstrap form. So you have a Page Element, then a couple of Section elements nested in each other, the Single-Line Text elements and so on. So after you'll save your awesome form, it'll look something like this:
Fantastic, right? Sitecore is doing all the job for you. But if you'd try to sync your forms with TDS, you'll fail because of the duplicated names(items in TDS terminology).
Fortunately, Sitecore got us covered! Each Forms Component has mandatory "Field name" text field. By default, this field will be filled with the component name.
So all we need to do is to go through all our components on the form and give them significant names. After that your form will look like this:
Lovely, this is definitely more TDS friendly. Now you can sync it with your project without any problems.