Modeli Buluta Değil Telefona Koymak
Modeli buluta koymak kolay yol. Ar-Ge tarafında tasarladığım işlerin çoğunda modeli telefona koymayı seçtim; bu yazı o kararın kazancını ve bedelini anlatıyor.
Yazıyı okuBlog
Burada pazarlama metni yok. App Store'da uygulama reddedildiğinde ne yaptığımı, hangi arka ucu neden seçtiğimi ve bir siteyi Google'da görünür yapmak için attığım adımları — yani gerçekten yaşadığım şeyleri — yazıyorum. Bir kısmı geleceğin bana notu, bir kısmı da aynı sorunu yaşayan birine yardım etsin diye.
Modeli buluta koymak kolay yol. Ar-Ge tarafında tasarladığım işlerin çoğunda modeli telefona koymayı seçtim; bu yazı o kararın kazancını ve bedelini anlatıyor.
Yazıyı okuUygulama sadece bazı kullanıcılarda çöküyordu. Sebep cihazda değil, cihazın dil ayarındaydı — ve tek bir harften ibaretti.
Yazıyı okuModeli seçmek işin kolay kısmıydı. Zor kısım, açık veri setindeki temiz laboratuvar fotoğrafıyla çiftçinin gölgede aceleyle çektiği fotoğraf arasındaki uçurumdu.
Yazıyı okuİlk uygulamalarımı Play Store'da yayınladım, iOS'a bir yıl sonra geçtim. Kademeli yayın, test kanalları, Data Safety ve hedef API zorunluluğu — iki mağaza arasındaki gerçek farklar.
Yazıyı okuBir uygulamanın en çok işe yarayacağı an, çoğu zaman internetin çalışmadığı an oluyor. Sağlam tasarımı ve Vakti Geçmeden'in QR doğrulaması üzerinden çevrimdışı öncelikli mimarinin kararları ve bedelleri.
Yazıyı okuKullanıcı çöken uygulamayı bildirmez, siler. Sembolikleştirmeden önceliklendirmeye, yayın sonrası çökme takibi rutinim.
Yazıyı okuÜrün tarafında tek cümlelik bir kural — ilk bulan kazanır — arka uçta bir yarış koşulu problemine dönüşüyor. Mysterious Treasure'da tek kazanan garantisini nasıl kurduğumu anlatıyorum.
Yazıyı okuAlıcı parayı, satıcı bileti önce vermek istemiyor. 2.El Bilet'te bu kilitlenmeyi tek bir düğmeyle değil, birbirini bekleyen durumlardan oluşan bir emanet akışıyla çözdüm.
Yazıyı oku2021'de Swift'e geçtim, o günden beri Apple ekosisteminde çalışıyorum. Bu yazı, o süreçte yediğim redlerin ve "keşke ilk uygulamamda bilseydim" dediğim şeylerin dürüst dökümü.
Yazıyı okuAynı ürünü iki kez yazmayı bıraktım. Tek kod tabanının bana ne kazandırdığını, karşılığında neyi bıraktığımı ve yerel deneyimin Flutter yazarken nasıl işe yaradığını anlatıyorum.
Yazıyı okuAraç rotalama problemi NP-zor: durak sayısı arttıkça kesin çözüm pratikte imkânsızlaşıyor. RotaAkıl tasarımı sırasında “optimal” ile “yeterli” arasındaki farkın aslında bir ürün kararı olduğunu gördüm.
Yazıyı okuFatura veri boyutuna değil okuma sayısına bakıyor. Maliyeti şişiren beş kalıp: önbelleksiz okuma, açık kalan dinleyici, N+1 sorgu, sayfalamasız liste ve saymak için hepsini çekmek.
Yazıyı oku2021’de Java’dan Swift’e geçtim ve ilk haftalarda yazdığım şey aslında Swift söz dizimiyle yazılmış Java’ydı. Optional’lar, değer tipleri, protokol uzantılarındaki gönderim davranışı, ARC ve closure yakalama listeleri konusunda hangi refleksimin nerede yanlış çalıştığını, kendi hatalarım üzerinden anlatıyorum.
Yazıyı okuYerelleştirme çeviri değildir. Metin uzunluğundan para birimine, bölgesel fiyatlandırmadan bildirim saatine kadar global pazara çıkarken değişmesi gerekenler.
Yazıyı oku2020'de Java ile ilk Android uygulamamı yazarken ekranı döndürünce verilerin uçmasından tutun da bellek sızıntılarına kadar her tuzağa tek tek düştüm. Bu yazıda yaşam döngüsünü, context sızıntılarını, AsyncTask döneminden bugüne kalan alışkanlıkları ve null kontrolünü kendi hatalarım üzerinden anlatıyorum.
Yazıyı oku2020’de Java ile yazdığım Android projelerine Kotlin’i sonradan ekledim. Hepsini birden çevirmek yerine dosya dosya ilerledim. Bu yazıda platform tiplerinin neden null güvenliğini deldiğini, Firestore ile data class kullanırken çalışma anında patlayan yeri, extension function’ların Utils sınıflarının yerini nasıl aldığını ve AsyncTask’tan coroutine’e geçerken Firebase çağrılarını nasıl sardığımı anlatıyorum. Kırılan Java çağrıları ve bunları düzelten @Jvm* işaretleri de dahil.
Yazıyı okuToken neden sessizce ölür, izni ne zaman istemeli, bildirimden doğru ekrana nasıl gidilir? Kurulumdan sonra başlayan asıl iş.
Yazıyı okuPython öğrendikten bir yıl sonra Raspberry Pi ve Arduino ile bir deprem erken uyarı prototipi yaptım. Ekranda beklediğim düz çizgi yerine titreyen bir sayı bulutu gördüm. GPIO, seri hat, örnekleme, filtreleme ve güç konusunda o projede öğrendiklerim.
Yazıyı okuKullanıcı size çözüm önerir; asıl anlatmak istediği şey ise yaşadığı problemdir. İsteği çözüme değil probleme çevirmek için kullandığım soruları ve önceliklendirme yöntemimi yazdım.
Yazıyı okuİkisini de gerçek projelerde kullandım. Hangisinin nerede parladığını, nerede canını yaktığını ve seçim yaparken sorman gereken 5 soruyu anlatıyorum.
Yazıyı okuAltı yıl Swift, Java ve Kotlin ile yerel uygulama yazdıktan sonra Flutter’a geçtim. Dilin sözdizimi değil, arayüzü kurma biçimi zorladı: değiştirilemez widget’lar, sürekli çağrılan build metodu, setState’in kapsadığı alan ve BuildContext’in ağaçtaki yeri. İlk ayda kafamı karıştıran noktaları ve yaptığım hataları sırayla anlatıyorum.
Yazıyı okuBir ürünün en pahalı kısmı, yazılıp da kimsenin kullanmadığı özellikler. Kapsamı daraltmayı bir kayıp değil bir beceri olarak görmeye başladıktan sonra kullandığım yöntemi yazdım.
Yazıyı okuBu sitede tek bir JavaScript kütüphanesi yok. Temayı ilk boyamadan önce uygulamayı, IntersectionObserver'ı, olay delegasyonunu ve kendi kodumda bulduğum kaydırma hatasını anlatıyorum.
Yazıyı okuKolay kısım veriyi yerelde tutmak. Zor kısım, iki taraf da aynı kaydı değiştirdiğinde hangisinin kazanacağına karar vermek.
Yazıyı okuMobil uygulama, kullanıcının cihazında çalışan ve incelenebilen bir program. Buradan çıkan tek kural var: istemciden gelen hiçbir şey doğru kabul edilemez. Bu kuralın pratikte ne anlama geldiğini yazdım.
Yazıyı okuBu siteyi saf CSS ile yazarken kurduğum tema sistemi, çözdüğüm ızgara taşmaları ve kontrast düzeltmeleri. Kütüphane yok, gerçek kod var.
Yazıyı okuCore Web Vitals aslında üç basit soru soruyor: sayfa ne zaman göründü, göründükten sonra yerinde durdu mu, dokunulduğunda cevap verdi mi. Bu üç metriği bozan tipik hataları ve teslim ettiğim sitelerde uyguladığım somut düzeltmeleri anlatıyorum.
Yazıyı okuYanlış gelir modeli kötü bir arayüzden daha hızlı kullanıcı kaybettiriyor. Üç modelin karşılaştırması, reklam türleri ve geçiş reklamını asla koymamanız gereken üç yer.
Yazıyı okuİlişkisel veritabanında veriyi normalleştirirsiniz; belge tabanlısında ekranı modellersiniz. Bu farkı geç anlamanın maliyetini ödedikten sonra kurduğum modelleme yaklaşımını anlatıyorum.
Yazıyı okuTeslim ettiğim her sitede aynı listeyi uyguluyorum. İçerik yazmadan önce halledilmesi gereken, çoğu 10 dakika süren ama atlandığında aylarca görünmez kalmana yol açan adımlar.
Yazıyı oku2018’den beri kendi kendime öğreniyorum. Bu süreçte işe yarayan üç alışkanlığı, hiç işe yaramayan iki yöntemi ve bir dili öğrenirken izlediğim sırayı yazdım.
Yazıyı okuBoyut doğrudan indirme ve güncelleme oranını etkiliyor. App Bundle, R8, vektör görseller ve sonradan indirilen içerik üzerine somut adımlar.
Yazıyı okuMarka sesi, sloganla değil her gün verilen küçük kararlarla oluşuyor. İki markanın sosyal medyasını yürütürken tonu nasıl yazılı hale getirdiğimi, platform farklarını, tekrar eden formatları ve içerik takvimini anlatıyorum.
Yazıyı okuİzinleri ne zaman istemeli, kayıt zorunlu olmalı mı, boş ekranda ne yazmalı? İndirilen uygulamanın ilk gün silinmemesi için sekiz somut adım.
Yazıyı okuİlk uygulamamı 18 yaşında yayınladım, sonra kendim kaldırdım — çünkü yazmayı biliyordum ama yürütmeyi bilmiyordum. Öğrenciyken ürün çıkarmanın gerçek kısıtlarını ve o dönemden çıkardığım dersleri yazdım.
Yazıyı okuKullanıcı uygulamayı ilk açtığında geçirdiği bir dakika, geri kalan her şeyden daha belirleyici. Onboarding akışını kurarken hangi kararları verdiğimi ve hangilerinden vazgeçtiğimi yazdım.
Yazıyı okuYarıda bıraktığım TÜBİTAK projesi, ilk gelir getiren uygulamam ve dil değiştirirken öğrendiklerim. Düz bir başarı hikâyesi değil — işe yarayanların ve yaramayanların listesi.
Yazıyı okuAynı uygulamayı iki mağazaya da yolladım; süreçler yüzeyde benzer, pratikte bambaşka. İnceleme mantığından test dağıtımına, ret sebeplerinden mağaza sayfasına kadar farkları ve her birine göre nasıl plan yaptığımı yazdım.
Yazıyı okuWeb’de hatalı bir dağıtımı geri alırsınız, mobilde alamazsınız — kullanıcının telefonundaki sürüm sizin elinizde değil. Bu gerçeğe göre kurduğum sürüm yönetimi düzenini anlatıyorum.
Yazıyı okuGeliştiricinin yazdığı metin genelde “ne yaptığını” anlatır, kullanıcının aradığı ise “bana ne” cevabıdır. Kendi uygulamalarımın mağaza ve arayüz metinlerini yeniden yazarken kullandığım yöntemi somut cümleler üzerinden anlatıyorum.
Yazıyı okuYayınladıktan sonra indirmelerin kendiliğinden gelmediğini pahalı bir şekilde öğrendim. Bir uygulamayı büyütmek için attığım adımlar.
Yazıyı okuİçerik üretiminde asıl sorun ilham değil, süreklilik. Hem uygulama geliştirip hem yayın yapmak zorunda kalınca kurduğum döngüyü — fikir havuzu, toplu çekim günü, format şablonları ve tek bir takvim — anlatıyorum.
Yazıyı okuYerel aramada rekabet, ülke geneli aramalardan bambaşka çalışıyor: mesafe, alaka ve bilinirlik üçlüsü. Fiziksel adresi olan işletmeler için kurduğum düzeni — profil, NAP tutarlılığı, sayfa mimarisi ve yorum akışı — adım adım yazdım.
Yazıyı okuArama motoru sayfanızdaki metni okuyor ama “bu bir hizmet mi, bir yazı mı, bir kişi mi” sorusunu tahmin ediyor. JSON-LD tam olarak bu tahmini ortadan kaldırıyor. Hangi tipleri neden kullandığımı, doğrulamayı nasıl yaptığımı ve en sık düştüğüm tuzakları anlatıyorum.
Yazıyı okuFreelance çalışırken zor olan kod değildi. Kapsamı yazılı onaylatmak, kötü haberi erken vermek, fiyat konuşmak ve faydayı özellikten ayırmak üzerine dersler.
Yazıyı okuEkibinizde nasıl bir katkı sunabileceğimi konuşmak isterseniz bana yazın. CV'me ve tüm projelerime aşağıdan ulaşabilirsiniz.