Eskiden projelerimizde birçok açık kaynaklı ürünü kullanırdık:
- SSO için Keycloak, OpenLDAP
- Chat için Mattermost
- Git için Gitea, GitLab
- CI/CD için Jenkins
- Artifact repository için Nexus
- Storage için MogileFS, MinIO
- Wiki için MediaWiki
- CRM için EspoCRM, SuiteCRM
Bunların yerine geçecek uygulamaları kendimiz geliştirmek aklımızın ucundan bile geçmezdi.
Neden geçsin ki?
Bu ürünleri kullanarak ciddi anlamda zamandan tasarruf ediyorduk. Bunun karşılığında ise kendimizi bu ürünlerin sunduğu yapının içine sokuyor; kurulum, konfigürasyon, güncelleme, migration ve özellikle security açıklarıyla sürekli ilgilenmek zorunda kalıyorduk.
Hatta Mattermost, Gitea ve benzeri ürünleri kullandığım dönemlerde, gerekli security update’lerini zamanında yapmadığım için birden fazla sunucu kaybettiğim bile oldu.
Artık benim için durum değişti.
Yukarıda saydığım ürünlerin hiçbirisini kullanmıyorum.
Onların yerine, doğrudan kendi gereksinimlerime göre tasarlanmış uygulamalar geliştiriyorum.
Örneğin:
SSO / OAuth2
Uydu uygulamalarımızın login işlemleri için kendi SSO/OAuth2 sistemimizi geliştiriyorum.
Ben bu satırları yazarken sistem yaklaşık %70 oranında tamamlanmış durumda.
Gereksinimleri yaklaşık 7 saat önce tanımladım. O zamandan beri GPT ve Opus birlikte büyük ölçüde otonom bir şekilde implementasyonu gerçekleştiriyorlar.
Sistem tamamlandığında bütün uydu uygulamalarını yeni login sistemine geçireceğim.
Böylece bir çalışanın sadece tek bir hesabı olacak ve bütün uygulamalara aynı hesap üzerinden giriş yapabilecek.
Git & CI/CD
Gitea benzeri, tamamen kendi ihtiyaçlarımıza göre şekillendirilmiş bir Git uygulaması geliştirdim.
Artık bütün Git repository’lerimiz burada bulunuyor.
CI/CD süreçleri de sistemin bir parçası. Her commit ile pipeline otomatik olarak çalışıyor.
Dolayısıyla ayrıca Jenkins’e ihtiyacım kalmadı.
Artifact Repository
Oluşturulan uygulama sürümleri için Nexus benzeri kendi artifact repository uygulamamı geliştirmeye başladım.
Implementasyona dün başladım ve şu anda yaklaşık %80’i tamamlanmış durumda.
Nexus’un yüzlerce özelliğine ihtiyacım yok.
Sadece bizim gerçekten kullandığımız kısmını geliştiriyorum.
CRM
Müşteri ilişkilerini yönetmek için kendi CRM uygulamamızı geliştiriyorum.
Büyük ve genel amaçlı bir CRM ürününü kendi süreçlerimize uydurmaya çalışmak yerine, CRM doğrudan bizim süreçlerimize göre şekilleniyor.
Burada da implementasyon büyük oranda tamamlanmış durumda.
Storage
Kullanacağımız bütün görseller, videolar ve dosyalar için kendi storage sistemimi oluşturdum.
MogileFS benzeri çalışan bu sistemde bir dosyanın üç farklı kopyasını farklı node’lar üzerinde tutuyorum.
Bir node kaybolduğunda dosyanın diğer kopyaları sistemde kalmaya devam ediyor.
Peki geriye ne kaldı?
Şu anda kullandığım temel altyapı komponentleri şunlar:
- Grafana
- Prometheus
- Zipkin
- Graylog
- WireGuard
- PostgreSQL
- Nginx
Bence yazılım dünyasında asıl büyük değişim burada yaşanıyor.
Eskiden sadece bir SSO sistemini geliştirmek bile aylar sürebilirdi.
Bugün ise belirli ve sınırlı gereksinimleri karşılayan bir SSO sistemi birkaç günlük bir işe dönüşebiliyor.
Bu da yıllardır yaptığımız Build vs. Buy hesabını tamamen değiştiriyor.
Eskiden hazır bir ürünü kullanmak çoğu zaman tartışmasız şekilde daha ekonomikti.
Bugün ise yüzlerce özelliğini kullanmadığım, iç yapısını tam olarak bilmediğim, sürekli security update’lerini ve upgrade süreçlerini takip etmek zorunda olduğum büyük bir sistem yerine; sadece kendi gereksinimlerimi karşılayan küçük ve sade bir uygulamayı birkaç gün içinde geliştirmek benim için gerçek bir alternatif haline geldi.
Elbette bunun bir bedeli var.
Kendi yazılımını geliştirdiğinde mimarinin, security’nin, testlerin, backup’ın, monitoring’in ve bakımın sorumluluğunu da tamamen üstleniyorsun.
Fakat artık bunların önemli bir kısmını kontrol eden ve sürekli test eden araçları da yine AI desteğiyle oluşturabiliyoruz.
Bence yapay zekânın yazılım geliştirmede değiştirdiği en önemli şeylerden biri tam olarak bu:
Build vs. Buy dengesi yeniden kuruluyor.
Eskiden başkalarının yaptığı Lego parçalarını kullanıyorduk.
Çünkü her Lego parçasını kendimiz üretmek ekonomik olarak mantıklı değildi.
Şimdi ise ihtiyaç duyduğumuz Lego parçalarını birkaç gün içerisinde, tam istediğimiz şekil ve büyüklükte kendimiz üretebiliyoruz.
Belki de önümüzdeki dönemde yazılım geliştirmedeki en büyük değişimlerden biri bu olacak:
Başkalarının yaptığı Lego parçalarını birleştirmek yerine, kendi Lego parçalarımızı üretmeye başlayacağız.