~/devreads

#development

56 posts

22 Jul

dhom 1 min read

Tracking tests on non-default branches was one of the most requested capabilities during the Bitbucket Tests (beta). We heard you, and today, we’re shipping it. Most teams don’t ship from main. Integration happens on develop, stabilisation on staging, releases cut from release. Until now, Bitbucket Tests only tracked the tests from default(main) branch, leaving the […] The post Bitbucket Tests…

company newsaibitbucketbitbucket pipelinesdevelopment

21 Jul

dhom 4 min read

We launched Bitbucket Packages to give teams one place to manage code, pipelines, and artifacts, and we’ve been expanding it ever since, first with Maven and npm, then PyPI and NuGet. Every one of those packages has shared one trait: it lives inside a single repository and inherits that repository’s permissions. Most of the time, […] The post Share packages…

company newsbitbucketdevelopmentpackages

dhom 2 min read

You shouldn’t have to grant full repository admin rights just to let an engineer or release manager trigger a deployment. To solve the all-or-nothing access problem, Bitbucket Pipelines introduces custom deployment permissions (Beta). You can now gate specific environments to authorized users and groups, ensuring safer releases and easier compliance. Left: Add users and groups […] The post Custom deployment…

company newsbitbucketci cddeploydevelopment

15 Jul

8 Jul

Christopher Cheung 2 min read

See what’s stuck, what’s shipping, and what’s complete. All in one place. Starting today, every software team working in Jira can get visibility into agents they’re running across their spaces and repos in a single view, grouped by what needs attention first. Validating agent output at scale Engineering orgs are rapidly scaling from working manually […] The post Every agent.…

developmentjira

1 Jul

30 Jun

Reign Nelson 8 min read

Most new tools get introduced through a feature list. I’d rather start with a workflow. That’s how I approached the new Rovo MCP server. Instead of talking about it abstractly, I wanted to test it in a workflow developers hit all the time: fixing a bug. The question I wanted to answer was simple: can […] The post Fix Bugs…

developmentaijiramcp

29 Jun

Jovana Dunisijevic 7 min read

We recently added support for Enterprise-Managed Authorization in Atlassian Rovo MCP server using Cross-App Access (XAA) and the Identity Assertion JWT Authorization Grant (ID-JAG). In practical terms, this means an admin can centrally authorize MCP access for approved clients like Claude, and when users sign in, Rovo MCP can already be connected and ready to […] The post How We…

development

25 Jun

Christopher Cheung 7 min read

A small team migrated 100+ GraphQL fetchers by turning Jira tickets into behavioral specs that AI agents could execute against. We recently migrated 100+ GraphQL fetchers from a legacy gateway service to a newer platform layer. We managed to do this with 5 developers completing around 2 quarters worth of work in a week, splitting […] The post Spec-driven AI…

developmentjira

23 Jun

amacaraeg@atlassian.com 6 min read

Architecture, module design, and connection lifecycle for bringing external data into Atlassian’s system of work. This is Part 1 of a two-part series on building Teamwork Graph Connectors. This post covers the architecture, module design, and connection lifecycle. Part 2 covers production-grade orchestration — scheduling, fan-out, and failure handling. Engineering teams rarely work in just […] The post Bring any…

development

amacaraeg@atlassian.com 7 min read

Make your Forge connector production-ready with orchestration — recurring schedules, hierarchical fan-out, failure classification, and resilient ingestion. This is Part 2 of a two-part series on building Teamwork Graph Connectors. Part 1 covered the architecture, module design, and connection lifecycle. This post dives into orchestration — the scheduling, fan-out, and failure handling layer that makes […] The post Production-grade ingestion…

development

18 Jun

16 Jun

9 Jun

Sydney Cole 4 min read

Update: This post was written prior to the GSD repository being abandoned by its maintainer. The future of GSD is uncertain, but the lessons from this can be applied to other spec-driven development frameworks. My Intro To GSD I first used the Get Shit Done spec-driven development system for Claude on a client project. This […] The post Getting Shit…

developmentcodebase

