One of my favorite technology trends of the past few years has been the emergence of engineering blogs. They are, mostly, a recruiting tool, but that doesn’t mean that you can’t learn a lot about how companies operating at varying levels of maturity and scale go about their business. Here are the engineering blogs I’m following right now:
- Airbnb Nerd Blog
- Backing & Hacking (Kickstarter)
- Bitly Engineering Blog
- CloudFlare
- Code as Craft (Etsy)
- code.flickr – One of the original engineering blogs.
- The Corner (Square)
- Coursera Technology
- DocuSign Dev Blog
- Dropbox Tech Blog
- Facebook Engineering Blog (older stuff)
- Foursquare Engineering
- Google Engineering Tools
- IMVU Engineering Blog – One of earliest companies to publicize its continuous deployment process.
- Instagram Engineering
- Last.HQ (Last.fm)
- LinkedIn Engineering
- Lyft
- Making Pinterest
- Medium
- The Netflix Tech Blog
- NPR News Apps Blog
- Paperless Post Dev Blog
- Several People Are Coding (Slack Engineering)
- SlideShare Engineering Blog
- SoundCloud Backstage
- Spotify Labs
- Tumblr Engineering
- Twitter Engineering
- Uber Engineering Blog
- Viget Extend
- Vine
- Wayfair Engineering
- Wealthfront Engineering
- Yahoo
- Yammer Engineering
- Yelp Product & Engineering Blog
- Zenefits
What sorts of things are companies publishing on engineering blogs? Here are a few examples of particularly good engineering blog posts I’ve read over the years:
- Lessons Netflix Learned from the AWS Outage is a great post-mortem on how Netflix dealt with a major outage that affected them in surprising ways.
- Building a recommendation engine, foursquare style explains the computational shortcuts you can take when you’re dealing with a lot of data.
- The Etsy Way rounds up a number of posts that explain how Etsy created its engineering culture.
- Creating an interface for geofences is a look at how Flickr built an interesting feature.
- Twitter explained how they moved to a new datacenter.
- LinkedIn’s three part series on building their iPad app was epic.
This is just a small sample of the great stuff that companies are posting to their engineering blogs these days.
If you know of any good engineering blogs that I’m missing, please post links in the comments.
Update: Added a few additional blogs suggested by @mrtazz.
Update (March 6, 2013): Added the NPR News Apps Blog.
Update (May 10, 2013): Added Kickstarter’s Backing & Hacking blog.
Update (February, 22, 2014): Added Coursera Technology.
Update (March 24, 2014): Added Algorithm & Blues, Rdio’s engineering blog.
Update (August 29, 2014): Added Yahoo.
Update (December 13, 2015): Added Medium and Vine.
Update (August 20, 2016): Removed Rdio and Prismatic (RIP), updated Facebook, Yammer. Added Uber, Pinterest, Dropbox, Lyft, Zenefits, CloudFlare, Slack.
The tools I use when I get to choose
Last week Noah Sussman gave a talk and said that developers should ideally program in an environment that resembles as closely as possible the environment they’d use if they were programming just for themselves, because that’s most likely to be the most productive approach.
Usually, I start with something at least a little bit new every time I build a new application, because there’s something I want to learn. So I’ll try a new framework, or a new language, or a new something, just so that I can pick up some new skills in the process of building something.
Noah referred to this approach as naturalistic programming (I think). It made me think of what naturalistic programming is for me. Right now if I’m building an application from scratch, I use Ruby, Sinatra, Bootstrap, and jQuery. For the view layer, I use plain old ERB. For the database, I use SQLite as long as I can, migrating to MySQL if necessary to scale. If using an ORM will save time, my choice is DataMapper.
Any or all of those choices may change next week, but that’s what hits the sweet spot between getting up and running fast and having the flexibility to scale up for me right now.
And interestingly, I think I would make the same choices even if I were starting a new company tomorrow. When you build an application that is going to scale to a large number of users, you’re going to wind up rewriting all of it in phases no matter what. You might as well start out focusing on maximizing productivity and replacing components as they break down.