“Prodda çalışıyor”: nedir, neden olur ve neden tehlikelidir

Yazar: IT Sectr Yayınlanma: 2026-07-30 Okuma süresi: 8 dk

“Prodda çalışıyor” — bir geliştiricinin, staging veya yerel makinede hata istikrarlı bir şekilde görünmesine rağmen, hatanın productionda tekrarlanmadığında söylediği ifadedir. Sorun neredeyse her zaman ortam farklılığından kaynaklanır: farklı bağımlılık sürümleri, yapılandırma dosyaları, veritabanı durumu veya sunucu ayarları. Stack Overflow Developer Survey 2024 analizine göre, geliştiricilerin %43’ü ayda en az bir kez kodun yerel makinede çalışıp productionda başarısız olduğu bir durumla karşılaşmaktadır. Bu farklılığın neden oluştuğunu ve nasıl önleneceğini anlayalım.

Önemli noktalar

  • “Prodda çalışıyor” — bir hatanın test ortamında görünüp productionda görünmediği durumdaki klasik bahane
  • Temel neden — ortam farklılığı: farklı işletim sistemi, kütüphane, ortam değişkeni ve yapılandırma sürümleri
  • Staging ve production, altyapı, bağımlılıklar ve veriler açısından aynı olmalıdır
  • Sorun konteynerizasyon, birleşik yapılandırmalar ve dağıtım otomasyonu ile çözülür
  • Staging’in production ile düzenli senkronizasyonu bu tür durumların sayısını azaltır

“Prodda çalışıyor” ifadesi ne anlama gelir

“Prodda çalışıyor” — geliştiriciler arasında yerleşmiş bir ifadedir ve kodun production sunucusunda çalıştığı ancak test ortamında veya bir meslektaşın yerel makinesinde çalışmayı reddettiği durumu belirtir. Dışarıdan “sorun yok” gibi duyulur, oysa aslında sorun vardır — sadece production ortamında tekrarlanmaz. Farklılığın kökeni, ortamlar arasındaki yapılandırma, sürüm ve veri farklılığında yatar.

Bu ifade, başka bir ünlü bahanenin — “Benim lokalimde çalışıyor” — antitezi olarak doğmuştur. Geliştirici “lokalimde çalışıyor” derse, hata yalnızca başkalarında vardır. “Prodda çalışıyor” derse — hata yalnızca staging veya test ortamında vardır, ancak production temizdir. Kaderin cilvesi: her iki durumda da sorun gerçektir, sadece bakan kişide görünmez. DevOps Research and Assessment (DORA) 2023 araştırmasına göre, yüksek düzeyde dağıtım otomasyonuna sahip ekipler bu tür farklılıklarla 3 kat daha az karşılaşır.

İş açısından bakıldığında, “prodda çalışıyor” durumu göründüğünden daha tehlikelidir. Staging’de hata varsa ancak prodda yoksa, geliştirici bunu görmezden gelebilir — ve bir sonraki dağıtımda hata productiona geçer. Geçici rahatlama, kullanıcıların baskısı altında düzeltilmesi gereken gelecekteki bir soruna dönüşür.

Geliştiriciler neden “prodda çalışıyor” der

İfadenin kalıcılığının psikolojik nedeni — savunma refleksi. Staging’de hata gören ancak prodda görmeyen bir geliştirici, bilinçsizce sorunu küçümseyebilir: “productionda her şey iyiyse, bu acil değildir”. Klasik bir bilişsel önyargı — hayatta kalan yanılgısı, production’ın görünür başarısının gelecekteki bir arızanın potansiyel tehdidinden daha ağır bastığı durum.

İkinci neden — belirsiz sorumluluk. Production çalışıyor ancak staging çalışmıyorsa, suçlu kod değil ortamdır. Geliştirici, hatanın sorumluluğunu üzerinden atarak DevOps mühendisine veya yöneticiye yükler. Atlassian State of DevOps 2022’ye göre, birleşik dağıtım ortamı (Docker, Kubernetes) olmayan ekiplerde bu tür sorumluluk aktarmaları %60 daha sık gerçekleşir.

Üçüncü neden — sıfır kesintili sürüm korkusu. Geliştirici staging’deki hatayı düzeltir ve düzeltmeyi dağıtırsa, bu yeniden code review, test ve dağıtım gerektirir. “Prodda çalışıyor” ifadesi, düzeltmeyi bir sonraki sürüme ertelemeye izin vererek mevcut yükü azaltır. Ertelenmiş düzeltme — ekiplerde teknik borç birikiminin ana nedenlerinden biridir.

Geliştirme ve production ortamları arasındaki fark

Production ve staging asla tamamen aynı olamaz — bu, ölçek, yük ve veri farklılıkları nedeniyle teknik olarak imkansızdır. Ancak temel parametreler eşleşmelidir: işletim sistemi sürümü, derleyici, yorumlayıcı, veritabanı, web sunucusu ve projenin tüm bağımlılıkları. En az bir parametre farklıysa — kodun davranışı değişebilir.

