The Phoenix Project Kitap İncelemesi

  The Phoenix Project, DevOps'u yoğun bir şekilde duymaya başladığımız bu aylarda DevOps'un neyi çözmek için nasıl ortaya çıktığını adım adım adeta bir macera romanı havasında takip ettiğimiz Parts Unlimited firması ve hayata geçirmeye çalıştıkları Phoenix Projesinin üretim ortamına alınması hikayesi hakkında.  Teknik olmayan, bilişim teknolojileri ekipleriyle az çok çalışmış kişilerin de rahatlıkla okuyup, anlayıp bakış açısını değiştirebileceği bir kitap. Kitap roman gibi yazıldığı için bazı bölümlerde gerçekten çok heyecanlı devam ediyor ve bölüm sonunda kitabı bırakamayıp diğer bölüme devam ediyorsunuz çoğu zaman. Hikayedeki çoğu kişi, olay ya da diyalog, bilgi teknolojilerinde çalışan herkes için çok tanıdık. Kahramanlarımızın olaylara verecekleri tepkiyi siz daha olayın gelişimi sırasında veriyorsunuz bazen. Bill, Wes, Patty ve hatta neredeyse hiç iletişim kurmadığımız ama romanın ana kahramanlarından biri olan Brent sanki beraber çalıştığımız kişiler gibi. Kitap DevOps'a operasyon ekipleri gözüyle bakıyor. Ana kahramanlarımızın tamamı operasyon ekiplerinde çalışan personeller. Yazılım geliştiren ekip ise çok tipik bir bakış açısıyla konuya yaklaştığı için açıkçası ilgili bölümlerde, bir yazılımcı olarak daha fazla yorumunuz ya da serzenişiniz olabiliyor. DevOps ve çevik metodolojiye yazılım ekibi açısından yaklaşım pek çoğumuz açısından daha yararlı olurdu görüşündeyim. Konu olan pek çok sorunun çözümü aylar alabiliyor normalde kitapta birkaç sayfada çözüme gidilebiliyor. Bu bir yandan gerçekçi gelmiyor, ama bir yandan da kitabın vermek istediği mesajı hızlı verebilmesi için böyle olması gerektiğine hemfikirim. Otomobil üretim hattı örnekleri üzerinden yazılım geliştirme ve operasyon süreçlerindeki sorunların çözümü, Toyota'nın Single Minute Exchange of Die (SMED) adını verdiği, üretim ekipmanlarının üretim işlemleri sırasında değiştirilmesi sürecindeki iyileştirmeleri hakkındaki bilgiler ile bağlanan daha sık yazılım sürümü kurulumu arasındaki bağlantılar oldukça ilgi çekici bölümler.  Kesinlikle çok eğlenceli ve sürükleyici dille yazılmış bir kitap.Teknik olsun olmasın herkese hitap edebilecek tarzda, hatta bilişim teknolojilerinde çalışmayan kişilerce okunmasının faydalı olabileceğini söyleyebilirim. Okuyalım, okutalım.

