Product Designer

Başarılı Yazılımlar Üretebilmek

Herkese tekrardan merhabalar. Bu yazıda sizlere gözlemlerim ve birtakım deneyimlerim sonucu “Başarılı Yazılım” üretmede önemli olan faktörleri kısa kısa anlatmaya çalışacağım. Bu yazıdaki konu başlıkları, tamamen kendi bilgilerimi harmanladığım konu başlıkları olduğundan her projede veya ekipte farklılık gösterebilir veya ters tepebilir. Yanlış düşündüğüm noktalarda bana yapıcı eleştiriler ile yapacağınız dönütler beni çok mutlu edecektir. İyi Okumalar Dilerim!


ARAŞTIRMA

Tabii ki her şeye başlamadan önce kafanızda bulunan projeyi ya da fikri iyice araştırmak gerek. Her şey olup bittikten sonra bir bakmışsınız başka bir yazılımcı sizin yazılıma benzer bir yazılımı zaten yapmış. İşte bu tür durumlarda telif hakları ve benzeri gibi konular canınızı sıkabilir. Sadece ürün var mı yok mu diye de kontrol etmek yetmez. Bu ürün tutar mı tutmaz mı, ne kadar ihtiyaç var, ayırdığımız bütçe gerçekten değer mi gibi kendinize sorular sormak ile beraber kullanacağınız teknolojiye kadar önceden birkaç araştırma yapmanız işinizi sağlama alacaktır.


PLANLAMA

Bence yazılım veya dijital çözüm üretmeden önce en önemli hususlardan biri plan ve programdır. Bu plan program içerisinde ön görülen süreç sonuçları ve varsa eğer ekip içerisindeki görev dağılımı çok iyi bir şekilde hazırlanmalı ve üzerine kafa yorulmalı. Bir ürün ortaya çıkarmaya çalışılırken haldur huldur kod yazılmaya girişilmesi veya bir arayüz tasarlarken direkt sağa sola buton konulmaya çalışılması pek doğru bir yaklaşım değildir. Elinizde bir plan olduğu vakit neyi ne zaman yapacağınızı bilmeniz geliştirme esnasında daha az hata ile karşılaşmanızı sağlar.


YAPILACAKLAR LİSTESİ

Bu başlık da aslında planlamanın altında ama öneminden bahsedebilmek için ayrı bir başlık olarak açtım. Kendi üzerimde denediğimde beni motive eden bu metod, hedefime ilerlerken adım adım bir şeyleri bilinçli yapma hissi yarattığı için tıpkı oyunda seviye atlarmışcasına ilerlediğimi somut bir veri ile ifade edebildiğimi gördüm. Bir ipucu vermem gerekir ise, bu listeyi oluştururken daha net şeyler belirlemeye çalışın. Örneğin “anasayfadaki kodları düzenle” yerine “anasayfada bulunan menü bölümünü optimize hale getir” demeniz hem odaklanmanızı hem de zaman tasarrufu yapmanızı sağlayacaktır.


EKİP

Aslında başarılı bir proje üretme aşamasında sizi motive eden ve daha iyi işler çıkarmanızı sağlayan en önemli unsur ekip arkadaşlarınız. “Vay kardeşim sen de gel kod yaz”, “vay efendim amcaoğlu gel sen de bi’ el at” diyerek ekibinize kalitesiz eleman doldurmanız durumunda günün sonunda bir bakmışsınız ki her şeyi sadece siz yapıyorsunuz ve en çok yorulan da sizmişsiniz. Ekibinize almayı düşündüğünüz insanları öncesinde biraz araştırın. Sorumluluk alabilen biri mi değil mi? İşinde ne kadar profesyonel ve geçmişte çıkardığı ürünlerin başarısı gibi hususlara dikkat etmeniz ilerde iş birliği konusunda size rahatlık sağlayacaktır.


UFAK NOT #0

Dikkat etmiş olacaksınız ki ilk dört sayfa hep planlama ve hazırlık ile alakalı. Evet her ne kadar yazılım geçmişim o kadar uzun yıllara dayanmasa da hocalarımdan ve diğer yazılımcı arkadaşlarımdan da öğrendiğim kadarı ile eğer başarılı bir şeyler ortaya koymak istiyorsanız plan ve program büyük bir öneme sahip. Tabii bu diğer tüm işler için geçerlidir. Bu yazımda detaylara girmek isterdim fakat bu detaylara girip yazıyı gereksiz uzatmak istemem. Ve bu yazının bir şirkette çalışan yazılımcılardan ziyade küçük ekiplere hitap ettiğini düşünüyorum fakat bazı noktalar bireysel olarak işinize yarayabilir.


