Tech Stack: The tools we use and love
We are standing on the shoulders of giants
We’re building a very complex yet easy to use product, and we’re shipping new features all the time — see our release notes here. We would not have been able to work as focused and as quickly if we didn’t have access to some amazing tools. In no particular order, here are a few applications, tool and libraries that we love and recommend.
Confluence Transparency means a lot to us, so we blog and share information internally a lot. Confluence is our intranet wiki that makes this possible. We use it to discuss just about anything: We upload early drafts of new company-videos, to propose roadmap changes, to document features internally, or to share feedback from customers. We use the commenting functionality a lot, after all we want everyone to help improve stuff before it goes live.
Small Improvements It shouldn’t come as a surprise that we’re using SI internally too. We set our own goals and objectives, we praise each other for a job well done, and three times a year we conduct a 360 cycle. Our team leads use the 1:1 functionality too. Dogfooding win!
Slack We prefer to have all our developers in one office, but even then it can make sense to ask a quick question online. Our support team is distributed though, and being able to ping them (or check out their workplace chatter) is a huge benefit and makes us very fast and efficient. And we’re very open to “work from home” and “work from the dentist waiting room”, so a lean team communication tool is a must-have for us.
Trello We love the transparency Confluence brings us, but our love for JIRA has cooled, so we moved to Trello. It’s just so much faster to deal with day to day planning tasks. And while Trello filtering is no match for JIRA, this forces us to clean up old tasks more frequently, which is probably a Good Thing.
ReactJS All our new frontend since early 2016 is using React, and we’ve not looked back ever.
AngularJS That said, a decent share of our older screens is still built with Angular. Our migration is in full swing though, and we replace some components every month.
QuillJS Building a functioning Rich Text Editor used to be black magic and nobody got it right. Enter QuillJS. To us it still feels like black magic, but: It. Simply. Works. We’ve not had one reported quirk since we launched our RTE support in early 2016. It’s almost boring to use such solid tools.
CSS3 We love using the latest tools, and we’ve just phased out support for IE10. As you can imagine, this saves us tons of time, and makes life much more enjoyable on the front-end.
D3 It took a while to migrate away from Highcharts and handrolled JQuery charts, but the transition is now almost complete and we’re using D3 across the board.
Webpack We tried out Webpack during an earlier Hackathon, managed to make it work in a day, and have implemented awesome dependency management and progressive loading of resources since
Mocha Someone needs to run our frontend tests, and we use Mocha to get the job done, aided by some legacy Karma runner tests.
CSS Modules CSS Modules help us avoid headaches with global namespaces and make dependencies explicit.
LESS We decided to use LESS early on, and are still happy campers.
InVision We used to think “prototyping in HTML” is faster, but we were wrong. Nothing beats InVision when it comes to sketching flows and discussing them remotely or asynchronously. We still embrace change, no InVision prototype makes it 100% into the product. But it sure helps speed up the process!
Google App Engine This is the infrastructure on which we host our service and store our data, and it comes with a huge array of useful services, like task queues, memcache, remote URL fetch, etc. App Engine was in a bit of a decline from 2014 to 2017, but now with Java 8 support it’s rocking again and we couldn’t be happier!
Legion of the Bouncy Castle Don’t be fooled by the funny name. Bouncy Castle is darn serious software. It enables any Java application to employ seriously hard cryptography. We use it to encrypt textual user data. By the way, for password security we use bcrypt. If you’re a security nerd, you may want to continue reading our security policy next!
Objectify The Google Datastore is great but rather low-level. Enter Objectify, a slim Object-to-Datastore mapper that simply works. It employs very little magic under the covers, so it’s reliable and predictable too.
Elastic Search A major shortcoming of the App Engine datastore is the lack of query power. So our shiny new activity stream queries a hosted Elasticsearch instance for optimal performance.
Apache Wicket Our application was initially written in Apache Wicket entirely. It’s a great framework for rapid prototyping and helped us getting SI off the ground. Even today we’re writing many internal admin screens with Wicket, but as we’re moving towards a REST based JS application, the Wicket UI parts are starting to recede in favor of REST and ReactJS.
Gradle We use Gradle combined with Gulp to to build the entire application and to continuously deploy it to our App Engine servers. Also, Gradle helps us with tedious things like creating IDEA projects on new computers (and whenever a dependency has changed really).
Stackdriver Now also incluced in the Google Cloud offering, but still worth a shout-out: Really advanced monitoring and filtering in the cloud that enables us to not have a dedicated ops team, but leave ops to our dev-ops-inclined backend developers.
JProfiler JProfiler is our tool of choice when performance hits rock bottom, or when the session size explodes, or whenever we feel that it’s time to save the planet by reducing our server power consumption (and our server costs).
Intellij IDEA It’s obviously entirely up to you to pick your IDE, but we just wanted to mention you don’t have to settle for Eclipse because it’s free, we’ll happily pay your IDEA license as well.
DNSimple Ah, the joy of using a simple and clean user interface. DNSimple is just perfect for the boring task of managing your DNS, setting up MX records, configuring redirects etc. And their support and responsiveness has been amazing, so a big shoutout for the slick way of managing your domains.
Kibana While App Engine is great to host the SI service, the logging is terribly lacking. So we built our own dashboard, using Elastic Search and Kibana, and haven’t looked back!
TeamCity Continuous integration is crucial to ensure our code is always deployable. We’re following an optimistic approach to branching: Master should always be ready for production, but we’re also trying to keep the number of branches reasonably small, so committing smaller features directly to master is fine. Large amounts of unit-, integration- and browser tests ensure we can (almost) always deploy from master.
GitHub We use git for version control, and we’ve decided to host everything on GitHub. We’ve often considered setting up our own servers, but it’s oh so convenient to use GitHub. Its nice design is a constant reminder to us that we need to up our game even further.