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…
#development
56 posts
22 Jul
Record your screen, talk through what you want done, and let Loom generate a structured action plan agents can use to execute tasks. The post Give AI agents the full picture with Loom video prompts appeared first on Inside Atlassian.
21 Jul
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…
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…
15 Jul
New Jira and Teamwork Graph capabilities help engineering teams plan, assign, govern, and measure work across humans and AI agents. The post How we’re evolving Jira for AI-native software development appeared first on Inside Atlassian.
8 Jul
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.…
1 Jul
Atlassian Rovo MCP gives coding agents deeper, scoped access to complete their goals in Jira, storing and accessing critical context directly from the IDE or terminal. The post Introducing new MCP capabilities that turn context into action appeared first on Inside Atlassian.
30 Jun
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…
29 Jun
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…
25 Jun
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…
23 Jun
How specialist agent orchestration anchored to Jira keeps complex coding tasks on spec. You have probably felt this. You hand a capable AI agent a real piece of work, a proper spec with edge cases and acceptance criteria, and for a few minutes it is sharp. Then it slips, it forgets a decision it made […] The post Why AI…
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…
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…
18 Jun
Delegate coding tasks to Claude, anywhere in Jira The post Introducing Claude Agent for Jira appeared first on Inside Atlassian.
16 Jun
Brief your local coding agent with one click from Jira. No copy-paste, no context lost. The post Deeplink to your AI coding tool from Jira appeared first on Inside Atlassian.
9 Jun
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…
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…
2 Jun
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…
1 Jun
Flaky tests and stale feature flags drain engineering time quietly. Here is how Atlassian's engineering team uses AI agents in Jira to automate both. The post How We Cut up to 80% of Engineering “Chores” Using AI Agents in Jira appeared first on Inside Atlassian.
26 May
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.…
22 May
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…
20 May
Assign work items directly to Cursor from Jira, your agent orchestration platform The post Introducing Cursor in Jira appeared first on Inside Atlassian.
14 May
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…
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…
29 Apr
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…
13 Apr
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…
5 Feb
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,…
1 Dec 2025
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…
25 Nov 2025
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.…
24 Nov 2025
Docker is an open-source platform that enables you to build, deploy, and manage applications within lightweight, portable containers. When using ... Read More The post How to Install Docker on Debian 13 appeared first on RoseHosting.
10 Sept 2025
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…
21 Aug 2025
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…
15 Jul 2025
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…
8 Jul 2025
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…
15 Apr 2025
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…
18 Mar 2025
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…
18 Feb 2025
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…
11 Feb 2025
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…
8 Oct 2024
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…
1 Oct 2024
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…
17 Sept 2024
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…
10 Sept 2024
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…
3 Sept 2024
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…
6 Aug 2024
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…
16 Jul 2024
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…
11 Jun 2024
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…
30 Apr 2024
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…
27 Feb 2024
Shortly after building a script to create binaries for Rodeo, my command line Flickr uploader, I realised that I could use a Github Actions workflow to run it and attach the created binaries to the Release page once I had created it. This is what I did. Trigger on release A GitHub Actions workflow is a YAML file and each…
13 Feb 2024
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…
6 Feb 2024
When I was building Rodeo, my command line Flickr uploader, one thing I wanted to do was set the version number that you see when you type rodeo -v to the correct version when I build the application for release. The basic process I wanted was: Tag git repository with new version number and push Build rodeo with that version…
28 Jun 2022
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…
1 Sept 2021
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…
25 May 2018
15 May 2018
13 Apr 2018
9 Mar 2015
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…