I’ve had the opportunity to spend over 20 years programming with an unusual level of freedom to improve the design of code I worked on. Too often, outside constraints force us to simply live with poor designs. We get a bitter education about how frustrating our favorite mistakes can be, but we don’t get enough opportunities to make exciting new mistakes. I think I’ve gotten the opportunity to curse past-me in plenty of innovative ways.
I’ve also had the chance to play in a bunch of different sandboxes, from low-level systems programming to sky-high type theory. All the while, learning from the experiences of the wide range of other people I’ve worked with. A few years ago, I got a Ph.D. that allowed me to spend an unusual amount of time (a) thinking hard about how to design programs and programming languages, (b) reading a lot of good work on software design, and (c) actually writing reasonably quality software. (Anyone who’s dealt with “academic code” knows why that last one might be surprising.)
Most recently, I spent 4 years at AWS, where I (a) built services in the cloud, (b) threat-modeled all the things, and finally (c) helped create an open-source verification tool called Kani Rust Verifier.
Right now, I am enjoying a spell of funemployment.