Yazılım projesi teslim uyuşmazlıkları: neden çıkar, teknik olarak nasıl incelenir?

Yazılım teslim uyuşmazlıklarının çoğu kodda değil, projenin başında yazılmayan şeylerde başlar: neyin teslim edileceğini ölçülebilir biçimde söylemeyen bir şartname, teslimin nasıl sınanacağını tarif etmeyen bir kabul prosedürü ve yazıya geçmemiş değişiklik talepleri. Teknik inceleme, tarafların iddialarını teslim edilen sürüm, kod deposunun geçmişi, iş takip kayıtları ve yazışmalar üzerinden madde madde ölçer; yazılımın hukuken ayıplı olup olmadığına ise mahkeme karar verir.

Güncellendi: Okuma süresi: 10 dkHazırlayan: md9

Kısaca

  • “Teslim edildi” cümlesi taraflar için çoğu zaman farklı şeyler anlatır: geçmişiyle kaynak kod mu, çalışan sistem mi, mağazada yayımlanmış uygulama mı.
  • Şartnamede ölçüt yoksa teknik inceleme o maddeyi “ölçülemez” diye işaretler; hangi okumanın geçerli olduğu hukuki bir sorudur.
  • Tartışmayı çoğu zaman kronoloji çözer: talep ne zaman geldi, ne zaman kodlandı, hata ne zaman bildirildi, sistem ne zaman canlıya alındı.
  • Uyuşmazlık başlarken ilk iş teslim edilen durumu dondurmaktır. Yeni bir geliştiricinin düzeltmeleri bu durumu geri dönülmez biçimde değiştirebilir.
Bu sayfada
  1. Uyuşmazlık genellikle nereden çıkar?
  2. Teknik incelemede neye bakılır?
  3. Uyuşmazlık başladığında ilk günlerde ne yapılmalı?
  4. Hukuki çerçeve: avukatın ve mahkemenin alanı
  5. Bir sonraki projede uyuşmazlığı küçültmek için

Tipik tablo şöyledir. İş sahibi yazılımın teslim edilmediğini, eksik ya da çalışmaz teslim edildiğini söyler ve kalan ödemeyi durdurur. Yüklenici işin şartnameye uygun bittiğini, sistemin aylardır kullanıldığını, istenen yeni özelliklerin kapsam dışı olduğunu söyler ve ödeme bekler. Böyle dosyalarda iki tarafın da kısmen haklı çıkması şaşırtıcı değildir. Teknik incelemenin işi, tartışmayı "yazılım çalışıyor mu" sorusundan çıkarıp "şartnamenin 4.2 maddesi, teslim edilen sürümde, şu koşulda karşılanıyor mu" sorusuna indirmektir.

Uyuşmazlık genellikle nereden çıkar?

Teknik kökler birkaç başlıkta toplanır; bir dosyada çoğu zaman birkaçı birlikte bulunur.

Aynı cümle, iki okuma: belirsiz şartname

Ölçüt içermeyen bir maddeyi her taraf kendi beklentisiyle okur. Sık gördüğümüz örnekler:

Şartnamedeki ifadeİş sahibinin okumasıYüklenicinin okuması
"Sistem mobil uyumlu olacak"iPhone ve Android'de mağazadan indirilen uygulamaTelefon tarayıcısında düzgün görünen web arayüzü
"Raporlama modülü"İstenen alanlarla filtrelenebilen, Excel'e aktarılabilen raporlarTeklif ekinde ekran görüntüsü bulunan üç sabit rapor
"Mevcut veriler aktarılacak"Eski sistemdeki bütün geçmiş, ekleriyle birlikteİş sahibinin temiz bir CSV dosyası olarak vereceği aktif müşteri listesi
"Kaynak kodlar teslim edilecek"Geçmişiyle birlikte depo, derleme betikleri, sunucu yapılandırmasıSon ödemeden sonra verilecek bir ZIP dosyası
"Eğitim ve destek verilecek"Süresiz, her konudaBir oturumluk eğitim ve üç aylık hata düzeltme

Hangi okumanın geçerli olduğu teknik bir soru değildir; sözleşmenin yorumu avukatın ve mahkemenin işidir. Teknik inceleme bu maddeleri ölçülemez diye işaretler, teklifte, toplantı notunda ya da yazışmada maddeyi somutlaştıran bir ifade varsa onu yanına koyar ve gerekirse durumu iki okumaya göre ayrı ayrı gösterir. Belgeler arasında bir öncelik sırası (sözleşme mi, şartname mi, teklif mi) yazılmamışsa bu da not edilir.

Kabul prosedürü yok

