Developer Voices

How Would You Type-Check 30 Million Lines of PHP? (with Julien Verlaguet)

Developer Voices

Show Notes

How would you manage 30 million lines of PHP? You can't rewrite it - you'd be fired long before you delivered. That was the problem facing Facebook around 2011, and their answer was to add a type system, giving birth to the Hack language. But adding types to PHP turned out to be the easy part. The hard part was building a type checker that developers used to "edit, save, refresh" would actually tolerate. So how do you type-check tens of millions of lines of code fast enough that nobody notices?

Julien Verlaguet co-designed Hack at Facebook, and has spent the fifteen years since chasing a better way to build incremental systems. We start with the internals of Hack's language server - forked OCaml workers, a shared immutable heap, lock-free dependency tracking, and the months spent hunting non-deterministic bugs. From there we follow the thread to Skip, a language designed around tracking mutability in the type system, with stops at why Haskell's monads and "reactive Java" didn't fit, functors vs type classes, and Skip's bang operator for working with immutable objects. Then it's on to the Skip reactive framework: eager vs lazy collections, a garbage collector without long pauses, a reactive SQL database that didn't find a market, TypeScript bindings, and Skipper, an AI coding agent built on a sound version of TypeScript.

If you're interested in compilers, language design, or building real-time systems that stay fast as they grow, Julien has plenty of hard-won lessons to share.

---

Support Developer Voices on Patreon: https://patreon.com/DeveloperVoices

Support Developer Voices on YouTube: https://www.youtube.com/@DeveloperVoices/join

SkipLabs: https://skiplabs.io/

Skip Framework Docs: https://skiplabs.io/docs

Skip on GitHub: https://github.com/SkipLabs/skip

Skiplang: https://skiplang.com/

Skipper Launch Announcement: https://skiplabs.io/blog/press_release

Hack: https://hacklang.org/

HHVM: https://hhvm.com/

OCaml: https://ocaml.org/

OCaml Functors: https://ocaml.org/docs/functors

Haskell: https://www.haskell.org/

Clojure: https://clojure.org/

Scala Implicit Parameters: https://docs.scala-lang.org/tour/implicit-parameters.html

Salsa (Incremental Computation for Rust): https://github.com/salsa-rs/salsa

ReactiveX: https://reactivex.io/

SQLite: https://www.sqlite.org/

TPC-H Benchmark: https://www.tpc.org/tpch/

PostgreSQL: https://www.postgresql.org/

PostgreSQL NOTIFY: https://www.postgresql.org/docs/current/sql-notify.html

Server-Sent Events: https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events

JavaScript Proxy Objects: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

Doxygen: https://www.doxygen.nl/

SKDB and Reactive Databases (Materialized View): https://materializedview.io/p/skdb-reactive-databases-julien-verlaguet

Julien on LinkedIn: https://www.linkedin.com/in/julien-verlaguet-b5710a20/

Julien on X: https://x.com/JulienVerlaguet

Kris on Bluesky: https://bsky.app/profile/krisajenkins.bsky.social

Kris on Mastodon: http://mastodon.social/@krisajenkins

Kris on LinkedIn: https://www.linkedin.com/in/krisjenkins/

More from Developer Voices

Aug 26, 2026

Building something people actually want is supposed to be the happy ending. But it arrives with a bill attached: feature requests you didn't ask for, pull requests you'd rather not maintain forever, users demanding the one thing you swore you'd never build, and — if you're unlucky — a company where the sales team quietly starts deciding what engineering works on. DuckDB has spent the last two and a half years working through that list. So how do you stay a database engineering team when success keeps trying to turn you into something else?

Aug 12, 2026

My guest this week is James Brown, an engineering lead at Schroders, and that's a useful vantage point — asset managers carry all the regulation and organisational weight of a bank, mixed with the first-to-market pressure of a startup. James starts with his own "Claude mania": months of agents running around the clock, and the wave of anxiety that hit him one morning walking to the shop without one running at home. From there, Clair — the plugin he's building to give coding agents proximal awareness of each other, using git orphan branches as a zero-infrastructure message bus; why AI behaves like oxygen in a room full of tiny fires; what "going well" actually measures inside a regulated firm; and why he thinks team sizes won't change, even when the number of teams does.

Jul 8, 2026

There's a problem that's bugged the database industry since the 1980s: you run an expensive query over millions of rows, cache the result, and then a single new row arrives. Logically that's one small update, but most engines throw the cached answer away and recompute everything from scratch. Some will handle changes incrementally, but only for "simple" queries - and the rules for what counts as simple are arbitrary and brittle. So can you incrementally maintain *any* SQL query, no matter how complex? For decades the answer was no. Then an award-winning paper called DBSP proved that the answer is yes - all queries are simple enough.

Mar 26, 2026

AI is changing the way we all build software — that much seems clear. But the landscape is moving so fast that even the people paid to keep up are struggling. MCP or skills? Fine-tune or just prompt? LangChain or let a thousand agents loose? With almost 70 competing technologies and a shelf life of maybe six months on any advice, how do you figure out what's actually worth your time?

Feb 19, 2026

I have a theory that only bad projects get finished — good ones keep finding new things to do. Asciinema is a case in point. What started as a way to share terminal sessions with friends has, over 14 years, grown into a full suite of tools covering recording, hosting, playback, and live streaming — and been rebuilt multiple times along the way. So what does it actually take to record and replay a terminal session faithfully in a browser?

See all episodes →