Atlassian Engineering
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.
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?
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.
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.
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.
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 […]
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.
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!
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 […]
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! […]
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 […]
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 […]
