Software Should Work Logo

Software
Should
Work

July 16-17, Columbia, Missouri

An independent conference on software reliability.

Speakers

Andrew Kelley
Andrew Kelley
Creator of Zig
Richard Feldman
Richard Feldman
Creator of Roc, Software Engineer at Zed
Richard Hipp
Richard Hipp
Creator of SQLite
Carson Gross
Carson Gross
Creator of HTMX, Instructor at Montana State University
Hillel Wayne
Hillel Wayne
Author of Logic for Programmers and Practical TLA+
Filip Pizlo
Filip Pizlo
Creator of Fil-C, Director of Programmability and Data Model at Roblox
Alexis King
Alexis King
Software Engineer at August Health, Author of Parse, Don’t Validate
Lorin Hochstein
Lorin Hochstein
Staff Reliability Engineer at Airbnb, Author of Chaos Engineering
Marianne Bellotti
Marianne Bellotti
Author of Kill it with Fire, Maintainer of Safety Critical Systems
Ray Myers
Ray Myers
Host of Craft vs Cruft, Founder of The Coding Agency
John Murray
John Murray
Senior Software Engineer at Antithesis
Delaney Gillilan
Delaney Gillilan
Creator of Datastar

Lightning Speakers

Andrew Helwer
Andrew Helwer
TLA+ maintainer, Software Engineer at Microsoft Azure Storage
Tommy Graves
Tommy Graves
Founder, CTO at RWX
Erin Swenson-Healey
Erin Swenson-Healey
Staff Software Engineer at Hadrian Automation
Jayaprabhakar Kadarkarai
Jayaprabhakar Kadarkarai
Creator of FizzBee
Trevor Settles
Trevor Settles
Software Engineer
Tom Wheeler
Tom Wheeler
Principal Developer Advocate at Temporal
Tilman Roeder
Tilman Roeder
Software Engineer at Jane Street

Sponsors

Antithesis logo RWX logo Redbud VC logo ParadeDB logo

Tickets

$499

Early Bird

Until March 13 at 11:59pm CDT

$599

Standard

Ends July 1st

Student discount: send proof of enrollment to [email protected] for $150 off.

Schedule

Thursday, July 16

8:00am Registration 9:00am Welcome and opening remarks 9:15am
Richard Feldman TBA

TBA

10:00am
Alexis King The Unreasonable Effectiveness of Constructive Data Modeling

TBA

10:45am Break 11:15am
Richard Hipp TBA

TBA

12:00pm Lunch 1:30pm
Hillel Wayne How to Find Bugs in Systems That Don't Exist

Building correct distributed systems takes thinking outside the box, and the fastest way to do that is to think inside a different box. One different box is “formal methods”, the discipline of mathematically verifying software and systems. Formal methods teaches us to see a system through three different perspectives: the abstract specification behind the system, the environment it assumes, and the properties it should and shouldn’t have. Rather than gradually learning these perspectives from months of using formal methods, we will instead learn them through a forty-ish minute conference talk.

2:15pm
John Murray Derivations to Deployments: Practical Nix in Production

At Antithesis, we care deeply about determinism and reproducibility. This led us to heavily adopt Nix throughout the entirety of our tech stack and deployment processes. This talk will cover some of the simple but powerful abstractions we built on top of Nix and how rethinking a "traditional" deployment setup has made Antithesis more reliable and development faster.

3:00pm Break 3:30pm
Delaney Gillilan Put State in the Right Place, or: How I Learned to Stop Worrying and Love the Web

The web browser has never been more capable, yet modern web development often means hundreds of megabytes of dependencies, layers of abstractions, and an endless stream of security vulnerabilities. But there is another way. By leveraging the browser, embracing web standards, and putting state in the right place, we can create interactive apps that are simpler, more resilient, and built to stand the test of time. This talk explores how Datastar enables a return to web fundamentals without sacrificing performance or user experience.

4:15pm
Lightning Talks
Andrew Helwer How Good Are the Go & Rust Concurrency Checkers?

For concurrent and distributed systems, formal modeling languages like TLA+, P, and Quint are the gold standard for finding bugs before they appear in production. However, our field continues to evolve and now Go and Rust both have checkers that promise to provide “fearless concurrency” by validating your source code directly. How powerful are these checkers? A TLA+ user takes them for a spin.

Tommy Graves Building Docker Images Faster by Changing the Dockerfile

Container image builds are still based on an idea from 2013: a linear sequence of filesystem snapshots. The Dockerfile was a brilliant abstraction when containers were new, but it imposes constraints that make modern builds slower, less incremental, and harder to parallelize than they need to be.

