Ryan Dahl
Creator of Node.js and Deno, evangelist of non-blocking I/O
Ryan Dahl created Node.js in 2009, bringing Chrome's V8 engine to the server side and redefining server-side programming with an event loop and non-blocking I/O. In 2018, he delivered the famous 'Things I Regret About Node.js' talk at JSConf EU, listing design mistakes including callback hell, npm permission model, and lack of TypeScript support, and immediately launched Deno — a new runtime redesigned around security and native TypeScript. Both of his creations profoundly shaped the evolution of the JavaScript ecosystem.
Methodologies
- Non-Blocking I/O Architecture Design - Replace thread pools with an event loop, allowing a single process to handle tens of thousands of concurrent connections without context-switching overhead.
- Design Regret Inventory Method - At key milestones of a mature system, systematically list all design mistakes as a negative requirements list for the next generation.
Key decisions and timeline
- 2006 Deep Research into High-Performance Web Server Problem - True innovation often comes from asking 'why is this so hard' about existing solutions.
- 2009-05 Node.js Born: V8 Engine First Used Server-Side - Choosing a language without historical baggage allows building correct abstractions from scratch.
- 2009-11 JSConf 2009 Talk: The Node.js Launch That Shocked the Tech World - Presenting to the right audience for the first public demo can produce far greater spread than expected.
Beliefs and mental models
- Belief 1 - Traditional threading models waste enormous CPU time waiting for disk and network; event-driven non-blocking I/O can handle tens of thousands of concurrent connections with a single thread. Apache's multi-thread model cannot scale.
- Belief 2 - Publicly listing the flaws in your own creation requires great courage; but only by honestly facing design mistakes can you make genuine improvements in the next version. Deno's existence is essentially both a love letter and a critique to Node.js.
- Belief 3 - npm packages in Node.js can access the filesystem, network, and environment variables by default — a fundamental design error. In Deno, all access requires explicit authorization — a design philosophy inspired by browser sandboxing.
- Model 1
- Model 2
- Model 3