Mohammad Mahyar Ahmadi

Mohammad Mahyar Ahmadi, Atlassian and infrastructure specialist on the way to SysAdmin and AI Engineering

Mahyar means “friend of the moon.”

Mohammad Mahyar Ahmadi

Atlassian Administrator at SnappMarket

Jira with about 7 million tickets and over 10,000 new ones a day. 5+ years in IT, and the next step: SysAdmin and AI Engineering.

Get in touchRésumé (PDF)

Yar

Mahyar’s AI assistant. Ask anything about his work and experience.

About me

I started in IT in March 2021 with hardware and support, then moved into networking and infrastructure. At ArvanCloud I was first an IT Administrator and, from August 2024, a Jira Administrator. Today I’m the Atlassian Administrator at SnappMarket: Jira, Confluence and Jira Service Management, workflows, permissions, and scripts that take repetitive work off the team. The Jira I run has about 7 million tickets, with over 10,000 new ones every day. My next step is clear: SysAdmin and AI Engineering, with Linux, Python, n8n and language models.

One rule I always keep: AI speeds up debugging, but I never ship a result without testing it in my own environment and checking it against the official docs.

Experience
5+ years in IT (since March 2021)
Now
Atlassian Administrator, SnappMarket
Scale
~7 million Jira tickets, 10,000+ new a day
Education
B.Sc. Computer Engineering (Software), Islamic Azad University, Central Tehran
Courses
Network+, MCSA and CCNA
Languages
Persian (native); English and German (intermediate)
Military service
Exempt
Based in
Tehran, Iran

Taking shape

Read my path like an automation rule. The moon becomes the core of this machine, and every step builds a part of it.

  1. When

    Network & Hardware SpecialistMar 2021 – Feb 2022

    Kasra (Kimiagaran Sarzamin Rayaneh)

    The first parts light up on the green board: RAM, keyboard and case.

    • Hardware and software troubleshooting and support on Windows, Linux and Mac
    • Maintained services and VoIP systems
    • Root-caused infrastructure issues and set up office machines
    • Designed and built the passive network of a 200 m² office (Sep 2021)
  2. If

    Network EngineerMar 2022 – Aug 2023

    Arzesh Pardaz Arian (Satrap Pasargad Investment Advisory)

    Circuit traces light up and packets start to move.

    • Configured switches for traffic segmentation and security: VLANs, access ports and port security
    • Designed, configured and troubleshot routers, switches and firewalls; network and internet support
    • Built systems, and advised on and purchased network and server equipment
  3. If

    IT AdministratorSep 2023 – Aug 2024

    ArvanCloud (in charge of the Service Desk)

    The server rack rises and its LEDs light up one by one.

    • Ran company services: Vault, Mattermost, mail server, Issabel, Google Workspace, Jira and Confluence
    • Onboarding and offboarding: access, equipment, VPN and company email
    • Purchased and evaluated equipment, YubiKeys, company SIM cards and CCTV cameras
    • Documented processes and gave technical support at several WorldSkills competitions
  4. If

    Jira AdministratorAug 2024 – Jan 2026

    ArvanCloud

    The monitor boots and a Jira board opens.

    • Owned Jira and Confluence: advanced workflows with validators and post functions, custom fields, screens and issue types
    • Roles, permission schemes and notification schemes
    • Asset management, the request portal and boards, with automation and access control
    • Offboarding automation, task status notifications via Telegram and email, and scripting in Groovy and Python
    • Standardized the Jira structure across teams and trained users
  5. If

    Atlassian AdministratorFeb 2026 – present

    SnappMarket (sole Atlassian administrator)

    Jira with about 7 million tickets and over 10,000 new ones a day.

    • Running Jira and Confluence in production: workflows, custom fields, permissions and spaces; users and the LDAP/AD connection
    • Automation with Jira Automation, ScriptRunner (Groovy) and the REST API; n8n for Telegram notifications and automatic ticket creation
    • A Groovy script that sent about 12,000 issues, with all their details, to Kafka for reporting
    • Jira Service Management (queues, request types, approvals, SLAs, routing) and monitoring with Zabbix and Grafana
    • On the side: implemented and configured Jira for Azki
  6. Then

    SysAdmin & AI EngineerNext

    An AI chip lights up next to the moon core and Yar wakes up on screen.

    • Linux and DevOps: Docker, Kafka, PostgreSQL and Keycloak, which I’m deepening right now
    • n8n and LLM APIs (Claude and OpenAI) for automation
    • This site and Yar: Cloudflare Workers and OpenAI

Skills

Atlassian

  • Jira Cloud, Server and Data Center
  • Confluence
  • Jira Service Management
  • Jira Assets
  • Workflow and permission design
  • JQL

Automation and scripting

  • Jira Automation
  • ScriptRunner and Groovy
  • Python
  • n8n
  • REST API

Linux and infrastructure

  • Linux
  • Docker
  • Virtualization and ESXi
  • PostgreSQL
  • Kafka
  • GitLab
  • Keycloak and SSO

