İlişkili Testlify

Timesheets by Appforest - Jira Eklentisi

Şirket genelinde ve Atlassian Marketplace'te kullanılan bir Jira zaman çizelgesi platformu geliştirildi, bir üçüncü taraf aracın yerini alarak yıllık 9.000 doların üzerinde lisans maliyeti tasarrufu sağlandı.

Testlify'da mühendislik zaman takibi, günlük Jira iş akışlarından kopuk pahalı bir üçüncü taraf uygulamaya bağlıydı. Zaman takibi, ekip kapasite planlaması ve proje maliyet tahsisi için entegre bir Jira uygulaması olan Timesheets by Appforest'in frontend geliştirmesine liderlik ettim. Ürün Atlassian Marketplace'te yayınlandı ve şirket genelinde dahili olarak kullanılıyor.

Timesheets by Appforest - Genel Bakış

Ne inşa ettim

  • Atlassian Marketplace entegrasyonu: Kendi barındırılan bir backend yerine, Atlassian'ın sandbox'lı sunucusuz uygulama çalışma zamanı olan Atlassian Forge üzerine, sıkı şekilde sınırlandırılmış, en az yetki ilkesine dayalı Jira okuma/yazma izinleriyle inşa edildi.
  • Gömülü Jira arayüzü: Hızlı girişler için doğrudan Jira görevlerine gömülü bir zaman kaydı paneli, artı bağlam değiştirmeden takvim görünümleri ve günlük/haftalık zaman çizelgesi gönderimleri için tam bir dashboard uygulaması.
  • Raporlama ve analiz: Sprint muhasebesi ve proje maliyet takibi için Jira ve dahili zaman kaydı verilerini birleştiren rapor görünümleri.

Timesheets by Appforest - Zaman Kaydı

Neden önemliydi

Dış müşteriler için Atlassian Marketplace'te yayınlanan eklenti, dahili olarak da eski zaman takip yazılımımızın yerini aldı, yıllık 9.000 doların üzerinde lisans maliyeti tasarrufu sağladı ve yönetime mühendislik kapasitesine gerçek zamanlı görünürlük kazandırdı.

Ekip ve Sahiplik

Küçük bir ekipte frontend geliştirmesine liderlik ettim: 2024 ortasından bu yana 4 katkıda bulunandan 397 commit, bugün hâlâ aktif olarak bakımı yapılıyor. Bu tek kişilik bir yapım değil, çok yıllı, çok kişili bir ürün ve rolüm full-stack sahiplik değil, frontend ile sınırlıydı.

Connect Değil, Forge

Uygulama, Jira ile iframe'ler ve webhook'lar üzerinden iletişim kuran kendi backend'ine sahip kendi barındırılan bir uygulama olan eski Connect framework'ü yerine, sandbox'lı sunucusuz bir çalışma zamanı olan Atlassian Forge üzerinde çalışır. Forge, Jira'ya bakan yüzey için çalıştırılacak veya yamalanacak bir sunucu olmadığı anlamına gelir: Atlassian, bu altyapıyı bize bırakmak yerine, çalıştırma ortamını barındırır, manifestoda beyan edilen izin kapsamlarını uygular ve sunucusuz tarzı kısıtlamalar (ARM64 üzerinde Node 22, 1024MB bellek, çağrı başına sınırlı çalışma süresi) getirir.

İki Farklı Amaç İçin İki Yüzey

Ürün bilinçli olarak tek bir yerine iki UI'ye ayrılır. Bir görev bağlamı paneli yaygın durumu ele alır: zaten baktığınız bilete karşı, onu terk etmeden tek tıkla zaman kaydedin. Ayrı bir tam dashboard uygulaması (takvim görünümleri, raporlar, yönetici ayarları, maliyet takibi) planlama ve denetimi, yani bir kenar çubuğu paneli değil gerçek bir çalışma alanı gerektiren görevleri ele alır. Her yüzey, ikisini de tek bir arayüze zorlamak yerine yaptığı iş için inşa edilmiştir.

Gerçek Bir Projeler Arası Entegrasyon

Bu izole bir uygulama değil. Resolver fonksiyonları, Google Calendar, Outlook Calendar ve birlikte çalışan Appforest Timetracker VS Code uzantısından gelen zaman girişi önerilerini açıkça alır ve temizler, böylece bir geliştiricinin VS Code'daki kodlama etkinliği, manuel yeniden giriş gerektirmeden burada önerilen bir zaman çizelgesi girişi olarak ortaya çıkabilir.

Veri Modeli ve Ölçek

  • Forge izin kapsamları dar ve açıktır (read:jira-work, write:jira-work, manage:jira-configuration, artı kullanıcı/token okumaları), geniş kapsamlı bir catch-all izin değil.
  • UI bileşenleri, Atlassian'ın kendi tasarım tokenlarını (@atlaskit) kullanır, böylece eklenti, sonradan eklenmiş bir üçüncü taraf gibi değil, görsel olarak yerel Jira ile eşleşir.
  • Dashboard uygulaması, durum için Pinia kullanan Vue 3'tür, 46 bileşenden oluşur, React tabanlı görev bağlamı panelinden ayrıdır; bir üründe iki frontend yığını, her iki yüzeye de yapay olarak gerilmiş tek bir paylaşılan kod tabanı değil.
  • Forge fonksiyonunun bellek tahsisi, başlangıç varsayılanı olarak 1024MB ayarlanmak yerine, gerçek bir performans sorunundan sonra 256MB'tan 1024MB'a yükseltildi.

Bu maliyet/sprint görünümlerinin arkasındaki raporlama motoru, kendi sorgu stratejisini ölçeklendirir: görev başına bir istek göndermek veya büyük bir sprintte zaman aşımı riski taşıyan tek bir sınırsız sorgu göndermek yerine, rapor hacmine bağlı olarak Jira JQL arama isteklerini çağrı başına 25, 50 veya 100 görev halinde parçalara ayırır ve görev başına 16 alan çeker.

Build vs. Buy

Kendi barındırılan bir Connect uygulaması yerine Forge: Atlassian'ın çalışma zamanı ve izin modeli, bu ekibin aksi takdirde kendi inşa edip güvenceye alması gereken altyapının yerini alır. Özel bir UI kiti yerine yerel Atlassian tasarım tokenları: eklenti, yalnızca bu uygulama için paralel bir tasarım sistemi sürdürmek yerine, Jira'nın kendi görünümünü ve etkileşim kalıplarını devralır.

Stack

Atlassian Forge (Node 22, ARM64), görev bağlamı paneli için React 18, dashboard uygulaması için Pinia ile Vue 3, Atlassian Design System tokenları ve primitifleri, Atlassian Marketplace üzerinden dağıtıldı.