Şartname neyin yapılacağını söyleyip teslimin nasıl sınanacağını söylemiyorsa kabul ya hiç yaşanmaz ya da kimsenin fark etmediği bir anda yaşanır. Test ortamı, test verisi, iş sahibinin sonuç bildirme süresi ve hangi önem derecesindeki hatanın kabulü engelleyeceği yazılmamıştır. Sistem bir gün canlıya alınır, kullanıcılar çalışmaya başlar, hatalar dağınık e-postalarla bildirilir. Aylar sonra sorulan "yazılım kabul edildi mi?" sorusunun cevabı hukukidir. Teknik olarak gösterilebilecek olan ise gerçek kullanımın başladığı an ve o anda açık olan hatalardır: ilk gerçek siparişin oluşturulma zamanı, uygulama loglarında test hesapları dışındaki ilk oturumlar, mağaza konsolundaki ilk yayın tarihi, o tarihte iş takip aracında açık duran kayıtlar.

Yazıya geçmeyen değişiklik talepleri

İş sahibi yazılımı gördükçe yeni şeyler ister; bu doğaldır. Sorun, taleplerin toplantıda, telefonda ya da bir mesajlaşma grubunda kalmasıdır. Her biri "küçük bir ekleme" olarak girer ve hiçbirinin süreye ve bedele etkisi yazılmaz. Teslimde iş sahibi bu özellikleri kapsamın parçası sayar, yüklenici ek iş; ikisi de gecikmenin diğerinden kaynaklandığını söyler. İncelemede bu taleplerin izini yazışmalarda, iş takip kayıtlarında ve depo geçmişinde sürer, hangisinin sözleşmeden sonra geldiğini ve kodda ne zaman karşılık bulduğunu tarihiyle gösteririz.

"Teslim" kelimesinin kendisi

Yazılımda teslimin tek bir biçimi yoktur ve taraflar çoğu zaman farklı birini kasteder:

  • Kaynak kodun, geçmişiyle birlikte iş sahibinin deposuna aktarılması.
  • Çalışan sistemin iş sahibinin sunucusunda ya da bulut hesabında kurulu olması.
  • Mobil uygulamanın iş sahibinin geliştirici hesabından mağazada yayımlanması.
  • Alan adı, sunucu, e-posta, ödeme kuruluşu ve SMS sağlayıcısı gibi hesapların devri.

Hesaplar yüklenicinin üzerindeyse, uyuşmazlık başladığı gün iş sahibi kendi sistemine erişemeyebilir. Bu teknik incelemeyi de zorlaştırır, çünkü en değerli kayıtlar erişilemeyen hesaplarda kalır.

İş sahibinin payı ve dış hizmetler

Her gecikme yükleniciden kaynaklanmaz. İçeriğin, test verisinin, entegrasyon anahtarlarının ya da karşı sistem erişiminin iş sahibinden geç gelmesi; e-fatura entegratörü, ödeme kuruluşu veya kargo firması gibi üçüncü tarafların API'lerini değiştirmesi de "yazılım çalışmıyor" şikâyetinin arkasından çıkabilir. Bu yüzden kronolojiye yalnızca yüklenicinin değil, iş sahibinin ve dış sağlayıcıların adımlarını da koyarız.

Teknik incelemede neye bakılır?

İnceleme dört kaynağı birbirine bağlar. Yöntemin ayrıntısını yazılım ve kaynak kod incelemesi sayfasında anlattık; burada her kaynağın neden önemli olduğunu ve sınırını özetliyoruz.

  1. Şartname eşlemesi. Sözleşme, şartname, teklif ekleri ve yazılı değişiklik taleplerinden numaralı bir gereksinim listesi çıkarılır; her madde teslim edilen sürümde test edilip "karşılandı, kısmen, karşılanmadı, test edilemedi" diye işaretlenir. Ölçütsüz maddeler ayrıca gösterilir, hiçbiri ölçülmüş gibi sunulmaz. İlk iş, "teslim edilen sürüm"ün hangisi olduğunu sabitlemektir: etiket, commit, paketin SHA-256 değeri.
  2. Depo geçmişi. Git geçmişi bir özelliğin hangi tarihte, hangi hesaplar adına koda girdiğini ve çalışmanın zamana nasıl yayıldığını gösterir. Sınırı da bellidir: commit'teki yazar adı ve tarihler, commit'i oluşturan bilgisayarda serbestçe ayarlanabilir (GIT_AUTHOR_DATE, GIT_COMMITTER_DATE, git commit --date). Bu yüzden commit tarihleri depo platformunun push kayıtları ve CI/CD çalışma zamanları gibi sunucu tarafı kayıtlarla karşılaştırılır.
  3. İş takip kayıtları ve yazışmalar. Jira, GitHub Issues ya da benzeri bir araçtaki kayıt yalnızca son durumu değil değişiklik geçmişini de taşır: hata kim tarafından, hangi tarihte açıldı, kaç kez kapatılıp yeniden açıldı, önem derecesi ne zaman değişti. E-postalar orijinal biçimleriyle (.eml, .msg) alınır; metin içinde iletilmiş (forward) kopyalar çoğu zaman özgün başlık bilgisini taşımaz.
  4. Test ortamı. Hata, belgelenmiş ve yalıtılmış bir ortamda yeniden üretilebildiği ölçüde bulgu olur. Kaynağın kod mu, yapılandırma mı, veri mi, dış hizmet mi olduğu ayrılır. Testte çalışıp canlıda çalışmayan bir işlev çoğu zaman ortam farkına işaret eder.