In this lightning talk, I'll propose a different approach: treating image construction as a dependency graph instead of a sequence of layers. Rather than executing a Dockerfile from top to bottom, we can build container images directly from content-addressed tasks, allowing work to be cached, reused, and parallelized at a much finer granularity.

The result is the same OCI-compatible image, but produced in a way that more closely resembles how modern build systems compile software.

We'll explore why Docker image builds invalidate more work than necessary, why layer-based caching has fundamental limitations, and what a graph-native image build system could look like instead.

If you've ever wondered why a one-line change can trigger minutes of rebuilding, this talk is for you.

Erin Swenson-Healey Tightly Couple Your Client to Your Server: Type-Safe, In-Process, Full-Stack Tests

Our React tests do not stub out the backend. They do not use MSW. They do not record HTTP fixtures. They run against an in-memory instantiation of the actual server, in the same process as the React tree.

The client and server talk to each other through a TypeScript interface. In production, the React app receives an implementation of that interface that is an HTTP client which makes XHRs to the real server. In tests, that implementation is the server itself, constructed in-process and backed by a real (in-memory) SQLite database created by running our production migrations and seeded using the same helpers we use in our server-side tests. Because the interface is a TypeScript type, every call across the client/server boundary is type-checked at compile time, in production and in tests alike.

Drop the HTTP layer and the tests turn into ordinary function calls. What you give up: a thin smoke test of the HTTP boundary, and the option of writing your backend in something other than TypeScript. What you get back: full-stack tests that parallelize arbitrarily, because each one runs against its own in-memory SQLite database and shares no state with any other. There is no lifecycle to juggle across multiple stateful processes. The same setup utilities work in server-side tests and frontend tests. And there is no mocked or stubbed backend to keep in sync with the real implementation, because there is no mocked backend. I will show one test and trace it from React render to SQLite and back.

Jayaprabhakar Kadarkarai Why You Should Create Your Own DSLs in the AI Era

Most AI applications have moved beyond chat interfaces and now rely on structured outputs, function calling, and agent workflows. While these approaches work well initially, they often become difficult to scale as prompts grow, workflows become more complex, and reliability requirements increase.

In this talk, I'll share lessons learned building AI-powered developer tools and explain why we started replacing ad-hoc schemas and function calls with purpose-built domain-specific languages (DSLs). I'll show how DSLs can make AI systems more reliable, easier to validate, cheaper to run, and easier for both humans and models to reason about.

We'll look at concrete examples of where structured outputs break down, how a DSL can encode intent more effectively, and practical guidelines for deciding when a custom language is worth the investment.

Trevor Settles I Just Wanted a Non-Blurry Screen Magnifier

Accessibility is commonly bolted on instead of thought through at the beginning. This reduces usability for many users. This is a case study of that story for screen magnifiers.

The current state of screen magnifiers is subpar and will essentially never change. Each pixel gets magnified and looks blurry at 5x+ zoom. The (seemingly) reasonable choice of representing the screen as a grid of pixels has unintended consequences.

I'll walk you through my story of how I ran into this, tried to solve it, and ultimately found that it's not worth solving.

It is a hard problem to think of all possible ways software could be used. In the case of screen magnifiers, they will always be a bit blurry. Here, the root solution is designing software in a way that a screen magnifier isn't even needed in the first place.

Visibility into how others use software can help to make sure it is usable for more people. The earlier we know about what those problems are, the better we can make it.

Tom Wheeler How Temporal Achieves Durable Execution

Temporal is an open source platform used by thousands of companies to make applications more reliable. One of its key features is Durable Execution: crash-proof execution that gives applications automatic state persistence and the ability to run reliably for any length of time. In this lightning talk, you’ll see what happens when a Temporal application crashes, and how it automatically recovers and resumes without losing state or unnecessarily repeating work that has already completed.

Tilman Roeder Be Careful When Improving Performance

We have two systems at $work that are getting more loaded over time and started to fall over handling queries from clients.

Counterintuitively, when we improved throughput and latency the systems started suffering from worse performance problems.

In the lightning talk, I’ll explore why this can happen, how to spot accidental load-shedding in a service, and what to watch out for when trying to make sense of misleading metrics.

5:15pm Day one ends 8:00pm Reception at Logboat Brewing

Friday, July 17

9:00am
Andrew Kelley Don't Take the Black Pill

In our modern world, it's easy to feel like things are careening out of control; that the future is happening to us while we take a back seat... and all we can do is lie down and rot.