Building Evolutionary Architectures: Support Constant Change - Kitap İncelemesi

  Güncel hayatta günlük iş yaşamımızda sıklıkla, halihazırda var olan uygulamalara ek özellikler geliştiriyoruz. Bazen karşılaştığımız yazılımların mimarileri yeni geliştirilen özelliklerin adaptasyonunda çok zorluk çıkarıyor, bazen ise çok daha kolay bir şekilde adapte edebiliyoruz yeni özellikleri. İşte evrimleşebilir yazılım mimarisi tam da bu konu ile ilgileniyor. Yani günlük yaşamımızda sıklıkla karşımıza çıkan evrimleşen yazılımları, yeni gelecek özelliklere adaptasonunu kolaylaştırma, yazılımın hedeflediği mimari özellikleri riske atmadan yeni özellik geliştirebilmeyi, güncel teknolojiler ve güncel yazılım geliştirme pratiklerini kullanarak aktarmaya çalışıyor. Yazılım mimarisi üzerine çok güncel ve ilginizi kitabın sonuna dek üst seviyede tutacak bir kitaba ne dersiniz ? Son yıllarda sık sık duyduğumuz ve hatta hayatımıza girmeye başlayan bu yeni trendlerin ve pratiklerin oldukça açık ve anlaşılır bir şekilde anlatıldığı bu kitabı şiddetle tavsiye ediyorum. Aşağıda kitabı bölüm bölüm içerikleri ve benim ilgimi çeken kısımları ile kısaca özetlemeye çalıştım, umarım faydası dokunur. 1. Bölüm : Software Architecture Bu bölüm konuya giriş mahiyetinde yazılmış, genel bilgiler vererek neden yazılım mimarileri değişikliğe uğrar, nasıl hazırlıklar yapılmalıdır ve zamanla karşılaşılacak değişikliklerin ne kadar normal ihtiyaçlar olduğu üzerine nispeten kısa bir bölüm. Yazılım geliştirirken yazılım mimarlarının, yazılım ile alakalı taleplere göre çıkardıkları karakteristik mimari özelliklerin nasıl belirlendiği ne nasıl korunduğu üzerine başlıklar içeriyor. 2. Bölüm : Fitness Functions Benim için yeni olan bu terimi bu kitap sayesinde öğrendim. İlk bölümde bahsedilen yazılımın karakteristik özelliklerini, yazılıma zamanla yapılan değişikliklerle korunup korunmadığını test eden fonksiyonlara verilen isim fitness functions. Yazılım geliştirme süreci içerisinde continuous integration içerisine dahil edilen fonksiyonlar her değişiklikte karakteristik özelliklere yapılan etkiyi test ediyor.  Kısacası geliştirilen mimarinin, talep edilen ya da iddia edilen mimari özelliklere sahip olup olmadığını kontrol eden testlere fitness function deniyor.  Fitness functionları açıklayan bölüm sonrasında atomik, yani tek özellik üzerine yoğunlaşan fonksiyonları ve holistik yani birden fazla özelliğe yoğunlaşıp birbirleri ile ilişkilerini test eden fonksiyonları açıklıyor. Statik / dinamik, otomatik çalışan / manuel tetiklenen ve geçici fonksiyonlar gibi pek çok kategoriye ayrılan fitness fonksiyon çeşidini açıklayarak devam ediyor bölüm. 3. Bölüm : Engineering Incremental Change Continuous Delivery kavramını açıklayarak başlayan bölüm bu kavramın evrimleşebilir mimaride nasıl yer bulduğunu açıklıyor. Yapılancak değişikliklerin agile pratiklere de uygun olarak olabildiğince ufak yapılması ve otomatize edilmesi üzerinde duruyor. Sağlanan bir serviste yapılacak değişikliğin geriye dönük desteği nasıl sağlayabileceğini örneklendirerek çok anlaşılır bir şekilde aktarıyor. Github'ın, sisteminde gerçekleştirdiği günde 60 kurulumu nasıl yaptığı üzerine yazılmış bölüm ve Github ekiplerinin geliştirdiği Scientist kütüphanesini tanıtan bölümler gayet güncel ve ilgi çekici. Scientist kütüphanesi, sistemde yapılan refactoring'lerin eski kodda ve yeni yazılan kodda nasıl sonuçlar verdiğini karşılaştırıp güvenle değişiklik yapmayı sağlıyor. Kendime not olarak da aldığım Scientist'in .NET port'u olan Scientist.NET gayet güzel örneklerle dökümante edilmiş açık kaynak bir kütüphane. Ayrıca Hypothesis and Data Driven Development ve 2013 yılbaşında Facebook'un karşılaştığı inanılmaz sayıdaki fotoğraf yüklenesi ve bunların büyük bir çoğunun saldırgan olarak işaretlenmesi ile ilgili vaka, ve bunun altyapıda yarattığı yoğunluk üzerinde duruluyor. İnsanların kendi "hoş gözükmeyen" fotoğraflarını saldırgan olarak işaretlemesi eğilimi üzerine facebook ekiplerinin yaptığı çalışmalar ve bu probleme çözümleri anlatılıyor. 4. Bölüm : Architectural Coupling Mimari açıdan uygulama modüllerinin birbirlerine referansları her zaman problem olmuştur. Modüllerin ne kadar bağlı olması gerektiği üzerine çalışmak mimarları zorlayan konulardan biri. Bu konuya ayrılmış olan 4. bölüm modülerlik ve mimari quantum'dan bahsederek konuyu monolith uygulamalara, plugin tabanlı uygulamalara, SOA, sunucusuz uygulamalara, BaaS ve FaaS ile microservislere bağlıyor. Birçok modern mimarinin anlatıldığı bölüm uzun ama oldukça zevkli ve kolay anlaşılır bir dille yazılmış. Bu noktada yine kendime not olarak aldığım bir Channel 9'da yayınlanmış güncel bir videoyu paylaşmak istiyorum : Microservice Architecture with ASP.NET Core 5. Bölüm : Evolutionary Data Uygulamaların olmazsa olmaz parçası veri kaynakları üzerine ayrılmış bölüm temelde veritabanlarında yapılacak değişikliklerin nasıl yönetileceği üzerine yoğunlaşmış. Veri kaynağı olarak veritabanlarını kullanan ortalama seviyedeki bir yazılım geliştiricinin sıklıkla kullandığı yöntemler üzerinde duruluyor.  6. Bölüm : Building Evolvable Architectures Bu bölümde eski bir uygulama nasıl evrimleşen hale getirilir, yeni geliştirilmeye başlanan bir uygulamada evrimleşen bir mimari kurabilmek için uygulanması gerekenler üzerinde duruluyor. Farklı tip uygulama mimarileri ve bunların evrimleşebilir hale getirilmesi ya da evrimleşebilirliğe ne kadar uygun oldukları açıklamalı anlatılıyor. Farklı tip mimarileri tanımak için bile okumaya değer bir bölüm. Ayrıca referans olarak eklenen kütüphanelerin evrimleşebilir bir mimari üzerindeki olası etkileri, eklenen kütüphanelere ya da bağımlı olunan frameworklere nasıl yaklaşılması gerektiği konusu inceleniyor. 7. Bölüm : Evolutionary Architecture Pitfalls and Antipatterns Bu bölümde evrimleşebilir bir mimari tasarlarken karşılaşılabilecek tuzaklar ve kötü tasarım desenleri inceleniyor. Mesela genellikle düşülen tuzaklardan biri, geliştirilen yeni bir uygulama eğer temelde bir başka ürüne dayanıyor ise mimarinin bu ürüne göre şekillenmesinin yanlışlıklarından ve etkilerinden bahsediliyor. Ayrıca kitap genelinde sürekli referans konan The Last 10% tuzağı bu bölümde inceleniyor sonunda. Uygulama geliştirirken genellikle seçilen kütüphaneleri uygulamanın 80% - 90%'sini hızlandıracak, ya da geliştirmesini kolaylaştıracak şekilde seçiyoruz. Ama bazen kalan 10%'lik kısmın geliştirmesi ya da etkileri o kadar büyük olabiliyor ki uygulamaların başarısızlıkla sonuçlanmasına bile sebep olabiliyor. Bu tuzak, gerçek bir örnek anlatılarak inceleniyor. Code Reuse ile alakalı oldukça aykırı fikirlerin yeraldığı bir bölüm var, benim oldukça ilgimi çekti. Üniveristeden beri şartlandığımız code reuse'un gerçek hayatta işleri ne kadar zorlanştırdığı üzerinde duruluyor. Loglama ve monitoring gibi temel mimari özellikler dışındaki kısımların kod kopyalanarak ya da yeniden yazılarak uygulamaların olabildiğince birbirinden ayrık tasarlanması üzerinde duruluyor. Hatta yanlışlıkla yapılabilecek kod reuse'ları ve bunun sonucu oluşan bağımlıklıkları engellemek için her ayrık servis için farklı teknoloji seçimi bile yapılabileceği öneriliyor.  8. Bölüm : Putting Evolutionary Architecture into Practice Kitabın son bölümü gerçek hayatta evrimleşebilir bir yazılım mimarisinin nasıl hayata geçirilebileceği üzerine eğiliyor. Yazılım geliştirecek ekiplerin nasıl yapılandırılması gerektiğinden başlayıp süreçlere kadar eğiliyor.