Tech Round Table 2013 H1

The first half of 2013 has reinforced Red Badger’s belief in polyglot architectures and solutions built from small, sharp tools.

Tech Round Table 2013 H1

We held our most recent Tech Round Table event in June, but we’ve been so busy that writing it up has slipped. And we’re sorry for that.

There were some really interesting movements, though, in the tech, tools, services and platforms that we’ve been using. Some of the things that we thought were great last year have fallen out of favour this year, usually because we found something better. Or because we changed. Or because the world changed. We’re not ashamed of that; we have “strong opinions, weakly held” and are not afraid to shed stuff that no longer fits, in favour of something that fits better.

For example, last year we largely loved jam.js - it’s actually a good (client-side) package manager built on top of the excellent require.js. But we didn’t like the fact that packages have to be wrapped, in order to work with jam, so when the BDFL of the original package releases an update, you’re still reliant on the first person that wrapped the package (and put it in the central repo) to update the wrapper. Instead, we became very fond of component by the prolific and highly respected TJ Holowaychuk. This follows a much more modular approach that eschews big monolithic packages (like jQuery) in favour of small, lean components that do one thing and do it really well. Each component is a commonjs module and contains everything it needs - templates, scripts, styles, images, etc. We can use jade templates and CoffeeScript, just like we do in Node.js. And what gets delivered to the client is small and tight, with no wastage whatsoever.

Last year we were starting to get our hands dirty with devops and automated deployments; now we provision and deploy everything automatically, with Continuous Delivery pipelines on every project. We started out with Puppet and Capistrano. This year we haven’t used Puppet once. Instead we prefer the all-singing Chef and the fully declarative and ultra-simple Ansible. We just didn’t get on with Puppet’s DSL, which seemed both unintuitive and unnecessary. Sometimes a DSL can take away more than it adds. We’re still using Capistrano heavily, although sometimes we deploy with Ansible instead - it’s a lot quicker to set up.

We rebuilt the Red Badger website this year as a static site, using the promising DocPad static site generator. It's been a very popular decision within the company. The site is now much faster, more reliable and secure, fully responsive and working brilliantly well on all devices. Content is pushed to Github, which triggers an automated build and deployment to staging or production. Most surprisingly, the markdown format of the content is easily understood by everyone in the company, from directors to designers. Everyone is now editing content and we are all left wondering whether the days of the traditional CMS are numbered.

We do a lot more Ruby now. And we’re also getting into functional languages a lot more by experimenting with Scala and Clojure. If it’s a node app then CoffeeScript is still as popular as ever. We want every developer at Red Badger to learn a new language every year, even if it’s not something they’ll ever use. It definitely enriches your use of the languages you do use. We want to learn Go and Haskell.

The testing landscape didn’t change as much - we’re doing more cucumber and rspec to match the rise in our use of Ruby, the node stack remains mocha, chai and sinon, and the .Net stack specflow. On the automation side of things we’re using capybara, webdriver and selenium.

There’s been a significant change in the way we’re writing node apps in that we’re using promises a lot more now than ever before (mostly using the Q library), making for much clearer, cleaner and more compact code. We can’t wait for ES6 generators to revolutionise async in JavaScript.

OK, here is the full list:

Frameworks

Template Engines

Data Serialization

Languages

Storage/Data

Package/Dependency Managers

Server Application Stack

Frontend

Client-side Frameworks

Utils/Libraries

Realtime Web

Misc

OS/Apps/Services

DevOps

Testing

Cloud Infrastructure