Bu dört kaynak bir kronolojide birleşince tartışmanın çoğu kendiliğinden daralır. Örnek (kurgusal): taraflar "toplu fiyat güncelleme" özelliğinin kapsamda olup olmadığını tartışıyor.

TarihOlayKaynak
03.02.2026Sözleşme ve şartname imzalandı; şartnamede toplu fiyat güncelleme yokSözleşme, şartname
18.03.2026İş sahibi özelliği "küçük bir ek" olarak istiyorE-posta (Message-ID ile)
19.03.2026Yüklenici "ek süre gerekir" diye cevaplıyor; bedelden söz edilmiyorE-posta
02.04.2026Özellik için iş kaydı açılıyor (PRJ-214)İş takip aracı
21.04.2026Özelliğin kodu ana dala giriyorCommit 9f3e2a1, platform push kaydı
05.05.2026Sistem canlıya alınıyor; ilk gerçek sipariş 09:12'deVeri tabanı, uygulama logu
12.05.20265.000 üründen büyük güncellemelerde zaman aşımı bildiriliyor; kayıt açık kalıyorPRJ-231

Tablo, özelliğin sözleşmeden sonra istendiğini, yüklenicinin ek süre şartı koyup yine de kodladığını ve canlıya geçişten sonra bildirilen bir hatanın açık kaldığını gösterir. Özelliğin kapsama girip girmediği, ek süre ya da bedel doğurup doğurmadığı ise hukuki değerlendirmedir.

Uyuşmazlık başladığında ilk günlerde ne yapılmalı?

Hukuki adımları avukatınızla planlayın; bildirimlerin biçimi ve zamanı hukuki sonuç doğurabilir. Teknik taraftaki öncelik, bugünkü durumu değiştirmeden kayda geçirmektir. Adımların çoğu iki taraf için de aynıdır:

  1. Teslim edilen durumu dondurun. Canlı sistemin ve veri tabanının yedeğini ya da anlık görüntüsünü (snapshot) alın, SHA-256 değerini kaydedin. Yeni bir ekip yazılımı "düzeltmeye" başlamadan önce bunu yapın; sonradan yapılan her değişiklik, teslim anındaki durumun gösterilmesini zorlaştırır.
  2. Depoyu geçmişiyle kopyalayın. git clone --mirror bütün dalları ve etiketleri alır; ZIP olarak indirilen kod geçmiş taşımaz. Dışa aktardığınız dosyaların değerini hash hesaplama aracıyla alabilirsiniz; neden gerektiği hash ve delil bütünlüğü yazısında.
  3. İş takip kayıtlarını ve platform etkinliğini değişiklik geçmişiyle birlikte dışa aktarın.
  4. Yazışmaları orijinal biçimleriyle saklayın. E-postaları .eml olarak, mesajlaşma uygulamalarındaki konuşmaları uygulamanın dışa aktarma işleviyle.
  5. Kendi kayıtlarınızı toplayın. Yüklenici için zaman çizelgeleri, demo kayıtları, teslim e-postaları, dağıtım (deployment) logları; iş sahibi için hata bildirimleri, ekran kayıtları, kullanıcı şikâyetleri.
  6. Erişimlere dokunmadan önce düşünün. Sunucuyu kapatmak, depoyu silmek, geçmişi force push ile yeniden yazmak ya da karşı tarafın erişimini kesmek, önce sizin lehinize olabilecek kayıtları yok edebilir; hukuki sonuçlarını avukatınız değerlendirir. Yetkiniz olmayan bir hesaba ya da sunucuya girmeyin: bu suç oluşturabilir (TCK m.243) ve böyle elde edilen kayıt delil olarak kullanılamayabilir.
Platform kayıtlarının ömrü kısadır