Ortamlar arasındaki temel farklılıklar şunları içerir:

  • Donanım — işlemci, RAM miktarı, disk türü (SSD vs HDD) zamanlamaları ve çoklu iş parçacığı çalışmasını etkileyebilir
  • Ağ ortamı — firewall, DNS, proxy, yük dengeleyiciler yalnızca prodda bulunur
  • Veritabanındaki veriler — staging’de genellikle test verileri bulunurken, gerçek kullanıcı kayıtları beklenmedik desenlere sahiptir
  • Bağımlılık sürümleri — bir kütüphanenin küçük bir güncellemesi bile kodun davranışını değiştirebilir
  • Ortam değişkenleri — API anahtarları, tokenlar, özellik bayrakları ortamlar arasında farklılık gösterebilir

Konteynerizasyon bu sorunların çoğunu çözer. Production için oluşturulan Docker imajı staging’de de kullanılmalıdır. Tek fark — ortam değişkenleri ve volume bağlamaları. Docker State of Application Development 2023’e göre, tüm ortamlar için birleşik imaj kullanan ekipler, farklılıkların sayısını %74 oranında azaltır.

ParametreYerel ortamStagingProduction
İşletim sistemimacOS / WindowsLinux sunucuLinux sunucu
VeritabanıSQLite / yerel MySQLMySQL kümesiÇoğaltmalı MySQL kümesi
Yük1 kullanıcı10–100 simülasyonu1000+ gerçek
VerilerFixtureMaskelenmişGerçek
CDN / önbellekYokKısmenTamamen

Prodda davranış uyuşmazlığının tipik nedenleri

İlk ve en yaygın neden — farklı bağımlılık sürümleri. Geliştirici, paketi yerel olarak --save bayrağıyla kurar ancak package.json veya lock dosyasını güncellemeyi unutur. Prod’a dağıtımda farklı bir sürüm kurulur ve farklı davranır. npm ekosistemi için lock dosyası sorunu tamamen çözer, diğer paket yöneticileri için — benzer mekanizmalar (Gemfile.lock, Podfile.lock, pubspec.lock).

İkinci neden — eksik veya fazla ortam değişkenleri. Geliştirici yerel makinede .env dosyası kullanır ancak CI/CD pipeline’ına veya sunucuya ilgili değişkenleri eklemez. Sonuç — kod, API veya veritabanına bağlantı hatasıyla başarısız olur. GitLab DevSecOps Survey 2023’e göre, prod’daki olayların %27’si yanlış ortam değişkenleriyle ilişkilidir.

Üçüncü neden — veritabanının durumu. Staging’deki veritabanı, prod’da olmayan kayıtlar içerebilir veya tersi — migration eksik olabilir. Tipik senaryo: geliştirici, tablodaki yeni bir alanla çalışan kod yazar ancak migration henüz prod’a uygulanmamıştır. Geriye dönük uyumlu migration stratejisi — bu tür durumlardan kaçınmanın tek yoludur.

Dördüncü neden — bölgesel ve dil ayarları. Tarih biçimlendirme, ondalık ayırıcılar, metin kodlaması — bunların hepsi geliştiricinin yerel makinesi ve sunucuda farklılık gösterebilir. Uluslararasılaştırma içeren projeler için özellikle önemlidir. Çözüm — uygulama yapılandırmasında locale’i açıkça belirtmek ve sistem ayarlarına güvenmemek.

“Prodda çalışıyor” sorunu nasıl teşhis edilir

İlk adım — her iki ortamın günlüklerini karşılaştırmak. Günlük düzeyindeki fark genellikle nedeni gizler: prod’da INFO açıkken staging’de DEBUG olabilir. Aynı günlük düzeyini ayarlayın ve her iki ortamın makine karşılaştırmasına izin veren bir biçimde yazdığından emin olun. Merkezi günlük toplama sistemleri kullanın — Sentry, Datadog, ELK Stack.

İkinci adım — bağımlılık sürümlerini kontrol etmek. Lock dosyalarını karşılaştırın, her iki ortamda yüklü paketlerin listesini görüntüleyin. Küçük veya yama sürüm farkı — farklılığın en olası nedenidir. npm ls, pip freeze, mvn dependency:tree gibi araçlar tutarsızlıkları hızlıca belirlemeye yardımcı olur.

Üçüncü adım — production ortamını yerel olarak yeniden oluşturmak. Docker Compose veya benzer araçları kullanarak production altyapısının tam bir kopyasını oluşturun. Hata yerel kapsayıcıda tekrarlanırsa — sorun kodda, ortamda değil. Tekrarlanmazsa — yapılandırmadaki farkı arayın.