İLETİŞİM ORTAMI

Aslında bu başlık o kadar önemli olmasa da hız ve düzen sağlayacağını düşündüğüm için yazmaya karar verdim. İletişim kurduğunuz ortam ne kadar gelişmiş olursa o kadar hızlı bilgi alışverişi olacağından önemli gördüğüm bir nokta. Örneğin bir WhatsApp grubu açıp konuşmak yerine kanallardan ve kategorilerden oluşan bir Slack grubu veya Discord sunucusu hem düzeni sağlayacak hem de olası bir durumda projenizdeki kaynaklara daha hızlı ulaşmanızı sağlayacaktır. Fakat rahat ettiğiniz başka ortamlar var ise oraları da kullanmanızda sakınca görmüyorum.


İLETİŞİM ADABI

Sadece yazılım üretirken değil sosyal yaşamda size fayda sağlayacak en önemli hususlardan biri bence “konuşma üslubu ve adabı”. Ki eğer projede yönetici olan taraf iseniz bu daha çok önem arz ediyor. Planlama yaparken, herhangi bir sorunu tartışırken, görev verirken veya görev alırken iletişimde kullandığınız kelimeler hem işe verdiğiniz önemi hem de karşı tarafa olan saygınızı gösterir. Bir proje başkanının size “yarın akşama bunu kesin yap” demesi sizi strese sokmasıyla beraber yakın zamanda ekipten ayrılmanıza dahi yol açabilir. Günümüzde maalesef kurumsal anlamda bu tür iletişim hataları olduğu için çoğu zaman stres içinde debelenen yazılımcılar görmekteyiz.


AKSAYAN SÜREÇ

Planınız hazır, ekibiniz de. Ama bir türlü projeye başlayamıyorsanız veya geldiğiniz kademe sizi tatmin etmiyor ise büyük ihtimal hedeflerinizi yanlış veya eksik belirlemiş olabilirsiniz. Plan doğru olsa bile ekip arkadaşlarınıza planları doğru aktaramadığınız için işler yolunda gitmiyor da olabilir. Bu tür durumda sık sık planlamalarınız elinizde olmalı ve belirli aralıklarla işlerin doğru ilerleyip ilerlemediğini kontrol etmenizde fayda var. Başarısız projelerde en çok gözlemlediğim sorun idealler kadar yapılacaklar listesinin de büyük hedeflerden oluştuğu. Küçük hedefler ve amaçlar belirlemeniz hem sizi motive eder hem de daha hızlı sonuçlar alırsınız.


Başlıkları daha da özelleştirip artık “başarılı yazılım” konusuna hafiften geçebiliriz. Yazının başında da dediğim gibi bu yazacaklarım kendi tecrübelerimden oluştuğundan kesin yargılar taşımamaktadır.


HEDEFLER, SORUNLAR VE ÇÖZÜMLER

Projeler veya ürünler genellikle bir sorunu çözmeye yönelik ya da bir şeyleri kolaylaştırmak adına yola çıkar. Bu ürün son kullanıcıya da hitap edebilir, ekibinizdeki işleri hızlandırmak için de olabilir veya var olan bir projeyi geliştirmek için olabilir. Fakat ne yapacak olursanız olun sorunları, olası çözümleri, amaçları ve ürünü kullanacak kişilerin isteklerini listelemek ve bunlara göre hareket etmek daha doğrudur. Son kullanıcı sizden sadece fotoğraf çeken bir uygulama talep ediyorsa örneğin gidip arama motoru koymak son derece anlamsız bir durumdur. Kısacası amaçlardan ve ana sorundan sapmadan bir şeyler üretmeye başlamak bence daha doğrudur.


DOĞRU TEKNOLOJİ

Bu başlığı çoğu kişi size söylemiştir fakat yine de değinmemde fayda var. Ki bu başlık proje geliştirme süreçlerinin can damarlarından biridir. Doğru teknolojiyi seçmeden önce detaylı bir araştırma ve denemeler söz konusu. Örneğin bir proje .Net ile daha verimli çalışacak ise dil sempatizanlığı yapıp ille de Python ile yazmak doğru olmaz. Hem geliştirme süreci sancılı olur hem de gereksiz bir iş yüküne maruz kalabilirsiniz. Eğer ik dil veya teknoloji arasında kaldıysanız projenizde önemli olan kod parçalarını iki farklı teknolojide de simüle ederek varsayımlar üretebilirsiniz. Proje devam ederken tahminleriniz tutmaz ise kontrollü bir şekilde teknoloji değiştirmek daha yararlı olacaktır.


