In this article we will discuss how microservices and micro-frontends architecture empowers teams to deliver more frequently and independently to production. And when established product-centric roadmaps aren't good enough to answer the question “When will it be delivered?“ We will also outline why delivery-centric roadmaps are a better fit and what are the ways to define your release scope in Jira in order to plan, orchestrate and deliver a release cross-team, cross-project or cross-company.
The world of ‘software development’ has changed. Most backends nowadays are based on services and microservices (m/s). They are also owned and delivered by different teams independently. Some of them are single-tenant serving specific clients or segments. Others are multi-tenant serving all the clients in a specific region or Datacenter (DC). Micro Frontends is also picking up to do the same for client-facing Apps what m/s did for backend.
With all this new eco-system in place almost any feature you develop presumes changes in multiple m/s, widgets that need to be delivered to finally toggle ON your feature flag. To make things easier you can always package those changes somehow in a single delivery or orchestrate multiple deliveries in a coordinated fashion.
But you ‘do not want to’, mainly because:
Product-centric roadmaps are usually built around the structure of software requirements (e.g. Initiatives split into Epics that are split into Stories and/or Technical Tasks). Stories and Tasks are usually Team level and sit with teams and their deliveries. But Epics in most cases span across different teams/departments (some call it Program level), and the notion of delivery and ownership is becoming blurred.
It’s very difficult to answer the question when a small Feature will be delivered, because usually it includes changes in multiple services and frontends owned and delivered by different teams with their own delivery technique and cadence.
Things get worse if this feature requires configuration per client (b2b) or customer segment (b2c)... or you have a distributed production environment with a private cloud in the US and another one in EMEA. This is when questions like “When will Feature X be delivered?” become really tough to answer.
One of ‘The Key Values and Principles of Agile Manifesto’ says
Working software is the primary measure of progress.
What is working software? Software deployed to the production environment and configured for the end customers to use. There’s no credit given to anything partial.
If you look at it from this perspective, your ‘working’ Feature X is becoming a set of deployments of a set of services and Apps with appropriate configurations applied. We will be calling these deployments ‘releases’, comprised of the changes engineering teams performed to implement the requirements given for Feature X.
Planning, visualizing, orchestrating and deploying your releases across multiple services and Apps will give you the ultimate solution to answer the question “When will it be delivered?“. But also help in a way to manage the flow of different deliveries happening, spot impediments, clearly understand the impact, and manage the expectations on a) “Why so slow?” and b) “What’s the new date?“
In Atlassian Jira, release management is all about ‘Affects versions and Fix versions’ standard fields that are tied to any issue type you create. They are referencing a unified lookup that is configured on Project level and can't be shared cross-project.
So, in order for you to define your release scope, you need to add a new version in Releases lookup and assign issues to it via the Fix Version field.
This might be good enough if you track your different components in separate projects and have a good culture of using the Fix Version field. It would also be okay to have a plain list of versions of different Apps and services if you track it all in a single project (just difficult sometimes not to get lost in this list).
Once you track releases of individual components as Fix Versions you need a tool to aggregate them into something bigger to track your Epics/Features or more complex releases’ cross components/projects. There are a number of Apps on Atlassian Marketplace to help with that.
Sometimes it is useful to ‘simulate’ a single version across projects (not supported by Jira out of the box). Again, most of these tools from the Marketplace have a versions-sync functionality cross-project.
Some companies do not use fix versions and use Jira Epics instead to define scope of releases. And for a good reason:- in the former Classic and now Company-managed projects (CMP) you can share your Epic across projects to aggregate work from different services and Apps to deliver Features. If you link here tasks from DevOps and Change Management (CM) projects (if tracked separately). Epics could easily become deliverables. For better tracking you can use Due Date or any other custom date field as Release Date and build all the reporting accordingly.
In former NextGen and new Team-managed projects (TPM) Epics are tied to the project and you get a deja vu with Fix Versions. They may be still good enough to treat these individual Epics as deliverables but most probably you would need similar tooling to aggregate them into something bigger to orchestrate end-to-end delivery and/or sync those Epics across all projects to ‘simulate’ single delivery (from a business perspective).
Some of the Scrum adepts would be puzzling reading up to here:- “What are they talking about? We deliver at the end of each sprint (!)“. If this is true we really admire it. Same time Sprint in most cases is a team level delivery, and if you want to release something across teams you need to find ways to aggregate and orchestrate sprints as deliverables. So, the problem statement seems similar to Fix Versions for individual projects or Epics from different TPMs. Probably with a difference of ‘talking and talking’ Sprints from different boards to aggregate in single end-to-end deliveries and orchestrate accordingly.
What is ‘Release’ in Jira?:- it’s all the issues where the fixVersion field equals the Release name.
What is ‘Epic’?: - all the issues with Epic link equals to Epic key.
What is ‘Sprint’? - all the issues with Sprint being in the Sprint name.
So, it’s just a JQL (!)
Why can’t we define even more Custom JQL then as deliverable? We can. Just define how you want to differentiate deliverables and what attributes and values are to be used (Jira labels seem an obvious choice but not limited to) for tracking your release.
Probably a good tool that will allow you to package such custom JQL and bring Release notion to it with necessary attributes will be very beneficial.
The above options give you flexibility as there is no one size fits all. The reality is you most probably would need to combine them, as organizations are varied, and internally might use different approaches towards release management.
E.g. Imagine a bank with some legacy backend solutions being delivered on a fixed cadence, and let’s say Fix Versions are used. Same time you have a new innovative department (or a third-party) responsible for online or mobile banking with established CI/CD practices and deliverables by Epics or Sprints. Now you want to develop and deliver a feature that goes across those 2 departments and orchestrates such deliverables.
Ideally to have options to aggregate Fix Versions from one project and Epics or Sprints as deliverables from others to orchestrate and delivery cross-project release. There are Apps on Atlassian Marketplace to help you with that.
The new world of software development presumes microservices and micro-frontends architecture empowers multiple teams to continuously deliver to production completely independently from each other. Disregard the fact that Product-centric roadmaps are good for planning work, they can’t help with questions like “When will it be delivered?“ Delivery-centric roadmaps can, and there are tools to plan, orchestrate, and deliver release giving you ultimate flexibility to define the scope of your deliveries in Jira
as well as a mix of those approaches to make cross-Jira projects ensuring end-to-end delivery.
We are one of the partners on Atlassian Marketplace who focus on Release Management and Delivery-centric Roadmaps solutions for Jira, both Cloud and Datacenter. Our mantra is “Working software is the primary measure of progress“ and we truly believe in the statements we wrote in this article. We would be happy to have a constructive discussion in comments to this article or you can always reach out to us via our Service Desk.
Stay tuned!
Yuri Kudin
6 comments