Dördüncü adım — özellik bayraklarını ve A/B testlerini kontrol etmek. Prod’da kod, yanlış bayrak etkin olduğu için farklı bir modda çalışıyor olabilir. LaunchDarkly State of Feature Management 2023’e göre, prod’daki beklenmeyen davranışların %40’ına kadar yanlış özellik bayrağı değerleriyle ilişkilidir. Tüm ortamlar için birleşik bayrak manifestosu bu sorunu çözer.

Projede ortam farklılıklarının önlenmesi

Önlemenin ana aracı — Infrastructure as Code (IaC). Tüm ortamlar kodla tanımlanmalıdır: Dockerfile, docker-compose.yml, Terraform betikleri veya Ansible playbook’ları. Sunucuda manuel değişiklikler yasaktır — yapılandırmadaki herhangi bir değişiklik depo ve code review’dan geçer. Bu, tüm ortamların aynı yapılandırmaya sahip olmasını sağlar.

İkinci en önemli araç — birleşik CI/CD pipeline’ı. Aynı derleme, test ve dağıtım betiği tüm ortamlar için kullanılmalıdır. Fark — yalnızca hedef değişkenlerde (URL, anahtarlar). Staging ve production için pipeline adımları farklıysa — farklılıklar kaçınılmazdır.

Üçüncü araç — otomatik veri senkronizasyonu. Düzenli olarak (günde bir kez veya programa göre) staging’i, production veritabanının anonimleştirilmiş bir kopyasıyla güncelleyin. Bu, sentetik fixture’lar yerine gerçek veriler üzerinde kod test etmeye olanak tanır. Araçlar: PostgreSQL için pg_dump/pg_restore, MySQL için mysqldump, DataGrip gibi özel hizmetler.

Dördüncü — farklılıkların izlenmesi. Staging ve production arasında farklılıklar tespit edildiğinde uyarılar ayarlayın. Yapılandırma dosyalarının hash’lerini veya yüklü paketlerin sürümlerini karşılaştıran basit bir betik, saatlerce hata ayıklamayı önler. Önleme her zaman teşhisten daha ucuzdur: ortam farklılığını önlemek, “prodda çalışıyor” hatasının nedenini aramaktan daha az çaba gerektirir.

Sıkça sorulan sorular

“Prodda çalışıyor” ile “benim lokalimde çalışıyor” arasındaki fark nedir?

İlk durumda hata staging’de görünür ancak prodda görünmez. İkinci durumda — hata, kodu yerel olarak çalışan geliştirici dışında herkes tarafından görülür. Ortak köken — ortam farklılığında, ancak durum farklı aşamalarda ortaya çıkar.

“Prodda çalışıyor” sorununun yine de düzeltilmesi gerektiği işe nasıl anlatılır?

Staging’deki hatanın, bir sonraki dağıtımla productiona geçmeye hazır bir hata olduğunu gösterin. Şimdi düzeltmek, kullanıcı baskısı altında yapılacak bir acil düzeltmeden daha ucuz olacaktır. Proje geçmişinden örnekler verin.

Hataların yüzde kaçı ortam farklılığıyla ilişkilidir?

DORA 2023 verilerine göre, prod’daki olayların yaklaşık %25–30’u ortamlar arasındaki farklılıklardan kaynaklanır. Konteynerizasyonu olmayan ekiplerde bu oran %50’ye ulaşır. Konteynerizasyon bunu %10–15’e düşürür.

“Prodda çalışıyor” sorunu önbellekleme ile ilgili olabilir mi?

Evet, bu yaygın nedenlerden biridir. Prod’da CDN, Varnish veya Redis önbelleği etkinken staging’de etkin değildir. Hata, önbelleğe alınmış verilerin sunulmasıyla ilgiliyse, staging’de görünecek ve prod’da önbellek tarafından gizlenecektir.

Docker, “prodda çalışıyor” ifadesinden kaçınmaya nasıl yardımcı olur?

Docker, tüm aşamalarda (geliştirme, test, staging, production) ortamın aynılığını garanti eder. İmaj bir kez oluşturulup her yerde kullanılırsa — sürüm ve yapılandırma farklılıkları ortadan kalkar. Birleşik imaj — dağıtım tekrarlanabilirliğinin temelidir.

Özet

  • “Prodda çalışıyor” — ortam farklılığının gerçek sorununu gizleyen bir bahane
  • Temel nedenler: farklı bağımlılık sürümleri, ortam değişkenleri, veritabanı durumu ve yapılandırma
  • Production ve staging, altyapı ve veriler açısından mümkün olduğunca aynı olmalıdır
  • Konteynerizasyon — Docker, Kubernetes — ortam farklılığı sorunlarının %70–80’ini çözer
  • Infrastructure as Code, sunucuda manuel değişiklikleri ortadan kaldırır ve tekrarlanabilirliği garanti eder
  • Farklılıkların izlenmesi, sorunun hata oluşturmadan önce tespit edilmesine yardımcı olur
  • Staging’deki hatayı hemen düzeltin — productiona geçene kadar ertelemeyin

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun