I kind of stumbled into it. I’ve always been very curious and like to learn new things and tinker. We had some of the first personal computers (BBC Micros!) in my classroom when I was a kid, and I loved playing around with the limited applications available. In my teens, I started dabbling with HTML and creating my own web pages.
I especially fell in love with the idea of the open web, and went deep on APIs and leveraging multiple systems to create new things. Fundamentally I love the process of creating new things, and being a developer is a specific form of that.
Automattic is completely distributed, so we all work from home offices, cafes, coworking spaces, or wherever else we can be productive. I sometimes visit a coworking space or cafe, but mostly work from home, where I have a space set up as an office, using a sit/stand desk. I use a 13” MacBook Pro (hooked up to a 27” LG Ultrafine display) and have an iPhone XS and an iPad Pro (with Logitech keyboard case) that I also use a lot when I want to focus on certain things (mostly non-coding). Here’s my home office (don’t worry, I cleaned up just for the picture).
My current editor of choice is Atom. I’ve been meaning to try out NetBeans and Visual Studio Code because I keep hearing good things about them. I use Chrome as my browser, and still, just use Terminal. I’m experimenting with Hyper, written by my ex-coworker Guillermo. I use Alfred for all sorts of shortcuts. 1Password for all passwords. I’ve been using SourceTree for some git work and juggling a bunch of different repos.
I’m actually pretty old-school, and I like the simplicity of working with PHP, so I guess LAMP, although I think Nginx is giving Apache a run for its money these days. I love not needing any kind of build process or anything, and just being able to hack on changes and have them be available immediately. It’s also a really easy stack to get running locally, is available on every host, and tends to be pretty bullet-proof.
On the JS side of things I like React, and all the typical things that come with it (Webpack, Babel, etc). I haven’t worked with it specifically, but am curious to explore Next.js.
Beyond those, the repos I find most interesting are actually the ones that are not managing code (those are important, but the repo itself doesn’t tend to be particularly interesting). As an example, I love github.com/remoteintech/remote-jobs and github.com/public-apis/public-apis for the way they collect and curate information, via a repo.
Machine learning fascinates me, although I haven’t dabbled in it at all. I love messing around with Smart Home/automation stuff, and think the IoT is going to change everything about how society functions. Voice systems (Alexa/Google Home) are pretty interesting, although beyond music, weather, and some basic smart home actions, I’m still kind of searching for my own killer app.
I’ve dabbled with a couple of voice-powered applications, but they didn’t really stick for me, and I ended up just defaulting back to a mobile device for most of them. I recently purchased a drone (DJI Mavic Air) and the technology in these things blows me away. I think the software (combined with sensors) side of drones is fascinating, already incredibly advanced, and speaks to an interesting future when tied in with automated cars and other “intelligent” modes of transit, travel, and automation.
Messing around in production! Just kidding. I like to collaborate really closely with designers, and enjoy the back and forth of working with someone who thinks very differently from me, where we can supplement each other’s gaps, and push each other in new directions.
We use Docker for a lot of development at work (Automattic), with GitHub for most source control. So it’ll be branching from master, working in the branch on small/discrete changes, then aiming to get those merged back to master as soon as possible (we aim to keep master deployable or deployed live, with changes merged as early as possible, even if feature-flagged off in production). I’m a big fan of this model because it means you hopefully find out as early as possible if there are problems, all new work is branched from the truly “latest and greatest”, and you minimize merge conflicts that tend to come from long-lived branches.
We have a split environment where some of our work is continuous deployment/SaaS, and some are “shrink-wrapped” software released on various cadences (from monthly to roughly quarterly). I much prefer working in the SaaS-style arrangement, but monthly releases are bearable if managed properly.
Right now I’m actually re-learning how to be a developer. I took a hiatus of a couple of years where I was managing larger and larger groups across engineering, design, and business, so it’s been a while since my daily work has involved writing much code. I’m honestly just getting back into figuring out how to work efficiently with Git(Hub), Webpack, React, Docker, Vagrant, modern PHP, etc, etc.
On a personal level, I’d say the combination of Keyring and the Social Importers I wrote. Keyring is a flexible authentication framework/abstraction layer for WordPress, which allows you to connect to and communicate with various web services from a WordPress install. I built that primarily to power the Social Importers, which I use to pull back copies of most of my “digital footprints” into a WordPress install at dentedreality.com.au. It’s all kind of a big experiment, but a bunch of other folks have found use in Keyring in particular, which is cool.
Clear communication. In particular written/text-based. I think the value of clearly-articulated (and understood) written prose is vastly underestimated as a crucial skill for developers. It might not be long-form thought-pieces, but your GitHub issues, code comments, and likely daily interactions via Slack or whatever are really going to be the meat of your career. The better you can get at writing, the sooner, the smoother ride you’re going to have.
I’m biased here because I’ve worked in a purely distributed workplace for the last 10+ years, but I really think being able to think and then write clearly is crucial to be a successful developer (or basically anything else in the web industry for that matter).
At Automattic, we focus on WordPress-based solutions. My personal specialty has been in the space between hosted services and self-hosted installations of WordPress, which is absolutely rife with a complexity that tends to be largely out of our control. Developing software that executes on someone else’s system (WordPress), hosted in various different ways, with thousands of plugins and themes that could be interfering (with no code-level sandboxing), is really complicated. Add into that a general approach of backward compatibility, and a lot of community politics, and you’ve got plenty of challenges on your hands.
I think we’re also facing some interesting challenges spanning our hosted, primarily-React.js-based web app, self-hosted (primarily PHP/HTML/JS) WordPress, and the native mobile apps that we build for both iOS and Android. Keeping the experience consistent amongst them all, and still allowing the flexibility of WordPress as a platform is super challenging.