Previous
Next

Sizi sekiz dakikada neden Agile yaklaşımı ile çalışmamız gerektiğine ikna edebilir miyim?

by Cem Kefeli 12. Mart 2019 00:40

Süre başlasın! Foot in mouth

ilk önce şunu belirtmek isterim ki eğer birisini bir yönteme ikna etmeye çalışıyorsak, başta ve en başta buna kendimizin inanmış olması mutlaka ve mutlaka şart. Daha giriş cümlesinde bu kadar çok pekiştirme kullanmam da işte bu yüzden.

Yazının bütünü süresince çevik yaklaşımdaki rollerden, detaylı metodolojilerden ve hatta çevik manifesto'dan bile bahsetmeyeceğim ama yalın bir dille neden bu tarafa doğru evrilmemiz gerektiğinden kesinlikle bahsedeceğim.

Growth of InventionSon günlerimizi düşünerek başlayalım... Teknoloji ve icatların gelişimi çok uzun zamandır doğrusal bir şekilde değil eksponansiyel bir şekilde ilerliyor. Her günümüz bir önceki günden daha da teknolojik yani: Üst üste yığılarak ilerliyor. Hal böyle olunca ister teknoloji işi olsun ister sebze-mevye işi olsun bir şekilde tekonolojiye daha hızlı ayak uydurmaya mecbur kalıyor. Zaten de konumuz tam da bu ayak uydurmaya çalışma aşamasında ortaya çıkıyor. Yıllar yıllar içinde birçok teknoloji geliştirme yöntemi denenmiş, kullanılmış bir kısmı da kenara bırakılmış. İşte uzunca bir süredir de bir başka yöntemi bazı istisnalar hariç kenara bıramak üzereyiz, ve hatta birçok kuruluş bıraktı da.

Teknoloji ve market çok hızlı ilerliyor. Talep sahibi birşey istediğinde klasik yaklaşımlarla bu iş daha tamamlanmadan yeni bir gereksinim ortaya çıkıyor. Çıkabiliyor demiyorum çünkü çoğunlukla çıkıyor. Ya da tamamlandığında o uzunca maratondan dolayı atlanan, gözden kaçan, yanlış anlaşılan, netleşmeyen şeylerden dolayı tam da ihtiyacı karşılayamıyor. Ama kötü olan o ki bu duruma ancak ve ancak o uzunca süreç sonunda vakıf olabiliyoruz.

Çevik yaklaşım ise tam da bu dertlere derman olmayı hedefliyor!

Talep sahibine kısa süreler içerisinde, her ne kadar nihai hali olmasa da, kullanılabilir ve yaşayabilir çıktılar sunma felsefesi ile ilerlenmesi dertlerin dermanı olma aşamasında anahtar öneme sahip. Çeviklik, adım adım gelişmeyi ama sürekli gelişmeyi amaçlıyor.

Çevik yaklaşım kullanılarak geliştirildiği düşünülen ve çokça da söz edilen bir kaykay/araba örneği var ama ben ilk aklıma gelen kendi örneğim üzerinden ilerlemek istiyorum.

Örneğin talep sahibimiz bizden buhar kazanlı ve giyeceği otomatik algılayabilen bir ütü istemiş olsa, bizim bu isteği tümden karşılamamız uzunca süreler, birkaç ay alabilir. Ama bununla birlikte bu isteğin en azından bir kısmını sağlayabilen, en azından ütü yapma gibi basit bir fonksiyonu yerine getiren bir ürün sunsak? Örneğin kazanı olmayan ama sıcak su fışkırtabilen bir ütü Surprised Bu ilk ürün üzerinden tasarıma ve ergonomiye odaklanarak ürün hakkında yorum yapabilir mesela ürün sahibi. Bu ürünün üstüne geliştirme yaptıkça hem talep sahibinin nihai isteğine yaklaşsak hem de bir değer yaratsak? Örneğin hemen peşine buhar da fışkırtabilen, onun peşine de buhar kazanından beslenen ve yüksek basınçlı buhar fışkırtabilen bir ütü sunabilsek? Nihai olarak da giyecek tanıma algoritmasını da ilave ederek istenilen ürünü teslim edebilsek? İşte o zaman hayat daha güzel olurdu!

