I wrote something about this here. Using programs to help is a great approach, but ultimately the process fits inline with a writer/editor approach. As @vinit was saying, don’t get too wrapped up in the content/dialogue in the beginning as it will change a lot as you design a bot. Instead put something in that explains the need of that part of the conversation and move on.
I always approach any build or piece of writing from the project editing standpoint, which breaks down into four layers: project, global, local, and surface. And the process flows in that order, from the top to the bottom. I can’t tell you how many times I’ve watched projects stall out and either get abandoned or slog through the mud towards any progress. Why, you might ask? Because people in the project start arguing about the place of a comma or the correct word to use in this instance without fully mapping out the design and direction they want the project to go in the first place. Leave the hyper-focused, small stuff for the end.
I was recently working on a multiple API integration bot, and each gambit that interacted with the user had all but two words like: “enter email”, “check submission”, etc. Once I had worked out all the kinks, those were rewritten into “Welcome to our online submission system! Please enter your first name.” and so on. I didn’t allow the bot conversation to grab my focus until I had clearly laid out the organization of my gambits and the overall “flow” of the conversation because I created and erased numerous gambits while I was designing the framework. Imagine if I had taken the time to write out a clean message in each gambit only to erase it our totally scrap the text because the overall bot went in another direction?
Also as Vinit said, using the dashboard to chart out your bot is very effective as well. I organize my gambits in a flow chart manner in each of my bots. This helps me quickly find areas in larger bots and keep track of the overall structure.