GitHub'ın Events API'si yalnızca son 30 günü ve en fazla 300 olayı döndürür; kurumsal denetim kaydı 180 gün, bu kayıttaki Git olayları 7 gün tutulur. Geliştirici bilgisayarındaki reflog girdileri varsayılan olarak 90 gün, erişilemeyen girdiler 30 gün sonra temizlenir. Bir force push'tan önceki durumu gösterebilecek kayıtlar bu yüzden haftalar içinde kaybolabilir.

Hukuki çerçeve: avukatın ve mahkemenin alanı

Yazılım geliştirme sözleşmelerine çoğu zaman eser sözleşmesi hükümleri (TBK m.470 vd.) uygulanır; somut sözleşmenin nasıl nitelendirileceği avukatın değerlendirmesidir. Bu hükümler uygulanırsa süreler kısadır: iş sahibi teslimden sonra eseri imkân bulur bulmaz gözden geçirip ayıpları uygun süre içinde bildirmelidir (m.474/1), bunu ihmal ederse eser kabul edilmiş sayılabilir (m.477); ayıp nedeniyle açılacak davalar taşınmaz yapılar dışındaki eserlerde, yüklenicinin ağır kusuru yoksa, teslimden itibaren iki yılda zamanaşımına uğrar (m.478). "Ayıp", "kusur" ve "kabul" hukuki kavramlardır. Teknik rapor bunları kullanmaz, gözlenen durumu kanıtıyla yazar.

Dava açıldığında teknik incelemeyi mahkemenin görevlendirdiği bilirkişi yapar (HMK m.266); Bilirkişilik Daire Başkanlığının alt uzmanlık listesinde "Yazılım" (18.02) ve "Bilişim Proje Yönetimi" (18.10) ayrı alanlardır. TBK m.474/2 de her iki tarafa, giderini karşılayarak eserin bilirkişi tarafından gözden geçirilmesini ve sonucun raporla belirlenmesini isteme imkânı verir; dava öncesinde HMK m.400'deki delil tespiti de bir yoldur. Taraflar ise kendi seçtikleri uzmandan uzman görüşü alıp dosyaya sunabilir (HMK m.293). İkisinin farkını uzman görüşü ile bilirkişi raporu yazısında anlattık. md9 bilirkişi değildir; taraflardan biri için teknik rapor ya da uzman görüşü hazırlar.

Bir sonraki projede uyuşmazlığı küçültmek için

Uyuşmazlığı tamamen önleyen bir şartname yoktur; iyi bir şartname tartışmayı küçük ve ölçülebilir tutar. Teslim uyuşmazlıklarını incelerken eksikliğini en çok gördüğümüz düzenlemeler:

  • Belgeler arası öncelik sırası. Sözleşme, şartname, teklif ve toplantı notu çeliştiğinde hangisinin geçerli olacağı baştan yazılsın.
  • Numaralı gereksinimler ve kabul senaryoları. Her maddenin karşısında teslimde nasıl sınanacağı. Nasıl yazıldığını proje danışmanlığı ve teknik şartname sayfasında örnekledik.
  • Değişiklik talebi kaydı: numara, tarih, isteyen, süreye ve bedele etkisi, iki tarafın onayı.
  • Depo baştan iş sahibinin hesabında. Yüklenici bu depoya yazma yetkisiyle çalışırsa teslim tek bir anda değil sürekli gerçekleşir ve geçmişi iki taraf da görür.
  • Her teslimde aynı paket. Etiketlenmiş sürüm, paketin SHA-256 değeri, sürüm notu, tarihli kabul tutanağı.
  • Alan adı, sunucu, mağaza geliştirici hesabı, ödeme ve SMS sağlayıcıları iş sahibi adına.
  • Kaynak kod emaneti. Kod iş sahibine verilmeyecekse, güncel sürümün bağımsız bir yerde saklandığı bir emanet (escrow) düzeni.
  • Aşamalı kabul. Büyük tek bir teslim yerine küçük aşamalar ve her aşamada açık hata listesi.
  • Yüklenici için: kapsam dışı bir işe yazılı onay almadan başlamamak, demo ve teslim toplantılarını kayda geçirmek, iş sahibinden beklenen içerik ve erişimlerdeki gecikmeleri tarihiyle not etmek.

Sık sorulan sorular

Yazılım projesi teslim edilmedi; ilk ne yapmalıyım?