Jovana Dunisijevic 7 min read

Code Reviewer already knew the rules. We gave it history. Rovo Dev Code Reviewer catches PR issues related to code bug, code design, code readability, maintenance, testing, etc. It works well. But we saw an opportunity to take it further: to give it something closer to the institutional memory that experienced reviewers build over time, […] The post Improving Code…

development

2 Jun

kwhite@atlassian.com 4 min read

LLMs have become a core tool in every app developer’s stack, powering features that feel almost magical. Users can query data with natural language, summarize long issue threads, and get smart, contextual suggestions, in an instant. Just a few years ago, these features would have been cumbersome or even impossible for developers to build. AI […] The post Build AI-powered…

development

1 Jun

26 May

Rob 2 min read

For OSS work, I work with two git remotes: upstream: the canonical OSS project repository, where main is the default branch and is what gets released. origin: a personal fork. All my feature branches live here. I set up locally like this: Fork the project repo to my account. Clone my fork locally, so the origin remote is my fork.…

developmentgit

22 May

Jovana Dunisijevic 3 min read

Not every developer question starts as a coding task. Sometimes the hard part is figuring out where to look: Jira for work history, code for implementation truth, Confluence for product context, or pull requests for how decisions landed. Research Mode in Rovo Dev CLI came from that experience. What shipped We shipped Research Mode as […] The post From Ambiguous…

development

20 May

14 May

Jovana Dunisijevic 10 min read

