Leaving eBay (and what’s next)

Monday July 8, 2024

I officially left my full-time job at eBay last Friday! I’ll be starting an MS program at UC Davis, probably at the beginning of 2025. It’s a weird and exciting time.

I think it would possibly be fun to start writing regularly, at least during this period between working and starting up school again. Most of the things I write about here will probably be related to programming languages, verification, software engineering, and computing more broadly. I also might not write anything at all. Who knows what the future holds?

How I’m feeling now

I think most modern software is in a terrible state.

This is in no way an indictment of eBay—I had a really great experience working there as a new college graduate without much in the way of real world programming under my belt. I learned a ton. The people I worked with were incredibly smart and supportive. Everyone was doing the best they could with what they had at hand. I truly could not have asked for anything more.

But over the past couple years in industry, I’ve become increasingly dissatisfied with the status quo. Most of the tools we work with—and more broadly, the software we work with—are massive agglutinations of hacks, patches, and historical accident. A lot of modern software development is comprised of meaningless tasks—accidental complexity, in the words of Fred Brooks—that, in my view, are a direct result of an industry fetishization of ad hoc solutions, “velocity”, and profit-chasing. There’s only so far we can take this approach before we need to start taking a hard, principled look at the roots of our problems. At least that’s what I believe.

A common argument from an engineering perspective is that “things just work.” Who cares if it’s cobbled together and built on sand! But I really don’t think that’s true. Things don’t work. Not really. Software is brittle, incorrect, and laden with silent bugs that cause security issues and privacy leaks. Software is often unacceptably slow. No one really knows what’s going on with their systems and no one can really trust that their software won’t fail them. I don’t feel comfortable living in a world where ambitious people, intent on extracting ever-more monetary value from people, continue to inject software into larger and more important parts of our society when we can’t even trust that our software works well.

And it’s not just a skill issue. The solution isn’t just to tell people to “get good.” The tools and abstractions we use are failing us. They could be doing much more. We should expect much more.

What I want to do

I’m still deeply excited about computing and software. I still think they have the potential to be incredibly powerful sources of good. But I think they often fall short of that promise, for reasons that are both social and technical. We can, and should, do much better.

I want to work on better tools and abstractions to broadly improve our software in technical ways—it should be easier to create software that is more correct, more secure, more private, more performant, and more flexible. We need better ways of wrangling ballooning complexity and developing more trustworthy, robust systems. We need better, more powerful ways to program computers.

I’m particularly interested in programming languages research and formal methods as avenues to effect the change I want to see. They give us more rigorous and principled ways to think about a lot of these problems. To me, they offer a degree of clarity, a bit of solid ground to stand on in a field that I think is still trying to figure itself out. I believe mathematical abstractions and logic have a lot to say when it comes to better ways of building and growing software.

I’m also interested in addressing systemic issues from the ground up, from a clean slate, if need be. I don’t want to hold onto outdated, ill-formed abstractions simply because they came first and they’re what we’re used to.

And I think the best way to do all of this is to go to graduate school. There just aren’t many places in industry that are accessible to me—at least, at the moment—that are working on these kinds of problems in ways that I find satisfying and meaningful. There certainly aren’t many places in industry that offer the degree of intellectual freedom that I want at the moment. There’s just more tolerance for uncertainty and experimentation in academia. There’s more leeway to take big, hopeful swings. There’s more room to explore and do work on things that don’t necessarily have immediate business value.

I’ve also just become extremely intellectually interested in the academic work going on at the intersection of programming languages, formal methods, and systems. I want a way to spend more time getting to engage with that work and I think that’s something graduate school is tailor-made for.

We’ll see what happens though. There are lots of things that aren’t so nice about academia too—whether it’s toxic power dynamics, politics, or the incessant pressure to publish. And of course, as in any other highly competitive field, a path in academia isn’t guaranteed (to say the least). There are other factors at play. That honestly might be one of the hardest realizations of growing up: sometimes, no matter how hard you try and how badly you want something, you just won’t get it. Or you’ll get it and realize it’s not what you truly wanted.

But I’m going to give it a shot. Why not? As the youths of a bygone era once said, YOLO.