What does a Forge app developer actually build for you?

Somewhere next to your Jira, there’s a spreadsheet. Maybe it holds the equipment list Jira has no way to model. Maybe someone retypes numbers out of the system next door every Monday. Maybe your process needs a step Jira has no action for, so a person does it by hand. Or maybe you’re paying for an add-on at your full user count while eight people use it. If any of that sounds familiar, that is the gap Forge app development fills. Forge is Atlassian’s own platform for apps that run inside Jira and Confluence, and a Forge developer builds the piece your setup is missing: a field type Jira doesn’t have, a screen that reads from another system, a behavior of your own that your automation rules can call. Not every gap needs one, though. The skill is telling a real gap from a requirement that was only phrased like one.

Key takeaways

  • Most requirements that look like development turn out to be configuration. Jira’s custom fields, workflow validators and conditional request forms reach further than their reputation suggests.
  • Code is warranted when the capability exists at no layer: a field whose options depend on another field, a value held in a system Jira has never heard of, or behaviour that has to fire on a transition or a schedule.
  • Licensing is a second, separate reason to build. A Marketplace app is licensed across your entire user count even when eight people open it, while a private app carries no per-user licence.
  • The best app is the smallest piece that was missing. It hands its action back to the automation rule builder so admins keep control of the process around it.
  • Ownership and handover are set in the agreement before the build starts, and both models are available: you take the source code and your own deployment, or the app stays with us under an ongoing arrangement.

How much of this can you solve without writing code?

More than most teams try before they call a developer. Jira’s configuration layer is deeper than its reputation: custom fields with different options per project and issue type, workflow validators that block a transition until the data is right, JSM request forms that show and hide questions based on earlier answers, and automation rules moving work between all of it. One quick test: give your requirement to ChatGPT or Gemini and ask how it’s configured in Jira. If you can follow the flow it describes, you’re good to go. That’s an admin’s afternoon, not a development project.

If you are still unsure after that, reach out and we will look at it with you. Part of the job is talking you out of the requirements that don’t need a developer, so the budget lands on the one that does. What’s left after that is narrower and more interesting: the problems specific to how your business works.

When does a requirement actually need custom code?

When the capability doesn’t exist at any layer. Some requirements aren’t something configuration could ever reach. They need a thing Jira has no concept of. A field whose options depend on what was picked in another field. A value that lives in a system Jira has never heard of. Or it’s a behavior nothing in Jira can express: something that has to happen on a transition, on a schedule, or against another system. Forge is open-ended about what it can add. A new kind of field, which your admins then create and manage like any other custom field. A screen of your own. Code that runs on a Jira event or on a schedule. An action your automation rules can call. From Jira’s side it all behaves like native configuration, because it is. What the platform asks in return is that the work fits its shape: anything long-running has to be built to run in pieces rather than in one pass. That is a decision your developer makes at the start, so it shapes the design instead of surprising you later.

Sometimes the app exists, and the licensing is the problem. Marketplace apps are licensed to your whole instance, not to the people using them: an app "will only function if its license matches or exceeds the tier of the host product – even if only some of your licensed users need to use the app" (Atlassian licensing). So a 900-user Jira pays 900-user pricing for a feature eight people open, every renewal, forever. A private app carries no per-user licence at all. The developer is billed for platform usage, and each app gets a free monthly allowance first (Forge pricing). It’s a real saving, with a real limit: it holds when you need one slice of a big app, not when you’d be rebuilding a mature product in full.

A good app is the smallest piece that was missing. Once the capability exists, the rest of the process belongs back in native rules. A well-built app hands its action to Jira’s automation rule builder, so your admins can call it from a rule like any built-in step. Your branching, reminders and escalations stay in Jira and JSM automation, where they can change them without you. An app that swallows the whole process is one nobody can adjust without calling the developer. That is usually what has gone wrong when an app gets rebuilt a couple of years in: it was given too much of the process to own.

Should you configure it, buy it, or build it?

Three routes close the same gap, and which one fits depends on what is actually missing:

AspectConfigure it in JiraBuy a Marketplace appBuild a Forge app
Best whenThe capability exists and just needs setting upSomeone has already solved a big, common problem well enoughThe capability is missing — or you need one slice of it
What you payAdmin timeEvery licensed Jira user, every renewal, used or notOne build; platform usage billed to the developer
Who can change itYour adminsThe vendor owns the roadmapAn experienced Forge developer
Where the data sitsIn JiraWherever the vendor puts itYour Jira, and the storage location you choose
When Jira changesAtlassian handles itThe vendor updates it — or doesn’tA versioned app you redeploy and re-test

Read the middle column carefully if you are comparing on price alone, because it is the one whose cost keeps arriving. Configuration is paid once in admin time and buying is paid every renewal at your full user count, so the comparison changes shape depending on how long you expect to run the thing. Over five years a private app built for one slice of a problem is frequently the cheapest of the three, and over five months it is almost never worth it.

When is building the wrong call?

Three situations, and none of them are close. If a mature Marketplace app already covers your requirement well and your user count is modest, buy it. You would be rebuilding somebody’s multi-year product to save a licence fee that was never the real cost. If the requirement is still moving, wait, because code written against an undecided process gets thrown away. And if nobody internally can say who owns the app after launch, solve that before commissioning it, not after.