DOĞRU GELİŞTİRME SÜRECİ

Büyük firmalardan küçük firmalara, girişimlerden küçük okul projelerine kadar değişkenlik gösterebilen bu geliştirme metodları, bir şeyler üretirken hem daha düzenli olmayı sağlar hem de gerekli yerlerde müdahale etmeyi kolaylaştırır. Bu yazıyı yazarken kendim de yeni metodlar keşfettim. Bunları ufak araştırma ile bulabilir, deneyebilir ve kullanabilirsiniz. Bunlardan kendimce en çok duyduğum ise DevOps. Aşağıda vereceğim linkten size en uygun olanı seçip işe koyulabilirsiniz: Yazılım Süreç Yöntemleri


UFAK NOT #1

Yazı dallanıp budaklanmasın diye kimi geliştirme süreçlerinde dikkat çekmek istediğim bazı noktaları başka bir yazı da size aktarmayı planlıyorum. Bu yazıda daha çok başarılı yazılımların genel hatlarını anlatmaya çalışacağım.


OPTİMİZASYON VE HIZ

Tabii ki her şey kod yazıp bir şeyler ortaya çıkarmakla olmuyor. Yazdığınız kod ne kadar optimize çalışır ise o kadar çok verim alacak ve hedef kitlenizi bir o kadar çok memnun edeceksiniz. Örneğin veritabanınızı düzenli bir şekilde işlemezseniz veya gereksiz kodlar ile programı hantallaştırır iseniz aslında daha hızlı çıktı alabilecekken performans düşüklüğü ile karşı karşıya kalırsınız.


TEMİZ KOD

Bir önceki başlığı destekleyen bu başlık ise sizden sonra geliştirme yapacak yazılımcının işlerini kolaylaştırmak içindir. Kendim pek detaylı olarak üzerine düştüğüm bir konu olmasam da son projelerimde dikkat etmeye çalışıyor ve daha tertipli kodlar yazmaya çalışıyorum. Düzenli kodu çok çok kısaca açıklamak gerekir ise doğru değişken adları, yorum satırları, test edilmesi kolay kod blokları vb. şeylerin bütünü sizin kodunuzu temiz kod kategorisine sokmaktadır. Bu konuyu daha detaylı araştırmak isterseniz Bora Kaşmer hocamın yazılarına bakmanızı öneririm.


UI/UX

Tasarladığınız üründe eğer bir arayüz var ise bu arayüzü olabildiğince iyi tasarlamanız, ürününüzü diğer ürünlerden ayıracaktır. Apple ürünlerine bakacak olursak tasarım her zaman ön plandadır. Tasarım sadece butonlardan veya uygulamanızda kullandığınız resimlerden ibaret değildir. Font, renk ve resim seçimi, varsa eğer kullanılan resimlerin ne anlam ifade ettikleri, sadelik ve ferahlık, animasyonlar ve kullanıcı deneyimi tasarımı gibi başlıklar esas kaliteli tasarımı oluşturur. Siz kırmızıyı seviyorsunuz diye gidip bir üründe her yerde kırmızı kullanamazsınız. O kırmızının kullanıcıda ne iz bırakacağı çok ama çok önemlidir. Kullanıcı deneyimi de şu anlama geliyor, örneğin pek de kullanılmayan özellikleri uygulama içerisinde bulunan ayarlar sekmesinde en üstlere koymak anlamsızdır. Bunun yerine daha önemli ayarları en üste koymanız kullanıcı açısından daha az zahmet verici olacaktır.


TEST

Belki de ülkemizde en çok es geçilen veya üzerine düşülmeyen konulardan biri de “test”. Birçok test metodu olsa da kısaca anlatmak gerekirse yaptığınız projeyi çeşitli aşamalardan geçirip nereleri hatalı veya nereleri düzeltilebilir gibi raporlar hazırlayıp projeyi geliştirmeye devam etmektir. Bunlardan en önemlilerinden biri de kullanıcı deneyimi testidir. Kullanıcı için olan bölümleri test ederek, proje canlıya yani sunuma çıkmadan önce kullanıcının karışılaşabileceği olası hataları görüp düzeltmeye yarar. Siz eğer kodu test etmeden hemen ilk sürümü yayınlamaya kalkışırsanız büyük ihtimal aldığınız geri dönüşler pek de iç açıcı olmayacaktır.


