{"course":{"slug":"agents-and-automation","title":"Agents and Automation","url":"https://addaly.com/learn/agents-and-automation","level":"intermediate","track":"build"},"lesson":{"slug":"choosing-code-or-no-code","title":"n8n, Zapier, Make, or a file of Python","url":"https://addaly.com/learn/agents-and-automation/choosing-code-or-no-code","position":9,"of":72,"minutes":8,"answer":"Visual tools win on connectors and time to first run; code wins the moment you need a loop with a condition, a code review, or a rollback.","keyIdea":"Visual tools win on connectors and time to first run; code wins the moment you need a loop with a condition, a code review, or a rollback."},"body":{"format":"markdown","text":"## What the visual tools give you\n\nIt is fashionable among engineers to sneer at Zapier. Do not. What these tools sell is not drag-and-drop; it is **several hundred integrations where somebody else has already solved OAuth**.\n\nGetting a new row in Google Sheets into a Slack channel takes about four minutes in Make. Writing it yourself means registering an app, implementing an OAuth flow, storing and refreshing tokens, handling revocation, and reading two API references. That is a day, and it is a day of work that produces nothing anybody wanted.\n\nIf the automation is mostly moving data between services other people run, the visual tool is not the amateur choice. It is the correct one.\n\n## Read the meter before you design the flow\n\nThe pricing model shapes the design, so learn it first.\n\n- **Zapier** charges per task, where a task is roughly one step doing one thing.\n- **Make** charges per operation, with a similar meaning.\n\nA twelve-step flow run a thousand times a month is twelve thousand billable units, not one thousand. And a loop over fifty rows is fifty operations per run, not one. Teams routinely design an elegant flow and then discover it costs more than the salary of the person it saved.\n\nThis is not a trap so much as a fact to design around: fewer, fatter steps, and push loops into a single call to something you wrote.\n\n## Where they hit a wall, and why\n\nFour walls, each with a mechanism rather than a vibe:\n\n- **Loops with conditions.** Every serious tool has iteration now, but early exit, nested conditions and accumulating state are painful, because a canvas has no variables in the way a language does. You end up building a program in a diagram.\n- **Version control.** The flow is stored as a JSON blob. You can export it to git; you cannot meaningfully review the diff, because node ids and coordinates churn on every save. So code review and rollback (the two things that make a change safe) do not really work.\n- **Testing.** There is no unit test. You test by running it, usually against live data, usually in production.\n- **Local development.** Some platforms have it, most do not, so \"try something\" and \"change the live system\" become the same action.\n\n## The hybrid that usually wins\n\nUse the visual tool as trigger and glue, and put the part with real logic behind a single HTTP call to a function you wrote.\n\nThe tool handles the Gmail connection, the Slack post and the schedule. Your function receives a JSON payload and does the branching, the retries, the validation and the model call. The connectors stay free; the logic lives in git where it can be reviewed, tested and rolled back.\n\nThis is the shape most durable small automations end up in, and almost nobody starts there.\n\n## The free path\n\nEvery paid tool above has a free equivalent you can run yourself:\n\n- **n8n**, self-hosted with one Docker command, for the same visual model.\n- **Node-RED**, older, extremely stable, strong for event and device work.\n- **Windmill**, if what you want is scripts with a UI over them.\n- **Apache Airflow** or **Dagster**, if what you actually have is a scheduled data pipeline with dependencies.\n- **cron plus a Python file**, which remains undefeated for a single job.\n\nLearn the names of the paid ones because job adverts name them. Run the free ones because a small server costs less per month than one Zapier plan.\n\n## Three questions to decide\n\n1. Does it need a loop with a condition and an early exit?\n2. Does anybody need to review a change before it goes live?\n3. Does it touch money, or send messages to customers?\n\nOne yes: either shape works. Two or more: write code."},"check":{"question":"A team builds a 14-step Make scenario that reconciles payments and, for each run, loops over roughly 60 transactions. It runs hourly. Which consideration should most change their design before launch?","options":[{"text":"Visual tools cannot make arbitrary HTTP calls, so the payment API is out of reach.","correct":false,"tempting":"False in every mainstream tool; a generic HTTP module is standard. The real constraint here is commercial, not technical."},{"text":"Operation-based billing counts each loop iteration, so the hourly run costs roughly 60 times what the step count suggests.","correct":true},{"text":"Scenarios cannot be exported, so there is no way to keep a copy.","correct":false,"tempting":"Export exists. The real weakness is that exported JSON diffs badly, making review and rollback weak rather than impossible."},{"text":"Hourly schedules are not supported and it will need an external trigger.","correct":false,"tempting":"Confuses a free-tier limitation with a platform limit, and misses the cost problem sitting inside the loop."}]},"prev":{"slug":"buy-build-or-wait","title":"Buy it, build it, or wait for it","url":"https://addaly.com/learn/agents-and-automation/buy-build-or-wait"},"next":{"slug":"tools-and-function-calling","title":"A tool call is a request, not an action","url":"https://addaly.com/learn/agents-and-automation/tools-and-function-calling"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'n8n, Zapier, Make, or a file of Python', in Agents and Automation. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/agents-and-automation/choosing-code-or-no-code (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"n8n, Zapier, Make, or a file of Python","courseTitle":"Agents and Automation","module":{"index":1,"slug":"deciding-what-to-build","title":"Before you build: script, workflow, or agent"},"answer":null,"keyIdea":"Visual tools win on connectors and time to first run; code wins the moment you need a loop with a condition, a code review, or a rollback.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"h2","id":"what-the-visual-tools-give-you","runs":[{"text":"What the visual tools give you"}]},{"t":"p","runs":[{"text":"It is fashionable among engineers to sneer at Zapier. Do not. What these tools sell is not drag-and-drop; it is "},{"text":"several hundred integrations where somebody else has already solved OAuth","b":true},{"text":"."}]},{"t":"p","runs":[{"text":"Getting a new row in Google Sheets into a Slack channel takes about four minutes in Make. Writing it yourself means registering an app, implementing an OAuth flow, storing and refreshing tokens, handling revocation, and reading two API references. That is a day, and it is a day of work that produces nothing anybody wanted."}]},{"t":"p","runs":[{"text":"If the automation is mostly moving data between services other people run, the visual tool is not the amateur choice. It is the correct one."}]},{"t":"h2","id":"read-the-meter-before-you-design-the-flow","runs":[{"text":"Read the meter before you design the flow"}]},{"t":"p","runs":[{"text":"The pricing model shapes the design, so learn it first."}]},{"t":"ul","items":[[{"text":"Zapier","b":true},{"text":" charges per task, where a task is roughly one step doing one thing."}],[{"text":"Make","b":true},{"text":" charges per operation, with a similar meaning."}]]},{"t":"p","runs":[{"text":"A twelve-step flow run a thousand times a month is twelve thousand billable units, not one thousand. And a loop over fifty rows is fifty operations per run, not one. Teams routinely design an elegant flow and then discover it costs more than the salary of the person it saved."}]},{"t":"p","runs":[{"text":"This is not a trap so much as a fact to design around: fewer, fatter steps, and push loops into a single call to something you wrote."}]},{"t":"h2","id":"where-they-hit-a-wall-and-why","runs":[{"text":"Where they hit a wall, and why"}]},{"t":"p","runs":[{"text":"Four walls, each with a mechanism rather than a vibe:"}]},{"t":"ul","items":[[{"text":"Loops with conditions.","b":true},{"text":" Every serious tool has iteration now, but early exit, nested conditions and accumulating state are painful, because a canvas has no variables in the way a language does. You end up building a program in a diagram."}],[{"text":"Version control.","b":true},{"text":" The flow is stored as a JSON blob. You can export it to git; you cannot meaningfully review the diff, because node ids and coordinates churn on every save. So code review and rollback (the two things that make a change safe) do not really work."}],[{"text":"Testing.","b":true},{"text":" There is no unit test. You test by running it, usually against live data, usually in production."}],[{"text":"Local development.","b":true},{"text":" Some platforms have it, most do not, so “try something” and “change the live system” become the same action."}]]},{"t":"h2","id":"the-hybrid-that-usually-wins","runs":[{"text":"The hybrid that usually wins"}]},{"t":"p","runs":[{"text":"Use the visual tool as trigger and glue, and put the part with real logic behind a single HTTP call to a function you wrote."}]},{"t":"p","runs":[{"text":"The tool handles the Gmail connection, the Slack post and the schedule. Your function receives a JSON payload and does the branching, the retries, the validation and the model call. The connectors stay free; the logic lives in git where it can be reviewed, tested and rolled back."}]},{"t":"p","runs":[{"text":"This is the shape most durable small automations end up in, and almost nobody starts there."}]},{"t":"h2","id":"the-free-path","runs":[{"text":"The free path"}],"role":"free"},{"t":"p","runs":[{"text":"Every paid tool above has a free equivalent you can run yourself:"}]},{"t":"ul","items":[[{"text":"n8n","b":true},{"text":", self-hosted with one Docker command, for the same visual model."}],[{"text":"Node-RED","b":true},{"text":", older, extremely stable, strong for event and device work."}],[{"text":"Windmill","b":true},{"text":", if what you want is scripts with a UI over them."}],[{"text":"Apache Airflow","b":true},{"text":" or "},{"text":"Dagster","b":true},{"text":", if what you actually have is a scheduled data pipeline with dependencies."}],[{"text":"cron plus a Python file","b":true},{"text":", which remains undefeated for a single job."}]]},{"t":"p","runs":[{"text":"Learn the names of the paid ones because job adverts name them. Run the free ones because a small server costs less per month than one Zapier plan."}]},{"t":"h2","id":"three-questions-to-decide","runs":[{"text":"Three questions to decide"}]},{"t":"ol","start":1,"items":[[{"text":"Does it need a loop with a condition and an early exit?"}],[{"text":"Does anybody need to review a change before it goes live?"}],[{"text":"Does it touch money, or send messages to customers?"}]]},{"t":"p","runs":[{"text":"One yes: either shape works. Two or more: write code."}]}],"check":{"question":[{"text":"A team builds a 14-step Make scenario that reconciles payments and, for each run, loops over roughly 60 transactions. It runs hourly. Which consideration should most change their design before launch?"}],"options":[{"text":[{"text":"Visual tools cannot make arbitrary HTTP calls, so the payment API is out of reach."}],"correct":false,"tempting":[{"text":"False in every mainstream tool; a generic HTTP module is standard. The real constraint here is commercial, not technical."}]},{"text":[{"text":"Operation-based billing counts each loop iteration, so the hourly run costs roughly 60 times what the step count suggests."}],"correct":true,"tempting":null},{"text":[{"text":"Scenarios cannot be exported, so there is no way to keep a copy."}],"correct":false,"tempting":[{"text":"Export exists. The real weakness is that exported JSON diffs badly, making review and rollback weak rather than impossible."}]},{"text":[{"text":"Hourly schedules are not supported and it will need an external trigger."}],"correct":false,"tempting":[{"text":"Confuses a free-tier limitation with a platform limit, and misses the cost problem sitting inside the loop."}]}],"order":[0,1,2,3],"why":null},"prev":{"slug":"buy-build-or-wait","title":"Buy it, build it, or wait for it","minutes":8},"next":{"slug":"tools-and-function-calling","title":"A tool call is a request, not an action","minutes":7}}}