•
Drizz raises $2.7M in seed funding •
•
Featured on Forbes
•
Drizz raises $2.7M in seed funding •
•
Featured on Forbes

For complex user flows, multi-screen journeys, OTP logins, branching paths, payments, data-driven runs across hundreds of values, yes, modern no-code handles them. The honest dividing line: if the complexity lives in the UI, no-code can automate it; if it lives outside the UI, protocol mocks, deep backend orchestration — that part still belongs elsewhere.
The skepticism comes from a real place, so let's name it: the last generation of "no-code" was record-and-playback, and record-and-playback genuinely couldn't handle complexity. It froze one happy path and shattered on anything conditional. If that's your reference point, the answer used to be no. The category has moved; the reputation hasn't caught up.
Most debates about this question go nowhere because both sides mean something different by complex:
No-code's job is the first kind. Judge it there, and check whether it has escape hatches for the second — not whether it is the second.
The specific things teams assume they'll lose, and don't:
The short list — shorter than skeptics fear, longer than vendor pages admit:
Notice what's not on the list anymore: branching, login, payments, data variation, popups. That's the update most evaluations are missing.
One question resolves almost every "is this flow too complex?" debate: can a human tester execute it through the UI with defined data? If yes, it's automatable without code, however many screens, branches, or values it involves. If the hard part happens where no screen exists, route that part through an API step or leave it to backend tooling, and let no-code own everything the user actually sees.
And the pattern for mature teams is a complement, not a replacement: keep code where code earns it, and move the UI journeys — where 60–70% of maintenance time was going — to the layer that no longer generates that maintenance.
Can no-code handle OTP and two-factor logins?
Yes — OTP retrieval and entry run as normal steps inside a reusable login module. It stopped being a differentiator between paradigms a while ago; treat any tool that can't as behind the category, not representative of it.
What about flows that branch on app state?
Conditional steps cover state-dependent behavior: the test checks what's on screen and takes the matching branch. The flows to avoid automating are ones where the expected outcome is undefined — that's a product problem, not a tooling one.
When should a flow stay in code?
When its essential complexity never touches the UI — protocol mocks, service virtualization, load — or when a secure surface is involved. UI journeys, however long or branched, no longer belong on that list.