There is a fourth case worth naming because it comes up most often: the requirement that was only phrased like development. Someone describes what they want in the language of a feature, and underneath it is a custom field and a validator. Talking those out of the scope is part of the job, and a developer who never does it is not being helpful.

What does a delivered Forge app look like?

Four apps so far, each one a gap nothing else covered: dependent fields, a field that holds a group of users, a field that pulls equipment data from the system that owns it, and the one built for German audit firms. That last one is the clearest case of a capability that existed at no layer. Auditors receive a client’s accounting data as a GDPdU export from DATEV, the standard German format for handing accounting records to an auditor. It is complete and correct. It is also close to unreadable: answering a single question about it meant loading the files into a separate verification tool and running complex queries. The app moves that question into Jira, into the engagement the auditor is already working in: they ask in plain language and get an answer against that client’s own export. Audit work sets the bar for what happens to the data. It is kept private, is not trained upon, and stays strictly in Germany, with every component of the application pinned to Frankfurt (data residency).

Frequently asked questions

Do we actually need a custom app, or can this be configured?
Configured, more often than not, and that’s the first thing worth checking. Field contexts, workflow validators and conditions, JSM form logic and automation rules cover a lot of what gets described as "Jira can’t do this". A custom app earns its place when the capability is absent everywhere: options that depend on another field, data mastered in another system, a field type Jira doesn’t have. Sorting your list into those two piles is usually the first half of a discovery call.
Our custom app runs on Connect — what happens to it?
It needs a plan, and the deadline is already set. Connect reaches end of support at the end of 2026; after that, private Connect apps get no security updates, Atlassian support can’t fix issues caused by the older technology, and the app may stop working over time (Atlassian on private apps). Rebuilding on Forge is usually less work than it sounds, because the requirement is already known and running. The audit comes first: what the app really does today, and how much of it is now native. With an app that old, some of it usually is, and that part gets deleted rather than ported.
We pay for an add-on almost nobody uses — is building our own cheaper?
Often, yes. The saving comes from how the licence works; building is never cheap in itself. A Marketplace app has to be licensed at your host product's tier "even if only some of your licensed users need to use the app" (Atlassian licensing), so a large instance pays full freight for a feature a handful of people open, every renewal. A private Forge app has no per-user licence; the developer is billed for platform usage, and each app gets a free monthly allowance first, including 200,000 GB-seconds of compute (Forge pricing). Where it stops being true: if you use most of what a mature app does, buying it is the better deal. Compare one build against the renewals you'd pay over the same years.
Where does a Forge app store its data, and can we control the region?
In your own Jira site, and yes. Forge apps run inside Atlassian’s own infrastructure (Forge platform), and anything a Forge app stores follows the region your Jira site is already set to (data residency). Germany is one of those regions, which is how the audit-firm app is deployed. The other half is design, not platform: an app can only reach an outside service if that service is named up front (what an app is allowed to reach), so what leaves your Jira is a short list you can read rather than something you have to take on trust.
Can we extend the app later, or are we stuck with what we asked for?
You can extend it. A Forge app is versioned code you redeploy, so adding a field, a check or a new action next year is normal work rather than a rebuild. What decides how often you need a developer at all is the scope you set at the start: keep the app to the capability that was missing, leave the process in configuration and automation rules, and most changes land with your own admins. The test to apply: if a rule needs a new condition next quarter, can your admin do it without calling anyone? The answer should be yes.
If we stop working together, what happens to the app?
That gets settled in the agreement before the work starts, and both answers are available. In one, you receive the source code and the app is deployed to your own Atlassian developer site, so it is yours to maintain, extend, or hand to another developer without asking us. In the other, the app and its deployment stay with us and you are covered by an ongoing arrangement. Neither is an automatic default, which is rather the point: ask for the one you want in writing instead of assuming which you are getting. Worth asking any Forge developer the same question early. The answer is much easier to get before a contract than after one.
Can a Forge app bypass our Jira permissions?
Only if it’s built to, and that choice should be deliberate. An app can act on behalf of the person using it, which gives it "at most the permissions of the calling user"; Atlassian’s guidance is to use that mode "whenever you are performing an operation on behalf of a user". Or it can act as itself, using a service account that "will usually have a higher level of privileges" (Forge permissions). Both are legitimate. Enforcing the user’s own permissions is right for anything a person triggers; the app’s own access is what lets a scheduled job or a background check work at all. Picking the wrong one is how an app quietly shows somebody data they shouldn’t see, which is the part worth an expert’s eye before it’s built rather than after.

If there’s a spreadsheet doing the job Jira should be doing, let’s look at it. A free discovery call will tell you whether it’s configuration, a Marketplace app, or something that has to be built — hello@viter.io.

Sources

External claims on this page were checked against these documents in August 2026:

About the author

Ben Friedman is an Atlassian consultant and Forge developer with over 8 years of hands-on Jira work, certified ACP-610, ACP-620 and ACP-120. He has delivered for hundreds of customers across all business verticals, supporting their configuration, administration, and ongoing support and maintenance. Ben is building JAMEs, the AI Jira admin.