Çevik yaklaşım tabiki birtek bu örnek demek değil ama iş çıktısı sunma anlamında da gerçekten çarpıcı bir örnek. Çünkü belki de talep sahibi ilk test edilebilir ürün kısa sayılabilecek bir sürede eline ulaştığında daha önce hayal etmediği ve hesaba katmadığı birşey fark edebilir. Bu durum belki de ürünün hayatını daha orada bitirebilir. Ya da talep sahibi belki de tüm isteğin bir anda karşılanması yöntemiyle ilerlendiğinde ve aylar alacak çalışma sonrasında karşılaşacağı durumla erkenden karşılaştığında ürüne farklı bir yön de verebilir. Ama ne olursa olsun erkenden farkında olur ve gidişatı da bu şekilde belirleme imkanına kavuşmuş olur.

Bir diğer konu da ürünün nihai hali sunulduktan sonra hayatına nasıl devam edeceği konusu. Çevik yaklaşımlarda ürün sahipleri kendi ürün iş listelerini kendileri oluşturabildikleri, önceliklendirebildikleri ve yön verebildikleri için, asıl çıktıyı üretecek ve ürünü sunacak ekibin önceliklerini paylaşlarla da hem fikir kalarak değiştirebiliyor. Örneğin günün birinde pazar ihtiyaçları değiştiğinde buhar kazanlı ve giyeceği otomatik tanıyan ütüye bir de kendi kendine kapanma özelliği eklemek istediğinde yine aynı takım üzerinden diğer ürünlerinin de önceliğini dikkate alarak karar verebilir. Belki bir diğer ürüne getirilecek bir başka özellik ütüye getirilecek bu özellikten daha fazla etkilidir, daha fazla gelir beklentisi vardır dolayısıyla tercih de edilmeyebilir.

Tüm bu anlattıklarıma aslında gün sonunda öz bir yapı imkan sağlıyor:

Ne yaptığını bilerek ilerleyen, hata ihtimalinde kayıpların az ama telafi imkanının fazla olduğu, ürün ya da takım anlamında sürekli gelişen ve kendi kendini denetleyebilen ve yönlendirebilen, talep sabinden talebin testlerini yapana kadar tüm üyelerin bir arada olduğu takımlar.

Zaten çevik yaklaşımın ayırt edici özelliklerinden birisi de bu takımların yapısı. Yoksa size de yukarıda bahsettiğim böl-parçala ve ürünü öyle teslim et yaklaşımı projelerin klasik yöntemlerde yönetildiği zamanlarda fazlara ayırma yaklaşımına benzemiyor mu? Benziyor ama burada ayırd edici bir nokta daha var. Ürünü teslim edecek takımların yapısı. Çevik takımlar temelde bir üst paragrafta bahsettiğim yetilere kesinlikle sahipler. Bir arada çalışıyorlar, kendi kendilerine yetiyorlar ve verimi en üst noktaya çıkarmaya odaklanıyorlar. İlk başta bahsettiğim gibi takımların yapısı ile ilgili bu yazıda bilgi paylaşımında bulunmayacağım ama belki bir başka bir yazıda hem kendime not düşerim hem de sizlerle paylaşırım.

Benim gözümden iş değeri anlamında çevik çalışmanın büyük getirisi bu şekilde özetleniyor.


Edit - 2019-10-18 15:05:23 :

...Olağanüstü ve ansızın ortaya çıkan durumlarda, ilk teması sağlayan, bir birliğin en üst rütbeli komutanı değildir. Büyük küçük her birlikteki her subay, astsubay, hatta er hareket tarzına ilişkin üstünden hiçbir emir ve fikir alamayacağı durumla karşılaşabilir. İşte bu sebeple, gerek komutanların gerek askerlerin kendiliğinden düşünerek iş yapabilecek meziyette yetiştiklerine kanaat getirilmeden bir askerî birliğin, bir ordunun güvenilecek ve ayanılacak kuvvet olarak bilinmesi ihtiyatsızlıktır, felakettir...

Zabit ve Kumandan ile Hasb-ı Hâl
Kurmay Yarbay Mustafa Kemal, 1914

Bu tanım sizce de agile (çevik) metodoloji için sıklıkla dile getirilen 'self organized' yetisi ile birebir eşleşmiyor mu?

