Published on

Q&A with Alex Sexton

Web developer and product engineer at Stripe, Austin

I'm Alex Sexton. I'm a web developer out of Austin, TX. I work as a Product Engineer at Stripe, and I work on open source as a member of the jQuery Board of Advisors and the Modernizr core team. I love teaching, building large web apps, and solving really hard problems.

Tell me about your latest js project which you really enjoyed making

This past year I worked hard on the Modernizr 3 release. We had to dramatically increase our ability to feature test lots more stuff without slowing down people's websites and I got to head up the effort to modularize and refactor the code base to allow for that.

When did you start to learn Javascript?

I learned JavaScript about a year after I graduated with a Computer Science degree from the University of Texas. So probably sometime in early 2009. I had a bunch of formal education through school, but virtually no web programming experience. My first job was at a php shop that made sites with a little bit of JavaScript, but it wasn't until later on that it really grabbed me.

I primarily learned by teaching. I spent a lot of time in the #jquery IRC channel on Freenode and on StackOverflow answering questions that I barely knew the answer to. I worked hard to learn as much as possible, mostly through online resources and talks and such. The beauty in teaching other people so early, was that I was able to identify the parts that most commonly confuse people and focus a lot on those parts so I could help. I think if you ever really want to learn something you have to teach it to someone else. The best way to force yourself to learn something is to sign up to give a talk about it at your local meetup. :D

The best way to force yourself to learn something is to sign up to give a talk about it at your local meetup :D

What software do you use for your work?

I use OS X. I have a fetish for running the bleeding edge of everything, so I run Mavericks, and did since the first developer early release. I use vim, with a mostly default Spf13.vim install (two-space soft-tabs, no trailing whitespace). JSHint runs as I type. I browse in Chrome Dev Channel and I develop in Chrome Canary (but I love Firefox again these days too).

For personal projects I generally set up an Express server in node.js, and connect it to CouchDB, MongoDB, and/or Redis, depending on the problem set. Stripe uses CoffeeScript, so I know that as well, but I generally like to stick to vanilla JS. I am an AMD fan, and have written about why I think it's a good default module system for the web, so I generally fire up require.js first.

I'd say the majority of my projects use Backbone.js, but I'm also a big fan of the more robust frameworks, most specifically Ember.js. Both of those generally imply that I'm using jQuery for dom manip and I almost exclusively use Handlebars for templating. I wrote a bridge between Require.js and Handlebars called the require-handlebars-plugin that allows you to treat templates as dependencies just like anything else.

For styles, I used Stylus for a long time, but have recently moved to a slightly more custom stack with TJ's next project called 'Rework.' It's pretty great, because it allows me to pick and choose the subset of features I want to exist, so it can be pretty speedy.

For testing, I'll generally either use The Intern, or setup a bridge with Mocha, Chai, Saucelabs, and phantomjs using Grunt as the task runner. I try to use Grunt for as much as possible so I can reuse other smart people's build tools easily.

I love deploying mostly static client-side apps. There is usually an API running on a subdomain, but the entire rest of the app is just files on a filesystem. For these I like to run a build via CircleCI on a post-commit hook, if it passes tests, it pushes static files to an Amazon S3 bucket. Then I put something like CloudFlare in front of that in order to distribute it to their global CDN (and usually terminate SSL as well). If I'm running my own server, it's usually the default EC2 AMI with Nginx in front of node.js.

Most importantly, for making animated gifs, I use this nifty script I stole from a few different places online.

Where does your work inspiration come from?

I get inspired by problems that haven't been correctly solved yet. The idea that I could be the first person to solve a problem in a given domain is really exciting to me, and has motivated a lot of all-night coding sessions. So I definitely need to be reading, so I know what our problems are, and so I know where to go look to get information on how other people have solved similar problems.

Often times I'll get a task at work, and one weird little side-part of the project will consume my thinking. It's generally not terribly appropriate to focus on it at the office, so I'll occasionally try to go and make a stand-alone library or project to solve that problem. Work usually doesn't mind as long as I get my work done, and I think a lot of those little things go under the radar compared to other popular, more core-problem libraries. This is where something like my messageformat.js library came out of. There were a few libraries that did similar things, but I was excited to solve the problem beyond what any of those had done, and by luck, it also really helped the internationalized project I was working on at the office.

Also, coffee.

I get inspired by problems that haven't been correctly solved yet. The idea that I could be the first person to solve a problem in a given domain is really exciting to me, and has motivated a lot of all-night coding sessions. So I definitely need to be reading, so I know what our problems are, and so I know where to go look to get information on how other people have solved similar problems