Systemic risk hides in the complexity of the code.
On March 12, 2026, a little-known upgrade to the MakerDAO vault system quietly enabled “scheduled reimbursement” — a feature allowing liquidators to pre-program their calls up to 24 hours in advance. The community cheered. I opened the spec and saw three words that should terrify every risk manager: persistent state, deferred execution, and resource preemption.
Context: The Siren Song of Automation-as-a-Service
The DeFi ecosystem has spent the past two years chasing “AI-native” automation. Projects like Gelato, Chainlink Keepers, and now protocol-native schedulers promise to turn smart contracts into autonomous agents that execute strategies without human intervention. The narrative is seductive: lower latency, higher capital efficiency, and the elimination of manual oversight. MakerDAO’s latest upgrade is just the latest example — a native “timed liquidation” mechanism embedded in the core vault module. The whitepaper claims it “democratizes access to liquidation incentives” by allowing keepers to reserve future blocks.
But automation is not a feature; it is a liability. Based on my 2018 audit of 0x Protocol v2, I learned that any system promising “set-and-forget” execution introduces a failure mode no one accounts for: the cost of state contention under load. The MakerDAO scheduler allows any keeper to register a future execution slot with a deposit of 100 DAI. In a bull market, that deposit is trivial. In a flash crash, it’s a race where the first mover wins and the rest lose their collateral. The protocol assumes the deposit covers the risk of a failed execution. It does not. Why? Because the deposit is calculated against average gas, not peak gas. During the 2025 liquidity crisis, gas spiked to 5,000 gwei. The deposit covered 20% of the actual execution cost. The rest was socialized to Maker holders.

Core: A Systematic Teardown of the Timed Execution Model
Let’s decompose the engineering. The scheduler uses a FIFO queue stored in the Vault core. Each scheduled call includes a target block range (e.g., blocks 100–105). When the chain reaches block 100, the scheduler attempts to execute. If gas price exceeds the keeper’s limit, the call is skipped and the deposit is slashed. The protocol claims this incentivizes accurate gas estimation. In reality, it creates a classic tragedy of the commons: keepers will systematically under-estimate gas to avoid losing deposits, knowing that only a fraction of scheduled calls will execute simultaneously. On a congested day, 2,000 scheduled liquidations will compete for the same blockspace. The result? 80% fail, the failed keepers lose their deposits (which go to the protocol surplus buffer), and the remaining 20% win the liquidation bonus. The protocol collects the failed deposits as revenue. This is not automation; it’s a tax on liquidity providers who assume their positions are safe.
Proof is required, not promise. My audit of the scheduler’s front-end data feed revealed another flaw: the gas oracle used to set deposit requirements updates only every 15 minutes. In a volatile market, the deviation between the oracle and actual gas can exceed 300%. The team acknowledged this in a GitHub issue I filed on March 14, but marked it as “low priority” because the deposit model “has been working for 6 months.” That is survivorship bias. Historical calm does not predict future chaos. Based on my experience during the Terra/Luna collapse, I know that systems appear stable until they aren’t. When the next cascade comes, the scheduler will amplify it.
Now let’s examine the infrastructure layer. Scheduled execution requires the blockchain to predict future compute demand. The MakerDAO scheduler reserves state space in the vault’s storage trie for each pending call. Each reservation increases the state size by 512 bytes. With 10,000 active scheduled calls, the vault state grows by 5 MB per day. After 90 days, that’s 450 MB of cold storage that must be accessed during a liquidation. The gas cost to read that stale state will increase exponentially as the trie depth grows. The team claims they will “prune expired reservations weekly.” But pruning also costs gas, and those costs are passed to the next scheduled call. In the long run, the system becomes a drain on the protocol’s treasury.

Proof is required, not promise. I requested a simulation of 5,000 concurrent scheduled liquidations using the actual vault state. The team refused, citing “resource constraints.” That is a red flag. Any production system that cannot simulate its own failure modes is not ready for prime time.
Contrarian: What the Bulls Got Right
To be fair, the scheduler does solve a genuine problem: the volatility of keeper profitability. In the current system, keepers must constantly monitor mempool and compete on latency. Timed execution allows smaller keepers to participate without needing custom infrastructure. The deposit model also reduces spam; malicious keepers cannot flood the queue without capital at risk. And the protocol’s budget for surplus buffer will grow from slash revenue. In a stable market, this mechanism could reduce liquidation inefficiencies by 15–20%, as estimated by one empirical study cited in the whitepaper.
But the bulls ignore the tail risk. They assume that maximum concurrency is bounded by historical data. They assume that the gas oracle will never drift. They assume that state growth is costless. These are assumptions, not truths. In my 2021 NFT bubble report, I showed that 85% of projects made identical assumptions about utility — and they were wrong. The same pattern repeats here.
Takeaway: The Bill Comes Due
The MakerDAO scheduler represents a shift from real-time to deferred execution. It looks like progress, but it introduces a class of risk that the existing liquidation model deliberately avoided: state-dependent, non-interactive failure. If a single keeper’s script bugs cause a cascade of failed scheduled calls, the protocol has no human override. The scheduler will execute regardless, consuming gas and failing silently. The only winner is the miner who collects the fees.
Systemic risk hides in the complexity of the code. The next time you see a protocol announce “scheduled automation,” ask the team: What is the worst-case state growth after 180 days? How does the system handle a 10x spike in scheduled calls? Can you show me the simulation data? If they cannot answer, do not deposit. Because proof is required, not promise.