Hem de tarih 1914 ve de 'self organized' olması düşünülen yapı koskoca bir ordu...

Günümüzde 100-300 kişilik şirketler bile bunu gerçekleştireceğim diye acı çekerken kocaman bir orduya bu vizyonu getirmeye çalışmak sizce de mükemmel bir ileri görüş değil midir?

#Agile #Çevik #MustafaKemalAtatürk

Kaynaklar:


Design Patterns - Tasarım Desenleri

by Cem Kefeli 26. Eylül 2017 00:43

Aslında;

Ben şu işi böyle yapıyorum. Bu şekilde çözüm buldum, çok da kullanışlı, işleri çok da kolaylaştırıyor. Sen de kullan diye de standard bir diagram haline getirdim. Al işte bu da o diagram!"

demektir 'Design Pattern' ya da Türkçe olarak 'Tasarım Deseni'. Bu kadar da basittir felsefe olarak...

Design Patters - Tasarım DesenleriBirilerine bir yön vermeyi, sık yaşanan sorunları ortak kalıplarda en ideal yöntem ile çözmeyi amaçlar. Çözmekten de ileri gider ve herkesin bir çırpıda anlayabileceği, ulaşabileceği ve uygulayabileceği sadelikte ve standart söylemle dile getirir söylemek istediklerini. 'Best Practice' ortaya koyar bir başka söylemle. Peki en iyi olduğunu kim nasıl tescil eder bu yöntemin? Aslında hiç kimse. Zamana ve tercihe bağlı bir algı bu. Kabul gören tasarım zamanla yayılır ve doğal yollardan tescil edilmiş olur. Yani konu bir probleme getirilen en iyi çözüm iddiasını taşımak değildir aslında.

Yazılım diline özgü de değildir. Bir tasarım deseni farklı farklı yazılım dilleri kullanılarak uygulanabilir. Desen, yazılımın nasıl olması gerektiğini ortaya koyar ve resmi çizdikten sonra kenara çekilir, gerisini geliştiriciye bırakır. Geliştiriciye de kolaylıklar sağlar. Neyi nasıl yapması gerektiğini daha önce aşina olduğu tasarım desenleri yardımıyla kolayca belirleyebilir. Ya da kendisine ait olmayan bir kodu okurken tasarım deseni sayesinde kaynak koda kolayca adapte olabilir. Kendisine ait olmayan bir kaynak kod üzerinde geliştirmeye başladığında tekrara düşmeden, yapıyı bozmadan yazılım geliştirebilir.

Peki neden ihtiyaç var desenlere? Bu soruyu sormadan önce belki de bir yazılımın ne kadar kaliteli ve güncele uygun olduğunun nasıl anlaşılabileceğini düşünmek gerekir. Anlayabilmek için genişletilmiş hali yedi adet ama temelde dört adet başlık vardır vardır litaratürde bahsedilen ve incelenmesi gereken;

  • Rigidity: Bir yazılıma yeni bir özellik eklenmesi, gelen yeni bir iş isteğinin karşılanması için yazılımın birçok yerinin değiştirilmesi gerekiyorsa ve bu değişiklikler de çok köklü yerlere dokunuyorsa 'değişmezlik' kavramı için sıkıntı var demektir. Normal şartlarda yalnızca yeni özellikle ilgili yerlere dokunmak yeterli iken bir de bu yeni özellik haricinde birçok farklı noktaya dokunmak gerekiyorsa yazılım artık ağır yavaş ölüyor demektir.
  • Fragility: Üzerinde geliştirme yapılmak istenen yazılım değişiklik isteklerine çok karmaşık cevap veriyorsa örneğin asıl iş ile mantıksal bağı olmayan birçok yeri etkiliyorsa ve bu etkiler yıkıcı olabilecek türden ise yazılım için ciddi anlamda kırılganlık var demektir.
  • Immobility: Günümzde artık birçok yazılım, genel amaçlar için yazılmış kütüphaneleri kullanarak iş görebiliyor. Yani her kütüphane kendi işinde özelleşmiş özellikleri barındırıyor ve yazılımlar ise bu kütüphanelerin yalnızca birer müşterisi olarak konumlanıyor. Eğer yazılım bu mantığa uygun bir şekilde geliştirilmemişse yani bir değişiklik modüler bir şekilde yapılamıyorsa ve birden çok yerde aynı kodlamanın uygulanmasını mecbur kılıyorsa o yazılım için taşınabilirlik anlamında sıkıntılar var demektir.
  • Viscocity: Bir yazılım üzerinde değişiklik yapılması düşünüldüğünde olması gerekeni yapmak yani design temelli çalışmak taba tabirle uyduruk yöntemle çalışmaktan daha zor ise o zaman yazılım artık güncel şartlara da ayak uyduramıyor demektir. Bu konu temelde yazılım ve çevre birim olmak üzere iki alt konu olarak inceleniyor litaratürde. Hani derler ya "Bu konu üzerime yapıştı kaldı. Kurtulamıyorum!" diye. Burada da durum aynıdır. Belki yazılımın artık günceli reddetmesi, ayak uyduramaması nedeniyle üzerinize yapışıp kalmıştır, belki de artık yazılımın yaşadığı ortam günceli takip edemiyordur, derleme zamanı çok uzamıştır bu nedenle üzerinize yapışıp kalmıştır. Fazlası...