Hukuki adımları avukatınızla planlayın; bildirim süreleri kısa olabilir. Teknik tarafta bugünkü durumu değiştirmeden kaydedin: kod deposunu geçmişiyle kopyalayın, canlı sistemin ve veri tabanının yedeğini alın, iş takip kayıtlarını ve yazışmaları orijinal biçimleriyle dışa aktarın, her dosyanın SHA-256 değerini not edin. Yeni bir geliştiriciyle devam edecekseniz bu kayıtlar alınmadan koda dokunulmasın. Yetkiniz olmayan hesaplara ve sunuculara girmeyin.

Yazılımın ayıplı olduğunu kim belirler?

Ayıp hukuki bir kavramdır; yazılımın hukuken ayıplı sayılıp sayılmadığına mahkeme karar verir. Teknik inceleme bu karara zemin olacak tespitleri yapar: hangi şartname maddesi teslim edilen sürümde karşılanmıyor, hata hangi koşulda yeniden üretiliyor, kaynağı kod mu, ortam mı, veri mi, hata ne zaman bildirilmiş. Dava sırasında teknik incelemeyi mahkemenin görevlendirdiği bilirkişi yapar; taraflar kendi seçtikleri uzmandan uzman görüşü de sunabilir (HMK m.293).

Canlıya alınan yazılım kabul edilmiş sayılır mı?

Bu hukuki bir sorudur; cevabı sözleşmeye, somut olaylara ve avukatınızın değerlendirmesine bağlıdır. Eser sözleşmesi hükümleri uygulanıyorsa TBK m.477 açık veya örtülü kabulün ve gözden geçirme ile bildirimin ihmal edilmesinin sonuçlarını düzenler. Teknik olarak gösterilebilecek olan, canlı kullanımın hangi tarihte başladığı, o tarihte hangi hataların açık olduğu ve bunların ne zaman, hangi kanaldan bildirildiğidir. Bu tarihleri veri tabanı kayıtları, uygulama logları ve iş takip kayıtları ortaya koyar.

Yüklenici depoya ve sunucuya erişimimi kapattı; ne yapabilirim?

Erişimi kendi başınıza, örneğin parola denemeleriyle geri almaya çalışmayın; hukuka aykırı erişim suç oluşturabilir ve elde edilen kaydı kullanılamaz kılabilir. Elinizde kalanları hemen kopyalayın: kendi bilgisayarlarınızdaki depo kopyaları, canlı sitenin tarayıcıya gönderdiği JavaScript paketleri, mağazadaki uygulama sürümü, e-postalar ve yedekler. Karşı taraftaki kayıtların korunması ve getirtilmesi için delil tespiti gibi yolları avukatınız değerlendirir.

Değişiklik talepleri yalnızca mesajlaşma uygulamasında konuşulduysa ne olur?

Teknik açıdan bu yazışmalar da kayıttır ve korunabilir: konuşma uygulamanın dışa aktarma işleviyle alınır, telefon sıfırlanmaz, ekran görüntüsüyle yetinilmez. Bir talebin sözleşmeyi değiştirip değiştirmediği ya da ek bedel doğurup doğurmadığı ise hukuki değerlendirmedir. İncelemede bu mesajları e-postalar, iş kayıtları ve commit geçmişiyle aynı kronolojiye yerleştiririz. Koruma adımları için WhatsApp yazışmalarının delil olarak korunması yazısına bakabilirsiniz.

Teknik inceleme için dava açılmasını beklemek gerekir mi?

Hayır. Dava açılmadan önce taraflardan biri için mevcut durumu kayda geçiren bir teknik rapor hazırlanabilir; bu rapor uzlaşma görüşmelerinde de, sonradan açılacak bir davada uzman görüşünün temeli olarak da kullanılabilir. Beklemenin teknik bedeli yüksektir: depo platformlarının etkinlik kayıtları haftalar içinde silinebilir, sunucu logları döner, yeni geliştirmeler teslim anındaki durumu değiştirir. Mahkeme eliyle bilirkişi incelemesi istenip istenmeyeceği avukatınızın kararıdır.

Kaynaklar

  1. 6098 sayılı Türk Borçlar Kanunu (m.470, 474, 475, 477, 478: eser sözleşmesi) — mevzuat.gov.tr
  2. 6100 sayılı Hukuk Muhakemeleri Kanunu (m.266, 293, 400) — mevzuat.gov.tr
  3. 5237 sayılı Türk Ceza Kanunu (m.243) — mevzuat.gov.tr
  4. Bilirkişilik temel ve alt uzmanlık alanları listesi — Adalet Bakanlığı Bilirkişilik Daire Başkanlığı
  5. git-commit Documentation (GIT_AUTHOR_DATE, GIT_COMMITTER_DATE, --date) — Git
  6. git-reflog Documentation — Git
  7. REST API endpoints for events — GitHub Docs
  8. About the audit log for your enterprise — GitHub Docs