Networking

  • Switching and port security
  • Routers and firewalls
  • Passive cabling
  • VPN
  • VoIP and Issabel

Company services

  • Vault
  • Google Workspace
  • Mattermost
  • Mail server
  • YubiKey
  • CCTV

Monitoring

  • Zabbix
  • Grafana

AI

  • LLM APIs (Claude and OpenAI)
  • AI-assisted debugging, with real testing
  • This site and Yar on Cloudflare Workers

Problems I solved

One project, two workflow schemes

Jira Data Center, ScriptRunner
Problem
A project created through the REST API returned 201, but saving its workflow later failed with a 500 error.
What I did
I traced the root cause to the NodeAssociation table: the project had two active workflow schemes. I fixed it with ScriptRunner.
Result
A read-only script that finds every affected project, and a write-up for other admins.
POST /rest/api/2/project      → 201 Created
save workflow                 → 500
root cause                    → NodeAssociation
correct field name            → "workflowSchemeId"

12,000 issues, with every detail, in Kafka

Groovy, ScriptRunner, Kafka
Problem
For reporting and analysis, SnappMarket’s Jira issue data had to be available outside Jira, with full detail.
What I did
I wrote a Groovy script on ScriptRunner that sends each issue to Kafka with its fields and custom fields, comments, changelog and worklogs/attachments.
Result
About 12,000 issues with all of these details reached Kafka for reporting and analysis.
source        Jira · SnappMarket
script        Groovy on ScriptRunner
payload       fields + custom fields
              comments · changelog
              worklog / attachments
sent          ~12,000 issues → Kafka
purpose       reporting & analysis

Offboarding with no access left behind

Jira Automation
Problem
When colleagues left, some access was accidentally forgotten.
What I did
I built a Jira automation that, once an offboarding is filed, automatically notifies the team that owns each service.
Goal
No access stays open after someone leaves.
When   employee offboarding created
If     access still active in a service
Then   notify the owning team
       so all access gets revoked
6 more projects
A Jira test environment with DockerDocker, JIRA_HOME

No change should go straight to production, so I set up a Jira test environment with Docker and documented its key detail, JIRA_HOME.

Task status in Telegram and emailJira, Telegram

Instead of users checking Jira all the time, task status changes reach them directly through Telegram and email.

Asset management in JiraJira Assets

Built asset management objects around what teams needed, with automation and access settings, so information about equipment and services has one clear home.

Queues, SLAs and routing in JSMJira Service Management

Jira Service Management at SnappMarket: queues, request types, approvals, SLAs and ticket routing.

Monitoring with Zabbix and GrafanaMonitoring

Zabbix and Grafana dashboards and alerts, so problems are spotted before they reach users.

Cabling, cameras and serversInfrastructure

Designed and built the passive network of a 200 m² office, set up CCTV for a server room and an office entrance, and purchased, installed and configured HP Gen9 and Gen10 servers.

Where I write

jirasupport.ir My Persian-language site on Jira and Confluence consulting and training, which I built and write myself: 21 articles on workflows, automation, JQL, installation, Data Center and Jira Service Management. Visit the site
TitlePublished onTopic
Finding and safely removing duplicate issue type schemesAtlassian CommunityJira Data Center
A missing release: archived or deleted?Atlassian CommunityREST API
Two workflow schemes on one project, and the root cause in NodeAssociationLinkedInScriptRunner
Setting up a Jira test environment with Docker, and why JIRA_HOME mattersVirgool (Persian)Docker

How Yar is built

Follow one real question, from the moment you type it to Yar’s answer.

  1. Your browser

    You type a question. Only the question and the last few messages of this chat are sent: no cookies, no account data, no keys.

    POST /api/chat
    { "messages": [
      { "role": "user",
        "content": "What has he built with ScriptRunner?" }
    ] }
  2. Cloudflare Worker

    The question reaches the nearest Cloudflare server. The Worker cleans up the messages: at most ten, of up to a thousand characters each. The API key lives only here, as a secret, and never reaches the browser.

    cleanMessages(body.messages)
      → last 10 turns · 1000 chars each
    headers: {
      "x-api-key": env.ANTHROPIC_API_KEY  // secret
    }
  3. OpenAI and my profile

    The Worker hands the question to an OpenAI model together with Yar’s rules and my profile. The profile is cached, so answers are faster and cheaper. Rule number one: answer only from this profile.

    model: "claude-sonnet-5-5"
    system: [
      rules + knowledge.txt,
      cache_control: { type: "ephemeral" }
    ]
  4. An answer, or “I don’t know”

    The answer is typed out for you word by word. If something isn’t in the profile, Yar doesn’t make it up: it says honestly that it doesn’t know and points you to me.

    What salary is he expecting?

    YarThat isn’t in my information, and I won’t make up a number. Best to ask Mahyar directly; his contact details are at the bottom of the page.

Ask Yar a hard question

Contact