Bit temelli (bitwise) operatörler ile mantıksal operatörler arasındaki fark

by Cem Kefeli 6. Temmuz 2017 23:24

Sadece tek bir karakterin yazılımınızın performansını ve gidişatını nasıl kolayca değişitirebileceğini görmek istiyorsanız yazının devamını okumanızı öneririm.

İlk önce bit temelli (bitwise) 've' (&) işaretinden bahsetmek istiyorum. Bit temelli işlemler, meşhur 'Olmak ya da olmamak, işte bütüm mesele bu!' sözüne uygunand (&) ve or (|) operatörleri için değer/sonuç tablosu bir şekilde var olan (1) ya da olmayan (0) değerlerin birbiri ile münasebeti ile ilgileniyor. 'veya' (|) operatörünü bir matematiksel işaret olarak ele alacak olursak toplama işlemine denk tutabiliriz. Eğer 'veya' işlemine girecek değerlerden herhangi birisi anlamlıysa yani '1' ise sonuç da anlamlı (true) olacaktır. Yapılan işlem içerisinde yalnızca tek bir 1'in olması sonucun '1' olması için yeterlidir. 've' (&) operatörünü bir matematiksel işaret olarak ele alacak olursak da çarpma işlemine denk tutabiliriz. Eğer 've' işlemine girecek değerlerden herhangi birisi anlamsızsa yani '0' ise sonuç da anlamsız (false) olacaktır. Yani yapılan işlem içerisinde yalnızca tek bir '0'ın olması sonucun '0' olması için yeterlidir. Bu basit bit temelli işler için bir değer/sonuç tablosu oluşturmak gerekirse sağdaki tablo karşımıza çıkar.

Bu ön bilgilerden sonra şimdi artık yazının ana konusuna gelecek olursak asıl önemli noktalardan birisi de mantıksal işlemler için 've' ve 'veya' operatörlerinin nasıl yorumlanacağıdır. Öncelikle şunu belirtmek gerekir ki eğer bit temelli işlem yapacak olursanız sonuç da yine bit temelli olacaktır. Çalışma anında bit temelli işlemlerde yorum gücü katma değeri yoktur. Sırası ile istenilen hesaplamadaki bit temelli işlemler yapılır, nihayetinde de yine bit temelli bir sonuç elde edilir. Mantıksal işlemlerde ise uygulama çalışma anında yine bit değerler üzerinden bir işlem yapılmaktadır ama bu sefer bir yorumlama katma değeri de söz konusudur. Biraz açacak olursak örneğin bir 'if' koşulu içerisinde yer alan aşağıdaki ifadeyi inceleyelim; Fazlası...

ESP8266 wifi modül kullanımı

by Cem Kefeli 29. Aralık 2016 15:11

