Inside Atlassian

Browse Developer

Article in Developer

Code Approval Policies Explained

Professional teams that produce quality software and maintainable systems often employ a lightweight process to safeguard the introduction of new or updated code to their stable branches. A code approval policy is an agreement within a single team or an entire organization to follow a set of rules regarding how and when code is accepted […]

Article in Developer

Why you should use Clojure for your next microservice

There are a few reasons teams choose to implement some piece of functionality as a microservice. To me the most important ones are: This post focuses on the third point above. Freedom in technology choice This is a very important property of a microservices oriented architecture. Microservices are meant to be small. How small is […]

Article in Developer

Connecting Connect with Spring Boot

Since we wrote this blog post we’ve built a fully supported and more awesome version of a Spring Boot framework. This post is still interesting but describes an early version of a framework, which is no longer supported. Please see Atlassian Connect Spring Boot. To write an Atlassian Connect add-on in Java, the Connect quick […]

Article in Developer

Building helpful CLI tools with Go and Kingpin

Building a well documented command line interface is hard. Allowing users to discover functionality and get help without typing –help or looking at the docs is difficult to do. How many times have you found yourself reaching for –help because you couldn’t quite remember the command name you needed? Here at Atlassian, my team maintains […]

Article in Developer

Bumpversion is automation for semantic versioning

Semantic versioning (or just semver) is a specification for communicating about changes in code from one version to the next. It targets the problem of dependency hell. Dependency hell is where you are when version lock and/or version promiscuity prevent you from easily and safely moving your project forward. In short, semver specifies the first […]

Article in Developer

Building command line tools with Node.js

I’ve written hundreds of Bash scripts over my career, but I still suck at Bash. I have to look up the syntax for simple logical structures every single time. If I want to do anything fancy with curl or sed, I have to go and look up man pages too. I spend hours brute forcing every possible combination […]

Article in Developer

Codegeist 2015: Enhance the tools you use

We’re delighted to announce Atlassian’s 8th add-on hackathon. Do you have an idea to make JIRA, Confluence, HipChat, or Bitbucket even better? Build an add-on, launch it in the Atlassian Marketplace, and you could be the next winner of Codegeist. Whether you’re an experienced add-on developer or trying something new, now is the time to build your add-on […]

Article in Developer

Codegeist 2015: Enhance the tools you use

We’re delighted to announce Atlassian’s 8th add-on hackathon. Do you have an idea to make JIRA, Confluence, HipChat, or Bitbucket even better? Build an add-on, launch it in the Atlassian Marketplace, and you could be the next winner of Codegeist. Whether you’re an experienced add-on developer or trying something new, now is the time to build your add-on […]

Article in Developer

Smaller Java images with Alpine Linux

Sometimes I need to be hit in the head with an axe to find a solution to a problem that has been bugging me forever. A minimal Java container has been on my wish list since I found out about Docker and I’ve been writing about running Java in Docker for sometime already. Official Java images have historically […]

Article in Developer

Collating repositories or grafting earlier history with Git

Let’s add another arrow to our already full quiver of version control tools and techniques. Do you know that the Linux kernel you clone normally contains only a part of its entire history? If you need access to its uninterrupted evolution since the first commit you have to “graft” a few separate repositories together chronologically. In this post I’d […]

Article in Developer

Static Go binaries with Docker on OSX

Recently I’ve been writing a service in Go to enhance the projects dashboard on Bitbucket – if you haven’t heard we launched Atlassian Connect for Bitbucket as a way for anyone to build add-ons for three millions of Bitbucket users out there. Like many other Gophers I’ve been happily deploying my Go services using Docker. The process is smooth and […]

Article in Developer

Learning Go with flashcards and spaced repetition

This year I have been choosing Go for all my coding projects. Go is brilliantly fast, simple to pick up, it has a powerful concurrency model based on message passing, and no forced – always on – object orientation. My impressions are similar to the ones many have previously articulated well – for example see “Go is unapologetically flawed…” […]

Article in Developer

The power of Git subtree

Git subtree allows you to insert any repository as a sub-directory of another one. It is one of several ways Git projects can manage project dependencies. People with good memory will remember I wrote about the usage and the advantages of the command in an earlier piece on Git submodule alternatives. The basics of Git subtree Let’s review […]

Article in Developer

‘–force considered harmful; understanding git’s –force-with-lease

Git’s push –force is destructive because it unconditionally overwrites the remote repository with whatever you have locally, possibly overwriting any changes that a team member has pushed in the meantime. However there is a better way; the option –force-with-lease can help when you do need to do a forced push but still ensure you don’t overwrite other’s work. It’s […]

Article in Developer

Quick Tip: Getting Emacs and IntelliJ to play together

As I’ve mentioned before, I’m gradually working towards my grey-beard badge so for most of my programming I tend to use Emacs. However when I moved into the order-systems team I adopted IntelliJ IDEA, which is our weapon of choice for Java development at Atlassian. This is because while Emacs is a great text editor, IntelliJ takes a holistic and […]