How it started What happens when a project estimated at two to three quarters gets built in 14 working days? In 2022, the team built App Updates, a feature that gives organization admins access to release notes about Atlassian changes and controls over how they’re delivered (https://support.atlassian.com/organization-administration/docs/keep-up-with-changes/). It was a great experience for admins, but […] The post Accelerated frontend…

development

Jovana Dunisijevic 12 min read

Intro – my standard flow In my daily work, I have consistently followed the same workflow (also before AI era). With this method, I consistently retained sufficient context to resume implementation – even after weeks of delay – without needing to rediscover information from scratch. Enter AI: the same flow, supercharged The fundamental flow hasn’t […] The post Rovo Dev…

development

29 Apr

dhom 4 min read

At Atlassian, we use Merge Queues to ship frequent changes with confidence and streamline pull request merges. Across some of our busiest codebases, Merge Queues have sharply reduced incident frequency and turned merging from a stressful bottleneck into a background task. Today, most of our largest repositories rely on Merge Queues—over 70 large repos across […] The post Inside Atlassian’s…

how we buildbitbucketbitbucket pipelinesci cddevelopment

13 Apr

Dominic Marks 12 min read

Excerpt In complex, long-running agentic systems, maintaining alignment and coherent reasoning between agents requires careful design. In this second article of our series, we explore these challenges and the mechanisms we built to keep teams of agents working productively over long time spans. We present a range of complementary techniques that balance the conflicting requirements…

uncategorizeddevelopmentsecuritysoftware-engineering

5 Feb

Daisy Mølving 4 min read

This is Part 1 in our blog series on how the design process works alongside Agile methodology to produce results within an integrated team. Updated 2/5/2026. Originally published 2/2/2024 When it comes to developing new software, not every designer approaches the task the same way. While some use a design thinking approach, looking at the tasks from a user perspective,…

experiential designproduct strategy innovationdelivery and practicedevelopment

1 Dec 2025

Dominic Marks 9 min read

Slack’s Security Engineering team is responsible for protecting Slack’s core infrastructure and services. Our security event ingestion pipeline handles billions of events per day from a diverse array of data sources. Reviewing alerts produced by our security detection system is our primary responsibility during on-call shifts. We’re going to show you how we’re using AI…

uncategorizeddevelopmentsecuritysoftware-engineering

25 Nov 2025

12 min read

We’ve been working with MCP servers for a while, and this use case was a perfect opportunity to build out another one. What is an MCP Server? A very simple way to put it is that Model Context Protocol is an "API" that your AI tooling can use to get external data or perform actions by interacting with your application.…

elixirprocessdevelopmentai

24 Nov 2025

10 Sept 2025

Justyna Jurkowska 9 min read

Joanna Maciejewska I'm sure you've seen this quote from Joanna Maciejewska all over social media; I'd bet some money that there are shops already selling t-shirts and mugs with it. Despite seeing it dozens of times, I never thought about it in the context of my day-to-day as a programmer! I, like the quote's author, was more focused on AI…

ai and emerging techdevelopment

21 Aug 2025

Zuko Mgwili 6 min read

The Evolution of Craft: How I Embraced AI in Software Development One Sunday morning after a church service I was enjoying a cup of tea, cake and warm conversations with fellow parishioners. One of the conversations with a particular individual shifted to work and I learned that he works in the energy sector. More specifically, he is an engineering manager…

ai and emerging techdevelopment

15 Jul 2025

Rob 2 min read

I've been writing a simple Swift command line tool called QuickSS. It's a single file swift file, that I compile to a standalone binaryusing: swiftc quickss.swift -o quickss To distribute it on modern Macs, I need to sign it and then get Apple to notarise it. Signing the binary To sign the binary, you need a "Developer ID Application" certificate…

command linedevelopmentshell scripting

8 Jul 2025

Rob 2 min read

I'm currently writing a script that notarises a macOS CLI app which needs to access a password. Rather than put it in an environment variable, I thought I'd use the 1Password CLI. This is the first time I've used it, so these are my notes. The 1Password CLI tool is call op. I installed it via Homebrew with: brew install…

command linedevelopmentshell scripting

15 Apr 2025

Rob 2 min read

One of the projects that I'm working on at the moment uses Stripe which means that we need to handle web hooks in order to ascertain what's happened as that's how Stripe communicates back to us. For production and staging, it's easy enough to register a url on Stripe's dashboard, but when developing, it's a little more complicated as our…

developmentdocker

18 Mar 2025

Rob 1 min read

As a hobby project, I've been writing a screensaver for my Mac that displays my photos with a caption and date taken. To get the width and height of the screen so that I could size the image correctly, I used this code in my ScreenSaverView: self.screenWidth = frame.size.width self.screenHeight = frame.size.height However, I discovered that with two or more…

development

18 Feb 2025

Rob 1 min read

There is a different between OAuth scopes and roles. A scope is the abilities that the client requests that the user can then decide if they are going to authorise that client to do those things. A role is the rights that a given user has within the application. Scope examples are "read-name", "read-address", "read-email", 'write-all", etc. Example roles might…

development

11 Feb 2025

Rob 1 min read

I recently had a problem with a failing Playwright test that only happened when running in Docker. The test that was failing was: let locator = page.locator('a[href="/login"].nav-link'); await locator.click(); await expect(page).toHaveTitle(/Log in/); The test clicks the link to go to /login and then checks that the next page's title contains the text "Log in". Not an especially complicated test, so…

developmentjs

8 Oct 2024

Rob 1 min read

In my Makefile, I check for OpenAPI spec issues with this command: docker run --rm -it -v $(PWD):/tmp stoplight/spectral lint \ --ruleset /tmp/spec/.spectral.yaml /tmp/spec/openapi.yaml When running in GitLab CI, we set the image to stoplight/spectral:latest, and override the entry point so that we can run spectral directly: openapi-lint: stage: test image: name: stoplight/spectral:latest entrypoint: [""] script: - spectral lint --ruleset…

development

1 Oct 2024

Rob 1 min read

Sometimes you need some additional DNS entries in your containers. This is how to do it in compose.yaml. Internal entries Within the containers, the name of the container in compose.yaml is resolvable via DNS. Given this compose.yaml: services: web: # ... app: # ... networks: myapp: driver: "bridge" We can ping web from within the app container. If we need…

developmentdocker

17 Sept 2024

Rob 1 min read

Recently, I set up my PHP dev environment to allow me to step debug from unit tests that I run with make unit The relevant parts of Makefile look like this: # Set DEBUG=1 to enable Xdebug ifeq ($(origin DEBUG),undefined) XDEBUG := else XDEBUG := XDEBUG_SESSION=PHPSTORM endif unit: ## Run unit tests docker compose exec php bash -c "$(XDEBUG) vendor/bin/phpunit…

developmentphp

10 Sept 2024

Rob 2 min read

I'm working on a project that uses MS SQL Server as its database. Recently, I noticed that the SQL Server Docker container now works with Apple Silicon Macs, so looked into setting up a PHP-FPM container with the sqlsrv extension installed. I'm noting the relevant parts of my Dockerfile for when I need them again, so this is entirely an…

developmentdockerphp

3 Sept 2024

Rob 3 min read

For one project that I'm working on the PHP-FPM-based Docker container is built from a Ubuntu container with PHP is installed into it. A little like this: FROM ubuntu:22.04 RUN apt-get update && apt-get upgrade -y && apt-get install -y gnupg curl # Register the Ondrej package repo for PHP RUN mkdir -p /etc/apt/keyrings \ curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg…

developmentdockerphp

6 Aug 2024

Rob 1 min read

I've been doing a few updates to Daily Jotter, my little Mac app that's available in the Mac App Store. It's been a little while since I last updated it and a few things have changed. After updating the code to fix deprecation warnings, my immediate problem was that the debug version of the app wouldn't start up and I…

development

16 Jul 2024

Rob 1 min read

When using Docker Compose, I often map the ports to local ones in the compose.yaml like this: services: web: build: context: ./docker/web ports: - "8080:80" Adding to the port map If port 8080 is in use already on a developer's machine, then we can add a new mapping using compose.override.yaml services: web: build: context: ./docker/web ports: - "8081:80" The compose.override.yaml…

development

11 Jun 2024

Rob 1 min read

I recently released a new version of rst2pdf. We don't do this frequently and it would be very easy to get it wrong. As a result, we have a RELEASE_PROCESS.rst document in our repo that provides a step-by-step list of what to do. I can't emphasise enough how useful such a document is and every project should have one and…

development

30 Apr 2024

Rob 1 min read

I wanted to stash just the unstaged changes in my git repo. There's a git stash --staged which will stash the staged files, but I didn't see an equivalent to stash just the unstaged ones. Obviously, this is a common problem so a minute or two of googling will find the Git stash uncached: how to put away all unstaged…

command linedevelopment

27 Feb 2024

13 Feb 2024

Rob 2 min read

One nice thing about Go is that it can cross-compile which allows me to use my Mac to build binaries for different operating systems. This is increibly useful for providing binaries for Rodeo, my command line Flickr uploader. To do this we set the GOOS and GOARCH environment variables before calling go build. For example to build for x64 on…

developmentgorodeo flickr uploader

6 Feb 2024

28 Jun 2022

Sylvestor George 8 min read

In this article, “remote development environments” refer to AWS EC2 instances where engineers make code changes and can see a running Slack application with those changes. For years, engineers at Slack isolated and tested their changes by running microcosms of the Slack application on their local computers. This was difficult for many reasons: it involved…

uncategorizedcollaborationdeveloper-productivitydevelopmentdevtools

1 Sept 2021

Brian Riggsbee 5 min read

Agile development methods can bolster company culture and empower teams to move quickly, with a focus on frequently adding value for customers. Whether you are a program manager, game developer, event planner, or architect, within businesses where change is constant, it’s key to have flexibility, and that’s where agile shines. While there are a variety…

uncategorizeddevelopmentengineeringproduct-engineering

25 May 2018

15 May 2018

13 Apr 2018

9 Mar 2015

lukaseder 1 min read

Yak Shaving (uncountable): (idiomatic) Any apparently useless activity which, by allowing you to overcome intermediate difficulties, allows you to solve a larger problem. (idiomatic) A less useful activity done to consciously or unconsciously procrastinate about a larger but more useful task. Both interpretations of the term Yak Shaving as explained by Wiktionary are absolutely accurate … Continue reading Yak Shaving…

javaopen-sourceapi designdevelopmentrefactoring