I'm here to say, screw that! Let's apply systems thinking to the way that software and technology is integrated into our society, envision it differently, and then draw a line from here to there, identifying steps we can take right now along this trajectory.

This talk will be passionate and heartfelt, provocative, and entertaining; it will offer the audience optimism, solidarity, and purpose in the chaotic socio-technological climate that we face.

9:45am
Marianne Bellotti TBA

TBA

10:30am Break 11:00am
Ray Myers Code Worth Writing

Will code fade into the background, leaving us to steer software development with prompts and "taste"? For some kinds of software, probably. For others, that future is not just unlikely, it is dangerous.

The mistake is to treat "code" as one thing with a single future we can predict. Some code is disposable scaffolding. Some is a crucial record of decisions and invariants that the system depends on. In other words, there will continue to be code worth writing. What should it look like?

This talk introduces Triple Ergonomics, a framework for evaluating programming languages and toolchains by how well they serve the three audiences now involved in software construction: humans, AI agents, and algorithms.

Using examples from today’s languages and tools, we'll show where each audience’s needs diverge, where they reinforce each other, and where current solutions fall short. Instead of predicting the future, we lay out constructive bets and practical criteria for shaping our emerging languages toward software we can trust.

11:45am Lunch 1:15pm
Lorin Hochstein Saturation: How Your Software Will Fail at Scale

Even in the ethereal world of software, everything has a limit. And, once that limit is reached, very bad things can happen. In this talk, we will explore the problem of saturation: when a software system runs into one of these limits. We'll see a sampling of the many different kinds of system overload, how our systems are always potentially at risk of saturation no matter how well designed they are, and what we can do to prepare for the day when a system in our charge has been pushed beyond what it can normally handle.

2:00pm
Filip Pizlo TBA

TBA

2:45pm Break 3:15pm
Carson Gross AI & The University

The last year has seen the dramatic emergence of widespread AI-based coding practices. This has shaken many developers' faith in computer programming both as a career and as a vocation. It has also shaken University departments, especially in computer science: students are using AI to complete assignments, take tests, and, as one would expect with students, to avoid as much work as possible.

In this talk, Carson, who teaches computer science at Montana State University, will consider the position of the University in the age of AI tools: the good, the bad, and the ugly. Perhaps surprisingly, he will present an optimistic take on how the University can, with some changes, provide an excellent platform for preparing students for a fruitful career in technology.

4:00pm Closing remarks 4:15pm Day two ends

Order subject to change

Venue

The Tiger Hotel Entrance The Tiger Hotel Sign

SSW will be held at voco The Tiger Hotel, 23 S 8th St, Columbia, MO 65201. Book a room with our group rate, or consider staying at The Broadway, a 6 minute walk from the venue.

Travel

Fly into the Columbia Regional Airport (COU), or for more options, consider landing in St. Louis (STL) and taking a shuttle or rental car.

While in COMO

Mizzou campus MKT Trail

Visit Mizzou's campus or explore our extensive rail trail network.

Isaac's Food Guide

Food genre
Isaac's favorites
Walking distance from the venue
pain au chocolat from Sage
Sage
Pastries, brunch, and coffee
Butter croissant, quiche
3 minutes
shakshuka from Beet Box
Beet Box
Middle-eastern fusion
Pop tarts, shawarma, BEC
18 minutes
Burnt End Zone from Pizza Tree
Pizza Tree
Creative pizza to-go
Logbro, Kimchi
2 minutes
Sample platter from Mahi's
Mahi's Ethiopian Kitchen
Authentic Ethiopian
Doro wot, Yemisir wot
2 minutes
Curry from Thai Express
Thai Express
Casual Thai
Yellow curry, fried rice
7 minutes
Milk tea from Bubblecup
Bubblecup Tea Zone
Columbia's original boba
Tiger, grapefruit
2 minutes
Nigiri from Kampai
Kampai
Sushi
Spider roll, crispy brussel sprouts
2 minutes
Food from Goldie's Bagels
Goldie's Bagels
Bagels
Zhug, BB Queen
2 minutes
Ice cream from Sparky's
Sparky's Ice Cream
Eclectic homemade ice cream
Ube, Oreo Speedwagon
2 minutes
Beer from Logboat
Logboat Brewing
Award winning beer and cider
Shiphead, Turtle Power, Lei-a
17 minutes
Food from Irene's
Irene's BBQ
Live-fire tex-mex BBQ
Any sausage, al pastor
19 minutes
Ramen from Le Bao
Le Bao Asian Eatery
Ramen and bao
Spicy chicken ramen
9 minutes