Son günlerde ağırlıklı olarak arduino platformunda IoT temelli geliştirmeler yapmaya çalışıyorum. Tasarlamaya çalıştığım yapı genel olarak düşük güç ile çalışan sıcaklık, nem ve ışıklılık seviyesi gibi bilgileri wi-fi üzerinden bir merkezi birime ileten mobil bir birim. Bu mobil birimi denetleyen ve yöneten merkezi bir istasyon ve bu merkezi istasyonun konuştuğu bir WEB servis. Merkezi istasyonu RaspberryPI platformu üzerine kurdum. Çünkü burada java ile daha esnek ve arduino platformuna göre daha gelişkin yapılar adapte ediyorum. Zaten merkezi bir birim olduğu için de güç beslemesi kablo ile olacak ve düşük güç tüketimi ihtiyacı bulunmuyor. WEB servis ise java ile geliştirilmiş genel olarak merkezi istasyonun iletişim halinde olduğu, merkezi istasyon verilerinin MySQL veritabanına bu WEB servisler yardımıyla işlendiği, kullanıcı ayarlarının tutulduğu bir arayüz işlevini görmekte. Son olarak ise tüm bu sistemin kullanıcı yönetiminin sağlandığı bir android yazılımı. Bu bahsetmiş olduğum yapı şuan kullanılabilir durumda ve bu yapı yardımıyla kendi evimdeki kombi cihazını ev sıcaklığına göre (Günlük program, haftalık program, anlık sıcaklık kontrolü...) kontrol edebiliyorum. Ev sıcaklığının istediğim sıcaklıkta sabit kalmasını sağlayabiliyorum ve istediğim sıcaklığa geldiğinde kombimin gereksiz yakıt tüketmesini engelleyebiliyorum. Günlük ve haftalık programlar sayesinde evde ESP8266 12Eolmadığım zamanlar otomatik olarak ev sıcaklığım 19-20 derecelere iniyor, evde olduğum zamanlarda ise 22-23 derecelere çıkıyor. Bu kararları android yazılımı ile belirtilen değerlere uygun olarak merkezi birim veriyor ve uyguluyor.

Bu yazıda ise asıl odaklanmak istediğim konu Espressif'in üretmiş olduğu ESP8266 wi-fi modülü. Bu modül piyasada özellikle maliyetinin çok az olması ve projelere kolay implemente edilebiliyor olması ile ünlü. Benim için de seçim nedeni bu oldu açıkçası. Oldukça fazla zigbee, z-wave ve wi-fi modülü inceledim. Fakat birçoğunun maliyeti oldukça yüksekti, bir kısmı ise kolay temin edilebilir değildi. ESP8266 ise piyasada 20 TL etrafında değişen fiyatlara bulunabilir bir modül. İlk olarak ESP8266-01 ile başladım test çalışmalarıma fakat bir süre sonra gördüm ki bu donanım 3.3 v ile beslenmesine rağmen gerilim dalgalanmalarına aşırı duyarlı ve tabiki zamanında üretilen ilk versiyon olmasının vermiş olduğu bazı bug'ları var. Çoğu zaman firmware güncellemesi yapmak gerekiyor ve stabil bir şekilde çalışmıyor yük altında. ESP8266-01 deneyimim sonrası ESP8266-12'ye yöneldim. Bu platform ile daha önce karşılaştığım birçok stabil olmayan durumun hiçbirisi ile karşılaşmadım. Sonuç olarak da yapmaya çalıştığım nihayi üründe bu modülü kullanmaya karar verdim.Fazlası...

Hakkımda...

Cem KEFELİ

Electronics and
Telecommunication Eng.
devamı...


Son yapılan yorumlar...

Comment RSS

Yasal bir uyarı...

Disclaimer"Bu web sitesinde görmüş olduğunuz bilgilerin, dokümanların ve diğer materyallerin kullanılmasından doğabilecek hiç bir sorumluluktan site sahibi sorumlu tutulamaz. Web sitesi içerisinde yer alan yazılar, yorumlar, resimler ve diğer tüm içerikler yalnızca sahibinin görüşünü yansıtmakta olup içeriğin sahibi kişilerin çalıştığı kurumları bağlayıcı hiç bir nitelik taşımamaktadır. Yapılan tüm alıntılar mutlaka kaynak gösterilerek verilmeye çalışılmaktadır. Web sitesi içerisinde bulunan ilgili materyaller, ilgili yasal kurumlar tarafından uygun görülmemesi durumda kaldırılacaktır."
General