PAZARLAMA

Ürünümüzü tasarladık, tasarım açısından modern; kod açısından optimize bir uygulama artık hazır. Testlerden de başarılı geçen bu projenin ilk sürümünü kullanıcıya sunmamız gerekiyor haliyle. Aslına bakacak olursak eğer her ne kadar da kusursuz denebilecek uygulamalar da yazsanız bu ürünü pazarlayamadığınız sürece hedef kitlenize istediğiniz şekilde ulaşacağınız söylenemez. Bu yüzden ürünü ilgi çekici bir website ile veya detaylı bir açıklama yazısı ile hedef kitlenize daha hızlı ulaşacağınızı düşündüğünüz platformlara ürününüzü tanıtır iseniz daha iyi sonuçlar alabilirsiniz. Reklam tasarımı, renkler, sloganlar pazarlamada önemli rol oynamaktadır.


ÖZGÜNLÜK VE FELSEFE

Bu başlığı nereye konumlandıracağımı açıkçası pek bilemedim. Fakat bu başlık da diğer başlıklar kadar önemli. Ekibinizde veya firmanızda belirli bir standart, felsefe ve kimlik oluştuğunda yıllarca ürettiğiniz ürünler hem sizi temsil edebilecek hem de projelerin belli bir kalitesi olacak. Örneğin birkaç proje içerisinde kullanıcı sizin projenizi gördüğünde, “Aa bu X ekibine ait olmalı” diyebilmeli bence. Bir örnek daha verecek olur isek, pixel kutular halinde yapılan bir oyun gördünüz ve hatta bu oyunun içinde de çeşitli hayvanlar da olsun. Siz bu oyuna tepki olarak “Minecraft gibi yapmışlar” diyorsanız eğer Mojang firmasının Minecraft ürünü kendini hafızalara kazıyabilmiş demektir. Yaptığınız yeniliklerde öncü olmak için kurumsal kimlik ve felsefe çok önemlidir.


KURUMSAL KİMLİK

Kurumsal kimliği biraz daha açacak olur isek ekibinize ait logo, slogan veya website sizin kurumsal kimliğinizdir. Kurumsal kimlik oluştururken logonuzun sizi iyi anlatabilmesi, modern olması ve yıllar geçse bile eskimemesi çok önemli. Eskise bile zamana uygun bir şekilde tekrardan düzenlenebilmeli. Bu tür şeyleri tasarlarken tıpkı arayüz tasarlamada anlattığım gibi renkler, fontlar ve anlamlar çok önem arz etmektedir.


KULLANICI İLE BAĞ

Ürün veya hizmet, yazılım veya başarı ile sonuca vardığınız herhangi bir ürün sunduktan sonra maalesef sattım oldu bitti olmuyor. Kullanıcının isteklerini dinlemek zorundasınız, olabildiğince hızlı yardım etmeye çalışmalısınız ve feedback adı verdiğimiz “geri dönüşlere” önem verip geliştirme sürecinize dahil etmeniz ve bunlara uygun planlama yapmalısınız. Kısaca özetlemek gerekirse hedef kitleniz ile ilgilenmeniz projeyi daha da geliştirmenizi sağlar.


UFAK NOT #2

İlk seferde başarılı olacaksınız diye kaide yok. Deneye yanıla, her gün kendinize yeni bir şeyler katarak zamanla başarılı olacaksınız. Belki de birçok kez ekip kurup dağıtmak zorunda kalacaksınız fakat bardağın dolu tarafına bakacak olursak bunlar hep tecrübedir. Hemen bir uygulama yapıp para kazanamayacaksınız belki, hatta belki yaptığınız küçük bir uygulama birden sizi ünlü edecek. Hiç belli olmaz. Önemli olan kendinizi geliştirmeye devam etmek ve olabildiğince tecrübe edinmeye çalışmak.


SON

Bu yazıda aslında size anlatmak istediğim, başarılı yazılımların temelinin sadece kod olmadığını, bir logonun dahi sizin başarınızda etmen olabileceğini göstermeye çalışmaktı. Elimden geldiğince kaba taslak proje üretim süreçlerini anlatmaya daha doğrusu önemli noktalara değinmeye çalıştım. Sizlerin de geri dönüşleri doğrultusunda zamanla yazıya birkaç başlık daha ekleyebilirim. Umarım hoşunuza gitmiştir. Bir sonraki yazımdaki görüşmek üzere.

Kendinize İyi Bakın!

Ömer Ayyıldız