I’m Stephen. I am an American expat living in Berlin with my wife and 2 dogs—Tuck 🐶 and Ruby 🐕 (weirdly both emoji are pretty accurate depictions). I am someone who sweats the details, someone that would rather design in CodePen than Figma, someone who can learn both deeply and quickly because they aren't afraid to read obscure low-level source code or keep tabs on upcoming HTML, CSS, and JS features, and someone that enjoys sharing problems, solutions, tips and tricks with others.
At this point two years ago, I had never read or written a line of C, knew nearly nothing about SQLite, and had only contributed one small documentation fix to Rails core. Fast forward to today, I am now a top-500 Rails core contributor. I have written multiple PRs to the sqlite3-ruby
gem (I'm now a top-5 contributor), including a few in C. I have also now read large swathes of the SQLite C source code, and I am in the process of writing a lexer and parser for SQLite by translating the entagled C code into Ruby. I am now recognized as one of the the experts in SQLite in the Ruby community.
Similarly, when I got my first job in tech after leaving graduate school in Classical Studies, I had never written a line of Ruby and knew nothing about Rails. Nonetheless, within 6 months of starting I was promoted from junior to mid-level Rails developer. In my second job, I was again promoted after 6 months in the role. This time, though, I was promoted to an engineering management role, and I have spent the last 4 years growing our team from 6 on-site, full-stack engineers maintaining one product to a department of 45+ remote engineers who have built and now maintain 4 products.
My key to learning new topics, tools, or technologies is to dive in head first and build something. I am a hands-on learner. Whether it is things for work or things I am simply interested in, I learn by doing. Being such a hands-on "manager-of-one" has granted me essentially all of my opportunities. I got into tech by building tools to be a more effective and efficient scholar. I got my first job from building Alfred workflows. And I now have a reputation in the Ruby community for my work on SQLite because I built various applications using SQLite and numerous tools on top of SQLite.
I like to focus on leverage—how you I produce the absolute best possible interface, component, DX with the absolute minimal bloat. I think of myself as a minimalist perfectionists.
I recently tried to implement the Superlist inbox page in Tailwind CSS, which I could only do by eye as the source code is not available. I then spent the next two weeks before leaving for my wedding working to build a Rails clone using cutting-egde browser features (e.g. popovers and anchor positioning) and morphing. I streamed the whole process. It isn't perfect, I am still not satisfied with it, but I also didn't let that stop me from iterating, shipping, and sharing.
I also love to explore UX patterns to try and find an optimal balance between beauty, usability, and simplicity. As one example, I experimented with two different approaches to building a multiple file input in an edit form. In one version, I split the already saved files from the newly attached files and displayed them in two separate lists. In the other, I combined them into a single list but varied their styling. I believe that the second approach is more intuitive and user-friendly, but I am not sure. I would love to hear your thoughts. For one other example, I tried a few different approaches to an avatar component. I started off with a simple screen name text input that generates a deterministic avatar from Boring avatars. I then tried using a generated avatar from avvvatars along with a file upload button. Finally, I allowed the user to choose if they wanted a shape or initial-based avatar or upload a custom image. Polish isn't simply how it looks statically, but how it works and feels to use.
Where I am from in Louisiana, we have the concept of lagniappe, or a little something extra. I want the things I build to have lagniappe. When I was exploring inline text editing, I wanted to keep things simple by simply stying regular form inputs to either look like static content or editable fields depending on focus, but I also wanted that transition between states to be delightful. I've experimented with both single line and multi-line inputs, which each utilizing slight Tailwind animations. In fact, my very first larger project was a CSS library to provide a collection of icons that you could visually toggle between, like an up-chevron morphing into a down-chevron.
I will spend hours tweaking slides, even just for our company's bi-weekly Townhalls, where I have ended up incidentally defining much of the aesthetic of our slide deck. In the slide deck for my most recent conference talk, I spent days scouring the internet, working with GPTs, and experimenting in Sketch just to create this one image of a red ruby and a blue feather that I only use for a few seconds.
I also care deeply about the polish and delight in the code interfaces I build. I had been experimenting with Tachyons for a bit and liked atomic CSS, but I found their terse class names to be a bit too terse. I strive to strike a similar balance in the code that I write, especially that code that is meant to be consumed by other developers. I want my code to be a joy to use, delightful to read, and a pleasure to maintain.
Finally, I look to delight people through speaking and sharing. I will give talks at no less than 4 conferences this year. I have also been a guest on various podcasts, and I am writing regularly on various topics in web development. This year I also started a Youtube channel where I have done a two week sprint building the Superlist clone. When I look into the future of my career, I see myself continuing to share and teach, whether that be through speaking, writing, or mentoring.