Inside Atlassian

This page is no longer in use.

Atlassian Engineering

Article in How We Build

Our not-so-magic journey scaling low latency, multi-region services on AWS

Engineering stateless, high-availability cloud services comes with juuuuuuust a few challenges. Here’s how we (eventually) slayed the dragon.

Article in How We Build

Using spec-first API development for speed and sanity

An implementation-first approach to API development is all well and good… but might spec-first be even better?

Article in How We Build

Caching in: performance engineering in Jira Cloud

Go behind the scenes with the Jira team and see how we performance-engineered our way to a zero-affinity cloud architecture that runs at enterprise scale.

Article in How We Build

A deep, deep dive into Java debugging

Follow senior architect Robbie Gates all the way down the rabbit hole to the JVM code, and learn a few new debugging tricks to keep up your sleeve.

Article in How We Build

I ran a ludicrously complex engineering project (and survived)

Coding? That was the easy bit. Delivering the largest project in Atlassian history was all about staying true to proven engineering principles – plus a few new ones.

Article in How We Build

How to deploy Java apps with Docker (a quick tutorial)

For those new to Docker, let me say “Welcome to the party!” It’s an easy way to deploy, run, and manage applications using vm-like containers that are independent of elements like hardware and language, which makes these containers highly portable. And it’s all the rage. So how do you deploy Java apps using Docker? You’re […]

Article in How We Build

Git hooks for continuous integration

Git hooks are awesome in the context of continuous integration, so I want to share three CI-related use cases and point you to some ready-made hooks you can add to your workflow. If you’re new to Git hooks, no worries: we’ll start with the basics.

Article in Developers

Open letter from an @ignored test

Dear developer, I’ve been wanting to talk to you for a while now, but words don’t always come easy. We’ve had some really fun times together. I still remember the first time I warned you about a minor bug in your code, and how happy you were for having me in your life! Do you remember it? I also remember the first time you refactored me to make me more efficient and how well-written I felt afterwards… ah, great times!

Article in How We Build

One weird trick for powerful Git aliases

(Yes the title of this post is a pun, apologies!) I have written about aliases before! See for example a collection of my favorite git aliases or peruse my personal list on Bitbucket. Recently at our Summit I showed a simple technique that can really unleash the power of your Git command line. Several people […]

Article in Developers

Git subtree: the alternative to Git submodule

(Updated in January, 2017.) The Internet is full of articles on why you shouldn’t use Git submodules. I mostly agree, although I am not so harsh in my evaluation. As I explained in a previous post, submodules are useful for a few use cases but have several drawbacks. Are there alternatives? The answer is: yes! […]

Article in Developers

Git submodules: core concept, workflows, and tips

Including submodules as part of your Git development allows you to include other projects in your codebase, keeping their history separate but synchronized with yours. It’s a convenient way to solve the vendor library and dependency problems. As usual with everything git, the approach is opinionated and encourages a bit of study before it can […]

Article in Developers

Covariance and Contravariance in Scala

I spent some time trying to figure out co- and contra-variance in Scala, and it turns out to be both interesting enough to be worth blogging about, and subtle enough that doing so will test my understanding! So, you’ve probably seen classes in Scala that look a bit like this: [cc escaped=”true” lang=’scala’ ] sealed […]