40.000+ Üyeli Bir Yazılımcı Pazaryerini Nasıl İnşa Ettim
Her yazılımcı, insanların çalışma şeklini gerçekten değiştirecek bir şey inşa etmeyi hayal eder. Benim için o proje Yazılımcı Bul oldu: bir hafta sonu denemesi olarak başlayıp 40.000'in üzerinde üyeye ve 500'den fazla yazılımcı profiline ulaşan, Türkiye'nin yazılımcı pazaryeri. İşte bu projenin nasıl ortaya çıktığının, onu şekillendiren teknik kararların ve yol boyunca edindiğim derslerin tüm hikâyesi.
Her Şeyi Başlatan Problem
Türkiye'de serbest yazılımcı olarak çalışırken sürekli aynı hayal kırıklığıyla karşılaşıyordum. Müşterilerin, kendini kanıtlamış yazılımcılara ulaşmak için güvenilir bir yolu yoktu; yazılımcıların ise bir LinkedIn profili ya da kişisel bir GitHub sayfası dışında, becerilerini sergileyebilecekleri merkezî bir mecraları bulunmuyordu. Mevcut platformlar ya fazla genel, ya fazla pahalı, ya da Türkiye pazarına hiç uygun değildi.
Fikri 2024'ün sonlarına doğru kâğıda dökmeye başladım. Amaç basitti: yazılımcıların zengin profiller oluşturabileceği, müşterilerin de onları gönül rahatlığıyla bulup işe alabileceği bir pazaryeri kurmak. Ama "basit" hedeflerin, ayrıntılara inmeye başladığınız anda karmaşık projelere dönüşmek gibi bir huyu vardır.
Teknoloji Yığınını Seçmek
Önyüzde React, arka uçta Node.js ve Express, birincil veritabanı olarak da MongoDB kullandım. Bu rastgele bir karar değildi. Profil ağırlıklı, aramaya dayalı bir arayüz için ihtiyaç duyduğum bileşen tabanlı mimariyi React sağladı. Node.js ve Express, baştan sona JavaScript bir yığınla hızlı ilerlememe imkân verdi; bu da doğrulama mantığını ve tip tanımlarını istemci ile sunucu arasında paylaşabilmem demekti. MongoDB ise doğru tercihti, çünkü yazılımcı profilleri doğası gereği belge biçimindedir: her profilin farklı bir beceri, deneyim, portföy ve sertifika kümesi vardır.
Projenin yapısı oldukça standart bir desen izledi: API, istemci uygulaması ve paylaşımlı yardımcı araçlar için ayrı paketlere sahip bir monorepo. Baştan sona TypeScript kullandım; bu, kod tabanı büyüdükçe bana sayısız hata ayıklama saatini kazandırdı.
Profil Sistemini İnşa Etmek
Profil sistemi platformun kalbiydi. Her yazılımcı profilinin becerileri, deneyim seviyelerini, saatlik ücretleri, uygunluğu, portföy projelerini ve referansları kapsaması gerekiyordu. MongoDB şemasını, yeni mezun bootcamp katılımcısından 20 yıllık deneyime sahip kıdemli mimara kadar farklı türde yazılımcıları kaldıracak kadar esnek tasarladım.
İlk zorluklardan biri beceri normalizasyonuydu. Yazılımcılar "React.js", "ReactJS", "React" ve "react" ifadelerini ayrı beceriler olarak giriyordu. Varyasyonları kanonik beceri adlarıyla eşleyen bir beceri taksonomisi sistemi kurdum; bu, aramayı ve filtrelemeyi çok daha güvenilir hale getirdi. Taksonomi yaklaşık 200 beceriyle başladı ve platform büyüdükçe 1.500'ün üzerine çıktı.
Portföy öğeleri; ekran görüntüleri, canlı URL'ler, GitHub bağlantıları ve ayrıntılı açıklamalar içeren zengin belgeler olarak saklanıyordu. Görsel depolama ve dönüştürme için Cloudinary kullandım; bu, yeniden boyutlandırma, sıkıştırma ve CDN dağıtımını otomatik olarak yönetirken altyapıyı sade tuttu.
Yapay Zekâ Destekli Eşleştirme Motoru
Yazılımcı Bul'u gerçekten farklı kılan özellik, yapay zekâ destekli eşleştirme motoruydu. Bir müşteri proje ilanı verdiğinde sistem, gereksinimleri analiz edip yazılımcıları beceri uygunluğu, deneyim seviyesi, müsaitlik, geçmiş değerlendirmeler ve yanıt süresine göre sıralıyordu.
İlk eşleştirme algoritmasını ağırlıklı bir puanlama sistemiyle kurdum. Her faktörün ayarlanabilir bir ağırlığı vardı ve nihai puan sıralamayı belirliyordu. Beceriler, yazılımcının profiline karşı kosinüs benzerliği kullanılarak eşleştiriliyordu; bu da kısmi eşleşmeleri iyi yönetiyordu. Örneğin "React" gerektiren bir proje, "Next.js" ya da "React Native" becerilerini listeleyen yazılımcıları da, biraz daha düşük uygunluk puanıyla yine de öne çıkarıyordu.
Özgeçmiş puanlaması bir başka önemli bileşendi. Yazılımcılar özgeçmişlerini yükleyebiliyordu ve sistem, yapılandırılmış veriyi çıkarmak için düzenli ifadeler ile doğal dil işlemenin bir bileşimini kullanarak bunları ayrıştırıyordu. Bu veri daha sonra profilleri otomatik olarak zenginleştirmek için kullanılıyor, manuel profil oluşturmanın sürtünmesini azaltıyordu.
Zamanla, eşleştirme kalitesini artırmak için OpenAI API'sini entegre ettim. Yapay zekâ, proje açıklamalarını yalnızca anahtar kelime listeleri üzerinden değil, anlamsal düzeyde kavrayabiliyor ve bunları yazılımcı deneyim anlatılarıyla eşleştirebiliyordu. Müşteri geri bildirimlerine göre bu, alakasız eşleşmelerin sayısını yaklaşık yüzde 60 azalttı.
Emanet (Escrow) ve Ödeme Sistemi
Bir pazaryerinde her şey güvene dayanır. Müşterilerin paralarının güvende olduğunu, yazılımcıların da ödemelerini alacaklarını bilmeleri gerekir. Müşterilerin proje başladığında ödemeyi yatırdığı, fonların ise kilometre taşı tamamlandığında veya proje teslim edildiğinde yazılımcıya aktarıldığı bir emanet sistemi kurdum.
Ödeme akışı yerel Türk ödeme sağlayıcılarıyla entegre oldu; bu da kendine özgü zorluklar getirdi. Türk bankacılık düzenlemeleri belirli uyum adımları gerektiriyor ve yerel ödeme API'lerine ait dokümantasyon çoğu zaman eksik ya da güncel olmuyordu. API davranışlarını tersine mühendislikle çözmek ve sağlam bir yeniden deneme ile hata yönetimi katmanı kurmak için haftalar harcadım.
40.000 Üyeye Ölçeklenmek
Büyüme dalgalar hâlinde geldi. İlk dalga organikti: yazılımcılar platformu kendi çevrelerine duyuruyordu. İkinci dalga içerik pazarlaması ve SEO'dan geldi. Teknik blog yazıları yazıp bunları Türk yazılımcı topluluklarında paylaştım; bu da istikrarlı bir trafik sağladı.
Teknik tarafta, MongoDB'yi ölçeklemek indeksleme konusunda titiz bir özen gerektirdi. En yaygın sorgu desenleri üzerine bileşik indeksler kurdum: beceri tabanlı aramalar, konum filtreleri ve müsaitlik kontrolleri. Veri kümesi büyüse de sorgu performansı 100 ms'nin altında kaldı; bu da arama deneyimi açısından kritikti.
Önbellekleme bir diğer temel parçaydı. Arama sonuçlarını, profil görüntülemelerini ve oturum verilerini önbelleğe almak için Redis kullandım. Önbellek katmanı, yoğun saatlerde veritabanı yükünü yaklaşık yüzde 70 azalttı.
Uygulama oldukça mütevazı bir altyapı üzerinde çalışıyordu: bir Nginx ters proxy'sinin arkasında birkaç Node.js örneği ve veritabanı katmanını yöneten MongoDB Atlas. Bu, büyüme için yeterli alan bırakırken operasyonel maliyetleri düşük tuttu.
Topluluk İnşa Etmek
Bir pazaryeri ancak topluluğu kadar iyidir. Topluluk özelliklerine epeyce zaman yatırdım: bir tartışma forumu, beceri tabanlı gruplar ve bir mentorluk eşleştirme sistemi. Bu özellikler, yazılımcılar aktif olarak proje aramadıkları zamanlarda bile onları platforma bağlı tuttu.
Forum, kendi MongoDB koleksiyonuna sahip ayrı bir mikroservis olarak inşa edildi; bu da onu bağımsız olarak ölçeklemeyi kolaylaştırdı. Gerçek zamanlı bildirimler için WebSocket bağlantıları kullandım; böylece yazılımcılar, bir gönderilerine yanıt geldiğinde ya da becerilerine uygun yeni bir proje çıktığında anında uyarı alıyordu.
Çıkarılan Dersler
Bir pazaryeri inşa etmek bana hiçbir öğreticide ya da kursta yer almayan birkaç şey öğretti. Birincisi, soğuk başlangıç problemi gerçektir. İlk günden itibaren hem arz (yazılımcılar) hem de talep (müşteriler) gerekir; ne var ki hiçbir taraf boş bir platforma katılmak istemez. Bunu, tanıdığım yazılımcılara bizzat ulaşarak ve ilk üç ay için ücretsiz premium profil sunarak çözdüm.
İkincisi, arama kalitesi ürünün ta kendisidir. Müşteriler doğru yazılımcıyı hızlıca bulamıyorsa, platformu terk ederler. Arama algoritmasını sürekli iyileştirdim; farklı sıralama stratejilerini A/B testine tabi tuttum ve her iki taraftan da geri bildirim topladım.
Üçüncüsü, güven mekanizmaları özelliklerden daha fazla önem taşır. Emanet sistemi, doğrulanmış profiller ve değerlendirme sistemi, büyüme için herhangi bir gösterişli arayüz bileşeninden çok daha fazlasını başardı.
Son olarak, belirli bir pazara (Türkiye) yönelik geliştirme yapmak bana küresel platformlara karşı bir avantaj sağladı. Yerel ödeme ortamını, yazılımcı topluluğunun kültürünü ve genel platformların ele alamayacağı işe alma alışkanlıklarını biliyordum.
Sırada Ne Var
Yazılımcı Bul büyümeye devam ediyor. Yol haritasında ekip eşleştirme (tek tek yazılımcılar yerine tüm proje ekiplerinin işe alınması), yapay zekâ destekli bir proje tahmin aracı ve komşu pazarlara açılım var. Kod tabanı epeyce olgunlaştı ve mimari, büyümenin bir sonraki evresine hazır.
Bu platformu serbest çalışırken ve Digiturk'te tam zamanlı bir pozisyonda görev yaparken inşa etmek zorlayıcıydı, ama derinden inandığım bir şeyi pekiştirdi: öğrenmenin en iyi yolu, insanların gerçekten kullandığı bir şey inşa etmektir.