what is going on everybody Nick here and in this video I'm going to talk a little bit about my preferred way to build scenarios in make. com it's called iterative testing and it's something that in my many years of experience on this platform I rarely see anybody do so I'm going to teach you how to do it I'm going to teach you how to save a ton of time and I'm also going to teach you how to um essentially this a system you can use to train any Junior Engineers that you want in your team to be able to not only get up and running quicker but for their flows and systems to be a lot more maintainable as as well so if you guys are wondering why I look kind of like a K-pop Star right now it's just because I don't have my mic stand so I'm just going to be holding this one with one hand and we're going to be doing some work with my other as always this is my process it's not the only way that you can do this it's just what I prefer and in the case of iterative testing specifically it is easily the most powerful like uh building method that I have found for make. com and I think when a letot you guys see it it's just going to click that said I'm sure there are other ways that you can technically build scenarios so take whatever makes sense to you out of this video and then just discard whatever is irrelevant and last but not least uh last but not least no gatekeeping I'm just going to show you everything and then even give you guys whole systems that you guys can sell all right so um when most people think of the word test I find personally they have a very specific definition especially in make.
com when people think test they usually think it's a large integrative endtoend test that runs every single module and every single scenario in your flow essentially if this is our scenario over here and this is just an example that I whipped up for my community where I show people how to build not only scenarios but actually like full automation businesses from start to finish this is just something I was doing for a CRM test and clickup but you know if you're thinking about an endtoend test the scenario this essentially involves starting at the very beginning all the way on the left hand side here with this watch responses module and then proceeding sort of logically from left to right ending with this um clickup module and intent testing is important and you should most definitely do it before you consider an automation done you can save yourself a ton of development time if you use my iterative testing method instead not only does iterative testing save you tons of time and money um by confirming that your expectations match what's really going on and I'm going to get into that in a second but you'll probably save several hours every project by doing this not to mention a ton of gray hairs because my biggest issue when I first started out in make. com um and you know just automations more General and hell even like software development was I wouldn't understand where my bugs were taking place and then I wouldn't understand why my bugs were taking place and iterative testing um solves both of these problems so this is going to be a quick and easy video we're not going to spend too much time on this um I find that the benefits of iterative testing become immediately clear but essentially if you iteratively test as you build you're never going to be spending hours working on silly little bugs you're never really going to have to worry about tiny things like you guys missing a curly brace or you guys not including you know the right kind of quote or Dash you're never really going to have a what the hell is going on and why isn't this working moment because if something doesn't work you'll know exactly where in your scenario from start to finish the logic is failing or things are breaking ultimately your flows will break a lot less often meaning when they do you'll be able to fix them faster and all of this is going to collaborate and essentially help you build much better scenarios in a much shorter amount of time so uh one of the reasons why I think people like watching me build these make. com flows so much is just because I'll jump around pretty fast and I'll do just a bunch of really quick little hacks here or there and I'm going to be developing a much longer video on this in the future but for the purposes of iterative testing if you really want to be able to do this quickly um you're going to need to to understand if few of these and so what I have here are I have four quick little workflow building hacks that I'm going to go through um and I'll essentially just show you how you can uh use these to iteratively test and then afterwards we're actually going to go through and then iteratively test and build that same scenario that we saw right over here including like on a module by module basis and then we're actually going to just end to end test the whole thing as well so I'm just going to show you exactly what my actual testing process looks like uh in make.
com and I think it's going to help um you know a lot of you guys not only build faster but just build more maintainable flows that that last okay so the very first hack here is to separate the trigger module from the list module now if you guys have seen my previous videos you'll know that I do this sort of thing quite a bit but what does this really mean well essentially in make. com you typically have triggers and actions right the trigger is a lot of the time it's like a web hook or something if I rightclick this type form responses module let me just get it a full screen so we can actually see what's going on I right click this type form watch responses module essentially what it's doing is it's waiting for me to fill out a form or somebody else to fill out a type form and the type form in question is this one right here this is just a quick little proposal generator form that I put together for um day eight of my 14-day agency course and in this I'll go through and I'll ask a bunch of questions like hey who's the prospect Give me a oneline summary of their business what's the problem they're suffering from what's the solution you pitch what are the deliverables how long will this take to deliver and how much will you price and essentially we fill out this form which I'm going to fill out right now just um sort of as a test I'm going to do this with one hand because the other hand is going to hold my mic like a K-pop Star we're just going to go ASDF unfortunately I cannot fill this out without typing in an email address kind of feel like I'm texting right now um we're g to type that in do couple of brief little summary pieces here okay so say that I'm filling this out now and I have my module here which is watching my responses I click the submit button this has now been caught right the issue with this though is obviously I just filled in a bunch of but the issue with this is let's say I wanted to test the scenario again I would have to go back to my form and every time that I wanted to test that scenario I would have to do that process which if you had a watch and timed it would probably be at least 15 or 20 seconds now what this uh design pattern here what this quick hack allows you to do is it allows you to store that response and then just pull from that response the one that I just filled in once every single time you test your scenario from here on out so instead of spending 15 seconds now all I'm really doing if you think about it so I'm just right clicking this pressing run module once and then voila I have basically the same data right over here as completely useless as it is and so in practice in order to do this what you really need to do is you need to um have a watch module and I'm using a type form here as an example but realistically you could use any sort of flow any sort of uh form soft sofware that you could possibly want uh you can't necessarily do this with Google forms you can do this with jot form you can do this with I think you can do this with paper forms and you can do this with a variety of like CRM um form based uh Solutions right like click up as a form solution embedded within it Monday has a form solution embedded within that sort of thing but essentially what you do is you will go to your desired form platform of choice and then you will connect a watch module or a trigger module and then you will add a sleep module between the watch between the trigger and I usually use 3 seconds or so and then immediately afterwards you will add a list like so and the value of doing it this way is well now when you catch the scenario or sorry when you catch the web hook response come in because really that's what this specific module is doing in the background you're then sleeping for a couple of seconds just to make sure the database is okay I find just in practi if you don't do this there's like a 20% chance that it runs so quickly it doesn't even have the time to add it to the database but anyway um you'll wait a few seconds and then you'll just grab the very first record uh immediately afterward which just ends up being the fir the first record okay the record that was just submitted and then if you want to test this in the future then all you have to do is sort of unlink this then drag the trigger to the beginning of the flow starting at your list responses module or basically starting at whatever module just grabs from your database or your data source and so this specific flow um you know should be pretty self-explanatory but basically what we're doing is we are U we're creating a proposal and then we're embedding it inside of clickup which is our customer relationship management platform and uh in order to test this we no longer have to go through all of the rig roll all the BS basically filling out the form I mean I just put in a bunch of fake data here because um you know I only had one hand but uh now we just click run once and then it goes through the rest of our scenario for us which is quite nice now I did just put a bunch of L's and J's in here so I doubt that it's going to proceed as I imagine that it would um if you know you filled it out with actual information but I think you guys get my point the second quick hack I actually showed in the previous quick hack which is that you can just right click any module and then press run this module only surprising but a lot of people don't know this and this is is easily one of the biggest timesavers um that you could use because instead of now testing the entire flow and waiting for your whole make. com scenar from start to finish to complete you can just rightclick and then you can just run the specific module that you want and then you can look at the input modules and then the outputs right and then you can compare those inputs and outputs you can just determine whether or not what you are doing is like the desired Behavior whether you're feeding that module in the desired input now this is the first time you're doing this a wa you'll notice is modules that have a bunch of data in it or uh sorry modules that have a bunch of variables in it when you right click and try to run it only um it'll actually pull out a module or a modal like this and it'll say what's the problem they're suffering from what are the deliverables how long will this take to deliver give me a on line sumary of their business these are all variables essentially that I was pulling from the type form well because I'm now right- clicking and running this module only I need to fill this in somehow so if you are running one of these modules you are going to have to fill it in with some test data but if you think about it that's kind of the whole point because you can simply enter that test data in every single time you run that specific module um just to determine whether that test data works for that module input or output and in practice I found this is particularly relevant with AI modules large language model uh modules stuff like anthropic Cloud stuff like gp4 that sort of deal I mean it looks like it actually went with my LK jlk and in this case it you know basically hallucinated a bunch of um but maybe you know that's our desired Behavior maybe that's something we're looking for maybe we're trying to test how it works on ljk LJ nonsense inputs right well now we can do that without also like wasting five operations for the entire scenario run and uh you know we can do it in a fraction of the time so collectively if you think about it I mean these two hacks alone just saved us I don't know 30 seconds every time we try to test the scenario and what I find in practice is that we usually test scenarios like 30 times at at least um before we before we deliver the project before we consider it done so 30 * 30 seconds right you're saving yourself at least 15 minutes just combining these two things if you're doing a templated sort of thing that normally would take you an hour well congrats you just got 25% more efficient so these are pretty entry-level hacks and most people that have watched my videos up until now will probably already instinctively understand them just because you've seen me do them a bunch but one thing that U most people haven't seen is this download input or output Json hack and this one's really cool basically you see this module here that we just completed for anthropic Claud well if you click on this little bubble obviously you get the input and then you get the output but if you go up here to this little download icon you can actually download the output bundles and if you click on this you'll see that no longer is this in uh make.
com variable format now this is all just in Json and you'll see there are a couple differences here from what we saw in the variable uh field for make. com and what we're seeing in the Json namely every time that there's a new line we now have a back sln and then before um every quote we now have this sort of like um slash it's sort of annoying but this is a very quick and easy way to basically get data in and then use it to um do something which I'll show you in a sec basically fill in the next uh variable for you so you don't have to run data heavy modules anymore what I mean by this is this is all just adjacent right so if you um take out all of the backs slash ends all of these extra new lines then if you remove all of these backs slashes that are before every quote well now you have functional Json essentially this is now Json that works and so you can just pop this into a parse Json module and then voila you now have um basically all the same data it's just now you have the same data without having to run the module if that makes sense the value here is that well sometimes every module that you run like the cthr a cloud module does cost you a little bit of money it also takes a fair amount of time and most important sometimes there rate limits involved like a video that I'm currently doing right now is on web scraping I've been asked to do a big web scraping tutorial and as part of this web scraping tutorial I'm scraping fivr you know the purpose is just to get a bunch of listings for instance so I'm just going to run this what this is doing is this is sending an HTTP call to a specific Fiverr um URL but check out the file size it's you know 1,523 3,184 characters and if I go to the data you'll see this is long as hell well a lot of big websites like this like fivr they have rate limits in place and they'll see if you call five or six times in a minute from like some make. com address which it's probably some it's not like a residential IP it's probably like a data warehouse IP or something and they might actually block you or ban you and so I mean do you really want to have to like do an HTTP request to Fiverr server to risk that every single time you test your scenario no you don't how much cooler would it be if you could just take the HTML that it just output like word for word well if I keep doing this it's going to take like five hours to get to the end of it because you can obviously see how big it is but how cool would it be if I could just copy all that move this over and then just use a set variable module instead if I could just paste all of that in you know voila now I could just use this as the input and I'll have saved myself um both one operation here but also the risk of getting rate limited which would substantially impact my ability to build out the rest of the automation so sort of a quick hack here um but it's it's one that I use quite often and then I mentioned that um adding API calls to variables is also important well if I were trying to build out this flow and I am going to build it out just in a moment here but if I were trying to build out this flow um you know instead of me doing an API call to type form or instead of me doing an API call to hand do or something like that I could just store the results of that call in a set variable module I mean like the anthropic Cloud one is probably the best example because um you know I don't want to have to call AI and spend some money every time I test but basically you could just you just copy the whole response here whether or not it's the the code or this this is a lot easier for now and then you could just feed it manually let's say into this parsejson module that didn't work one moment make dooming with one hand is sort of like drinking and driving should not I I do not recommend should be illegal uh okay great so now we have the Json in here right I just copy and pasted the output from the previous module well now if I just run this you'll see that it just pars it all right so now I can just start my scenario here instead of going all the way back here realistically you I could just like begin the rest of the flow from here which is going to be the pandadoc and then click up Fields so yeah making gratuitous use of set and get variables is also quite valuable and it's something that I I love doing and I do pretty often if you've ever downloaded one of my Blueprints and you've wondered hey what the hell why are there all these purple variables in here we're just consuming all these extra Ops the point is that um the op consumption that I spend during the testing I will save during like not having to run the whole scenario a million billion times because I don't know what's going on and not only is it substantially less effort it's also a lot less frustrating which is quite valuable but all of this is sort of theory why don't we actually look at how you iteratively test in practice what I'm going to do here is I'm going to go through um my three top iterative testing practices and I'm going to go through and show you guys what that looks like in like a real scenario so this scenario here the one that I've been sort of playing around with just as an example essentially what this does is we'll fill out that type form that I mentioned earlier we'll feed in the results of that type form so like the company information what the company does you know who the prospect is whatever to Ai and then we'll have ai generate the output and the output is in Json JavaScript object notation just like this and you'll see that the values here are variables and I use these variables here to fill in a proposal in a pandadoc which is a proposal generator platform and then this allows me to generate like very nice looking pretty sexy proposals if I'm honest very quickly now what I do with these proposals is I will simply add them to a CRM called um my sales CRM here the value there is I just get to generate very Nic looking proposals in a very short amount of time which is obviously nice um and then we also just get to keep them all organized by putting them inside of pandadoc um which is which is valuable and I believe I probably deleted the pandadoc in question um which is why it's not being found uh but I'll show you guys the template in a second just that anybody that's watching this without having any sort of background will understand um what's going on here so we'll fill in the title we'll fill in the first name we'll fill in the last name we'll fill in the problem title you know we'll fill in this problem text it's basically just a base proposal template that we enrich using data from um you know this this proposal generator flow from uh from anthropic clad so if art actually try and build this out in practice with one hand uh what would I actually do well um i' employ these three best practices the first is that every step along the way I would run each module individually before I add more so I'd think to myself okay listen what's the goal of the scenario the goal of this scenario is to watch responses come in catch those responses use that to um create um use the the bullet points and the response to prompt Ai and have ai generate me a big list of problems and solution statements big list of variables basically and then I use those variables to fill in a pandadoc and then edit a task of custom fields at every step along the way what I would do is I would iteratively test every individual module so for instance I would I wouldn't wait until the very end actually do it from the very beginning so this proposal generator for workf Lo for instance I would actually just right click this I'd run once and then I'd go through and then I'd fill out this scenario or sorry this um this type form so I would do that and for the purpose of this demonstration I'm not actually going to go through and do that but then I would you know let's say I'm building this out module by module which is not actually the best way to do it as I'll explain in a moment I have a sleep module I'd actually run this and I just check to see does this sleep for 3 seconds it's almost like a sanity check right I put in a delay of three obviously it's going to sleep for 3 seconds but if you just iteratively test at every point along your way um essentially if there's there's an error you'll know that the error is between the previous module and the current module you're not going to put all the logic down press go and then wonder what the hell is going on and why it's not working so if I had a list responses module well now I'm going to run a list responses module right and in this case by running it I got to see that the limit was off I set the limit at 20 really should have been one now I run it again awesome input and output looks exactly what like what I'm expecting same thing with anthropic Cloud obviously I'm just copying and pasting these modules and this instance but um I will I will run through them one by one at every point just to make sure that everything is as intended essentially I'm getting the data that I thought that I would be getting so yeah that's pretty valuable I would say just right off the bat I'm going to leave the rest of these available just for the purposes of you know um sort of like as an exercise for the viewer but the point here is this just takes less than a second and it inoculates you against being lost later it also inoculates you about being um from being wrong the second way you iteratively test is you start at the end you work your way to the beginning and the way that you do this is pretty interesting um basically all you do is you ask yourself hey what is the purpose of my scenario it's a very simple question and you usually warrant a pretty simple answer in the case of this flow the purpose of the scenario is to update um a clickup record with a proposal and and if you think about it everything starts or everything um that we ask for at the end we could then just reverse engineer so if we want to update a clickup record the natural with a proposal the natural question becomes okay what makes this proposal and then after you create a proposal it's like okay well where did we get the data for that proposal that's probably Ai and then it's like okay where did we get the data for that AI prompt well it was a form okay well where did we get the data from that form then you go and make the form so if you wanted to build using this approach and this is really the one that I I usually do I'll just iteratively test working backwards using this approach is I sort of start at the end right and then I say hm okay so what was the goal of this well the goal of this was to update a click up record so what am I going to need to do I'm going to need to and in this case I know that the specific module I need is edit a task with custom Fields so I will start at the end right and then I will um go through and I'm going to do my my Conn ction and everything and I'm going to do this live um just for this one module so I can show you what that looks like so I'll go through and I'll do all the settings I'll select all the spaces the workspaces the folders I believe uh probably looking for the sales list here and then from here on out um this is this is essentially what I want because I started at the end now I know what variables I need like for instance big question is like hm okay well like what clickup record am I going to update I it's asking me for a task ID so now I know earlier in the scenario I'm going to have to supply a task ID and so by doing it back to front as opposed to front to back or end to start as opposed to start to end um you then intuitively understand what data you require at the beginning part of the scenario that you might not have currently thought about the value in doing this too is a lot of modules have requirements and so do you notice how these are bolded titles whereas these are non-bolded titles well if something's a bolded title it's required if I were to try and click okay here look at what's going to happen it's going to say the value must not be empty because it's bolded and so in this way I basically ensure no values are ever empty I'm never wondering where the hell is my data what data do I need right and I'm just always able to essentially build now what I would personally do in this instance you know I don't currently have my task ID what I do is i' I'd ask I'd add my task ID here then I'd scroll down and i' try and hardcode the information that I need I'd hardcode the pandadoc um URL in this case so I'd go and I generate maybe a pandadoc or something I don't know uh in this case I'm just going to do an example URL right app.
panded do. com we should probably add an s in there but this is the whole the whole purpose of my flow is basically to provide a pandadoc URL right and then I think in my case I also want to update the status or something like that to proposal sent and now that I have this now I'm going to do my iterative testing now I'm going to right click I'm going to run this module only basically what I'm going to do is I'm just going to get I'm just going to like look to see in my CRM hey did what I just tried to do work right and the answer to that question is yes what I tried to do uh worked I updated the um task called Nix surth basically to proposal sent right over here so that's the value there the third way to do it is once you're building right so assuming that we've done iterative testing this whole time um basically run an end to-end test to cap it off and if you all are unfamiliar with what an end to end test is it's kind of what it sounds like it's an end to end it's from left to right you basically run through the entire scenario once but keep in mind that the vast majority of people when they build out make. com flows they'll run through the entire scenario every single time that they try and build something and so you will only ever have to do this a single time at the very end maybe once or twice who knows if it doesn't work exactly like you were intending it to but because you only had to do it once and the other person that's building the scenario would have had to do it 50 times you say 50 times however much time you it takes to run through a scenario and what you'll find is when you're developing more and more complex make.