We regularly introduce fresh blog content and updates every few weeks. During our work, we frequently encounter unexpected challenges, and now and then, we stumble upon exciting Eureka moments that we're eager to share.
As Atlassian App developers, we are well-versed in using ActiveObjects, which is the go-to ORM for handling most database operations in Jira plugin development. ActiveObjects makes it easy to perform basic CRUD operations, create tables etc. However, when it comes to more advanced querying, such as aggregating data with groupBy or performing complex SQL operations like joining multiple tables, ActiveObjects falls short. For example, if you want to retrieve a specific count of grouped results, ActiveObjects doesn’t offer the flexibility needed, often returning only the count of the first row or limiting you to entity-specific operations.
To overcome these limitations, Atlassian provides a powerful library called PocketKnife QueryDSL. This library enables us to perform complex queries that ActiveObjects can't handle, such as joining multiple tables, aggregating data, and retrieving specific column counts with groupBy. PocketKnife QueryDSL offers type-safe queries and provides greater control and flexibility over how data is retrieved and manipulated in Jira, opening up possibilities for more sophisticated database operations. Below is step by step tutorial of how to integrate PocketKnife QueryDSL to your plugin -
In the dynamic realm of software development, the choice of an Integrated Development Environment (IDE) is akin to selecting the perfect instrument for a craftsperson. It's a decision that profoundly influences productivity, workflow efficiency, and ultimately, the quality of the end product. Among the myriad of options available, IntelliJ IDEA stands out as a beacon for Java developers, offering a robust platform tailored to their specific needs.
“An IDE is not just a tool; it's a sanctuary where ideas take shape and dreams become code.”
Webpack: Simplifying Asset Management for Atlassian Plugins

Understanding Webpack
Written by : Harshit Sharma on Sep 13, 2024
Artificial intelligence (AI) is rapidly transforming various industries, and software development is no exception. ChatGPT is helpful, but not an answer to every question. Developers should avoid too much reliance on ChatGPT. Developers should know how to use their skills and try to solve the complex problem first on their own to increase their knowledge and self-reliance, and also do research before using AI tools like ChatGPT.
Developers might become overly dependent on AI tools, leading to a decline in their problem-solving skills and deep understanding of programming concepts.
A design system is like a blueprint for digital products. It's a set of rules and tools that teams use to keep the look and feel of products consistent. A design system streamlines your team's workflow by tackling repetitive tasks and addressing recurring issues, reclaiming valuable time. A design system aids in managing the complexity of product transitions between dark and light themes. A design system teaches new designers about the product and its rules, allowing them to get productive faster.
It has many advantages, but it does not come without some obstacles. One of the challenges is continuous maintenance. Like any other product, the design must be kept up to date to remain relevant.
Public design systems tackle the aforementioned problem in large part since they provide thorough documentation, pre-built components, and design principles. This can greatly minimize the time and effort necessary for the first setup when compared to creating your own system from scratch. Public design systems are often maintained by internal teams or even the open-source community. They frequently issue updates, upgrades, and bug fixes to keep the design system relevant and current with the newest design trends and best practices. This reduces the strain on your team to constantly monitor and update the design system. In this article, we will look at one of the public design systems, the Atlassian Design System.
Selenium is a powerful tool for web automation, and when combined with Python, it becomes an easy-to-use yet efficient framework for automating tasks on web applications. In this tutorial, we will walk you through automating a simple ‘Hello World’ task on Jira Data Center (DC) using Selenium in Python. We will cover how to detect web elements, execute JavaScript code, and even debug your automation script. Let’s dive in!
In today's digital World, website performance is directly linked to the success of your online business. Websites that load quickly retain users better than those with slower load times. For example, a case study on How The Economic Times passed Core Web Vitals thresholds and achieved an overall 43% better bounce rate ,demonstrates the real cost of website performance. In this blog, we'll explore the key factors that make a website faster and how you can improve your site's speed.
1. Reducing Time to First Byte(TTFB):
TTFB is a metric that measures the time between the request for a resource and when the first byte of a response begins to arrive.
The First Request for Web Page is for an Html resource. So Reducing TTFB for first resource loading will make website load quickly
To measure the Time to First Byte (TTFB) for a website, you can generate a Lighthouse report using your browser's developer tools. Start by right-clicking on the website and selecting "Inspect." Navigate to the "Lighthouse" tab within the developer tools. From there, click on "Analyze page load" to generate the report. Once the analysis is complete, you can find the TTFB details in the relevant section of the report, similar to the example shown in the attached image.

Try to minimize the redirects as it requires browser to make an additional request. Focus on reducing Same origin redirects because as you have control over it while managing cross origin redirects can be tough as it is generally is out of your control.
Use Content Delivery Network(CDN) as they helped in quick loading by caching and compressing static resources.
A TTFB time of 0.8 second or less is considered good for websites
The Model Context Protocol (MCP) is an open standard that connects AI models to your tools, databases, and services in a secure, controlled way. Think of it as a translator that helps AI understand and work with your systems.
AI models are powerful but often lack access to real-world data. MCP solves this by creating a secure bridge between AI and your existing tech, without giving up control over your data.
Struggling to stay organized in your Jira projects? Whether it’s keeping track of issues, prioritizing tasks, or maintaining clarity across your workflows, Jira can feel overwhelming without the right tools. One simple yet powerful feature that can help is labels. Labels are custom tags you can attach to issues to highlight specific characteristics. They offer a flexible, informal way to classify and organize work—often more intuitively than using components or version numbers.
In this blog, we’ll cover:
What Jira labels are and how to use them effectively
Common challenges teams face when managing labels
How our plugin Vamhi Labele helps overcome these limitations and brings structure to your labeling system
Controlling who can create or modify branches in a repository is a critical part of maintaining code quality and workflow discipline — especially in large teams or regulated environments.
Bitbucket Cloud provides a powerful mechanism for managing this via Branch Permissions. But what if you want to allow a pattern, like release/*, but exclude a specific branch, say release/1.3.0?
Let’s explore how Bitbucket lets you do just that.