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.
Slack Slack is the backbone of our communication. It helps make discussions very visible across the company, which is especially important since we have 5 remote staff, and we support work-from-home days as well. Slack allows everyone to be on the same page about important discussions. We do still value face-to-face discussions too though. If there’s an argument, we have it in person, not in Slack!
Confluence Transparency means a lot to us, so we blog and share information internally a lot. Confluence is our intranet wiki that we use for everything that’s “too big” for Slack. We track meeting notes, we propose roadmap changes, we write and discuss specs for features here, and so on.
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, we request feedback from another either individually or during company-wide 360 cycles, and we prepare and take notes with the 1:1 feature too.
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 has been built with React, and we’ve been migrating old code both from Angular and from Wicket to React.
AngularJS Angular was the framework in 2013, but sadly it didn’t live up to expectations. We still have some Angular code lingering, but it’s less and less 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.
CSS3 If you come from a B2B background, you may have suffered IE fatigue, not being able to use all features in CSS properly. We cut ties with IE 11 a while ago, only supporting Edge these days. So nothing to fear here! 🙂
TypeScript We only started using TypeScript in 2018, migrating our most important components step by step. But we’re so impressed with the results, so all work now is naturally in TypeScript, and we wonder why we didn’t start much earlier.
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.
NodeJS We started using Node for niche functionality in 2014, but not really for the main product. This is now changing, and we’re considering building new functionality in Node using Cloud Functions wherever possible. Want to help? Join us!
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 and Node support it’s rocking again and we couldn’t be happier!
Spring We’re using Spring for all credential-handling, for dependency injection, and for our our REST APl.
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. But all customer-facing code is REST- and React-based now, and we’ll move our back-office screens to React and Node over time as well.
Gradle We use Gradle combined with Webpack 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.